database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Devel 16233 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 16233
[프로그램] DB 이용한 컨텐츠 관리 시스템
작성자
문태준(taejun)
작성일
2002-06-12 15:19
조회수
11,354
첨부파일: taejun-cms.zip (21,251bytes)

같은 내용을 오라클 Devel에도 올렸습니다. 원래 오라클 자료를 기반으로 해서 만든것인데 실제 구현은 Mysql로 해서 여기에도 올립니다. 이정도는 중복되어서 올려도 괜찮을 듯 합니다.

 

 

 

###############################################

######## DB이용한 컨텐츠 관리 시스템(CMS) ##########

###############################################

 

 

프로그램작성일 : 2002. 1월-3월

프로그램작성자 : 문태준(http://tunelinux.pe.kr http://database.sarang.net 운영자)

문서 최종 업데이트 : 2002. 6. 12

 

웹사이트 규모가 커지면서 컨텐츠 관리를 효율적으로 하기 위한 관리 시스템이 필요합니다.

이를 CMS라고 합니다. Contents Management System.

효율적인 컨텐츠 관리를 위하여 데이터베이스를 이용할 수 있습니다.

이 프로그램은 오라클의 CMS자료를 참고로 하여 제가 Mysql용으로 일부 수정하여 바꾼 것입니다.

 

오라클의 자료는 다음과 같습니다.

http://otn.oracle.com/products/oracle8i/htdocs/cms/cmsdb.html

 

한글자료는 일부만 있습니다.

http://www.oracle.com/kr/magazine/webcolumns/2001/index.html?o41otn.html

 

 

DB기반의 CMS프로그램의 장점은 다음과 같습니다.

 

ㅇ 동시성 관리와 버전 통제 : 간단한 플랫파일 시스템에서는 2명 이상이 동일한 자산을 동시에 편집할 수 있지만, 단 한 사람이 변경한 내용만 유효할 것이다. 그러나, CMS는 복수 버전들을 지원할 수 있도록 짜여진 테이블에 자산들을 저장하며, 데이타베이스가 동시 액세스를 관리한다.

ㅇ 사이트 전체에 걸쳐 일관되면서도 커스터마이즈 가능한 룩앤필 : CMS는 데이타베이스에서 표준 디자인 요소들과 네비게이션 항목들을 끌어내어 템플릿 기반의 웹 페이지들을 만든다. 사용자는 이 자산들을 편집하고 템플릿을 재응용해 사이트 전반에 변화를 줄 수 있다.

ㅇ 액세스 통제: 특정 자산에 대한 변경은 사이트 전체에 영향을 미칠 수도 있다. 예를 들어, 욕구불만의 카피라이터가 법무팀의 \프라이버시\ 경고문을 편집하거나, 누군가가 고의로 회사 로고로 장난을 한다면 어떻게 되겠는가? 특정 자산에 손 댈 권한이 없는 사람이 이런 일을 하지 못 하도록 하기 위해 CMS는 사용자의 역할에 따라 다양한 레벨의 액세스 권한을 부여한다.

ㅇ 신속한 검색: Oracle8i에는 데이타베이스에서 텍스트를 인덱스하는 interMedia가 들어 있어, 검색 속도를 높여 준다.

 

 

여기서 제가 구현한 것에는 일부 기능이 빠져있습니다. 빠진 기능은 다음과 같습니다.

ㅇ 동시성 관리와 버전 통제 : 처음 만들었을때는 넣었으나 실제 사용시에는 뺐습니다. 소규모 인원이 관리하는 곳에서는 오히려 번거로운 기능이기 때문입니다. 필요하다면 약간만 프로그램을 수정하면 됩니다.

ㅇ 액세스 통제 : 사용자 인증을 통하여 사용자별로 별도의 권한을 줄 수 있습니다. 어떤 사람은 카테고리 추가만, 어떤 사람은 컨텐츠 업데이트만 가능하도록 바꿀 수 있습니다.

ㅇ 신속한 검색 : 오라클 자료에서는 검색엔진에서 사용할 인덱스를 interMedia를 이용하여 처리합니다. 또한 본문 텍스트 검색시에도 이용가능합니다. 인터미디어는 대량의 텍스트 자료를 검색하기 위한 기능으로서 별도의 검색엔진이 불필요합니다. Mysql에서는 full-text 검색을 인덱싱처리하는 기능이 최근 추가되었지만 아직 한글 지원은 안되고 있습니다.

 

 

기본적으로 먼저 오라클의 자료를 읽어보셔야 이해가 가능합니다. 영문자료지만 천천히 읽어보면 이해가 갈 것입니다.

 

사용시 개선점이나 의견에 대해서는 http://tunelinux.pe.kr 사이트를 이용하여 주시기 바랍니다.

 

 

ㅇ 프로그램 구성

# tree

 

|-- README -> 지금 보고 있는 파일

|-- category_act.php

|-- category_insert.php

|-- category_list.php

|-- contents_act.php

|-- contents_insert.php

|-- contents_list.php

|-- contents_view.php

|-- include

| |-- common.ph -> 자주 사용하는 함수

| |-- config.ph -> db host, user, passwd, db명, table 명 지정

| |-- footer.ph

| |-- info

| | |-- cms-db.sql

| | |-- html_type.txt

| | `-- style.html

| `-- menu.ph

|-- index.php

|-- page_act.php

|-- page_insert.php

|-- page_list.php

|-- page_make.php

|-- page_view.php

|-- template_act.php

|-- template_insert.php

`-- template_list.php

 

실제 프로그램 이용시에는 include 디렉토리의 환경설정파일만 약간씩 고쳐서 사용하면 됩니다.

common.ph

define(\BASE_DIR\,$DOCUMENT_ROOT.\/cms\);

=> cms 프로그램이 있는 기본 디렉토리 지정. (php설정에 따라 $DOCUMENT_ROOT는 사용못할수도 있습니다)

 

config.ph

=> db설정을 하고 각자 상황에 맞게 변경하면 됩니다.

$doc_root = \/usr/local/www/template/\;

=> doc_root는 정적으로 생성되는 파일이 들어갈 디렉토리를 의미합니다. 웹서버의 user 에 대한 쓰기 권한이 있어야합니다. 일반적으로 nobody라면 nobody가 쓰기 권한이 있어야 합니다. 만약 nobody가 아닌 다른 일반유저 권한으로 파일을 생성하려면 파일생성시 펄이나 쉘 스크립트를 이용하여 파일을 생성해도 됩니다.

=> rsync 부분은 여러대의 서버를 운영하는 경우 동기화를 위하여 제가 사용했던 방법이며 필요하지 않으면 사용하지 않아도 됩니다.

 

include/info/cms-db.sql

=> db 구조 덤프뜬 내용임

 

 

ㅇ DB 구조도

 

-- MySQL dump

--

-- Host: localhost Database: cms

---------------------------------------------------------

-- Server version 3.23.49-log

 

--

-- Table structure for table \category\

--

 

DROP TABLE IF EXISTS category;

CREATE TABLE category (

category_id int(11) NOT NULL auto_increment,

category_name varchar(50) default NULL,

html_header int(11) NOT NULL default \1\,

meta int(11) NOT NULL default \1\,

page_header int(11) NOT NULL default \1\,

page_footer int(11) NOT NULL default \1\,

html_footer int(11) NOT NULL default \1\,

created datetime NOT NULL default \0000-00-00 00:00:00\,

updated datetime default NULL,

PRIMARY KEY (category_id)

) TYPE=MyISAM;

 

--

-- Table structure for table \contents\

--

 

DROP TABLE IF EXISTS contents;

CREATE TABLE contents (

id int(11) NOT NULL default \0\,

version int(11) NOT NULL default \1\,

content text NOT NULL,

comments varchar(255) default NULL,

created datetime NOT NULL default \0000-00-00 00:00:00\,

updated datetime default NULL,

deleted char(1) NOT NULL default \n\,

PRIMARY KEY (id,version),

KEY no (id)

) TYPE=MyISAM;

 

--

-- Table structure for table \page\

--

 

DROP TABLE IF EXISTS page;

CREATE TABLE page (

page_id int(11) NOT NULL auto_increment,

id int(11) NOT NULL default \0\,

title varchar(255) default NULL,

type varchar(10) NOT NULL default \html\,

path varchar(255) NOT NULL default \./\,

filename varchar(255) NOT NULL default \default\,

category_id int(11) default NULL,

descr varchar(255) default NULL,

status char(1) NOT NULL default \n\,

created datetime NOT NULL default \0000-00-00 00:00:00\,

updated datetime default NULL,

PRIMARY KEY (page_id),

KEY id (id)

) TYPE=MyISAM;

 

--

-- Table structure for table \template\

--

 

DROP TABLE IF EXISTS template;

CREATE TABLE template (

name varchar(200) NOT NULL default \,

clob_id int(11) NOT NULL default \0\,

version int(11) NOT NULL default \1\,

template text NOT NULL,

type int(11) NOT NULL default \1\,

created datetime NOT NULL default \0000-00-00 00:00:00\,

updated datetime default NULL,

deleted char(1) NOT NULL default \n\,

PRIMARY KEY (clob_id,version),

KEY no (clob_id)

) TYPE=MyISAM;

 

--

-- Table structure for table \template_type\

--

 

DROP TABLE IF EXISTS template_type;

CREATE TABLE template_type (

type_id int(11) NOT NULL auto_increment,

type_name varchar(20) NOT NULL default \,

PRIMARY KEY (type_id)

) TYPE=MyISAM;

 

 

INSERT INTO template_type VALUES (1,\html_header\);

INSERT INTO template_type VALUES (2,\meta\);

INSERT INTO template_type VALUES (3,\page_header\);

INSERT INTO template_type VALUES (4,\page_footer\);

INSERT INTO template_type VALUES (5,\html_footer\);

[Top]
No.
제목
작성자
작성일
조회
17897MySQL2006에러(..gone away)
김태훈
2002-11-22
7573
16661[C Src] MySQL Optimize 0.1pre10 [소스]
정재익
2002-07-30
9957
16572MYSQL C++ API를 이용한 QUERY결과 가져오기 소스와 컴파일 [1]
정재익
2002-07-22
12927
16233[프로그램] DB 이용한 컨텐츠 관리 시스템
문태준
2002-06-12
11354
15744MySQL 에러코드별 에러메세지 입니다.
강병권
2002-04-18
23862
14706Perl with MySQL
정재익
2002-01-11
12856
13809간단한 api 사용예
이노성
2001-11-25
8522
13937┕>또 다른 간단한 C API 사용예
정재익
2001-12-03 03:01:50
7705
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다