강좌
클라우드/리눅스에 관한 강좌입니다.
프로그램 분류

망. 웹 게시판 구상하기 - 1

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

[강좌] php+mysql 게시판 만들기 #망-1

안녕하세요. 디망쉬입니다.

잡담하기에 앞서 한 가지 빼먹은 게 있어서 잠깐 알리겠습니다.
이전 강좌에서 mysql_query 등 mysql 관련 함수가 마치 php 에만 있는 것같은 뉘앙스가 풍기더군요.
오직 php 에서만 해당 함수가 제공되는 것처럼요.
하지만 해당 함수는 php 에만 있는 것이 아니랍니다.
c 로 mysql 연결 cgi 를 만들 때 mysql 의 include/mysql 디렉토리에 있는 헤더 파일을 include
(c 언어의 include 입니다 ^^;) 하면 이전 강좌에서 거론한 함수들을 사용할 수 있습니다.
이 함수들은 mysql 차원에서 제공하는 함수들이라는거죠. :]

에 그럼 잡담.

제 강좌 차례(목차)에 보면 날짜 같은 것이 있답니다.
이것들은 해당 날짜까지 해당 편을 모두 올리도록 하겠다는 일종의 약속입니다.
이런 공개적 약속이 없다면 안그래도 게으른 제가 약속 안지키고 탱자 탱자 놀다가 슬쩍 강좌가 중단될지도
몰라서. 히히. --;

그리고 저는 하는 일이 워낙 다양하기 땜시(다른 말로 하면 많아서) 이 강좌도 상당히 빨리 빨리 타이핑한답니다. 때문에 오타 같은 것을 일일히 검사하지 않습니다.
그러니 오타나 문맥상의 문제가 있어도 이해하는데 별 문제가 없으시다면
그냥 "푸훗!"하는 미소를 지으며 여유있게 넘어가주세요. ^^;
(아무리 빨리 타이핑해도 생각하고 테스트하기도 해서 한 편당 80~120분 정도 소요된답니다.
흑. 참고로 제 한글 타수는 750, 영문 타수는 400)



icon04.gif 망. 웹 게시판 구상하기

a. 게시판 디자인/콘티
이 강좌를 보시는 분들 중 상당 수의 분은 웹프로그래밍 능력이 부족하시거나 없으셔서 도움을 얻기 위한 분들이라 생각합니다.
때문에 저는 가급적 그런 분들이 이해하기 쉽고 편하게 작성하도록 노력할 필요도 있구요.

그런 의미에서 저는 다소 귀찮다면 귀찮을 수 있는 게시판의 분리를 하려 합니다.
무슨 말인가하면 게시물 리스트하는 파일 따로, 글 쓰는 부분 따로, 읽기 따로 식으로 나눈다는 의미죠.
이것이 편하기는 확실히 편하고 쉽습니다.

자 그럼 제가 어떤 식으로 소스를 나눴는지 볼까요?

list.php3 : 게시물 리스트
view.php3 : 게시물 읽기
fill.php3 : 게시물 쓰기 폼
edit.php3 : 게시물 수정 폼
delete.php3 : 게시물 삭제 폼
run.php3 : 게시물 처리
function.php3 : 게시판 관련 함수 모음

상당히 잘게도 나눴지요? 이렇게 나누면 좋은 점이 있습니다.

1. 보수/보안이 편리함
자~ 게시판을 운영하고 있습니다.
그런데 버그가 발생되거나 기능 추가의 필요성이 있어서 게시판 cgi script(프로그램이 아니라 script 라고 해야
맞다고 생각합니다앙) 파일을 수정하려 합니다.
뭐 꼼꼼하거나 부지런한 분은 현재 사용하는 게시판을 다른 곳에 복사하여 거기서 업데이트를 하고 완료되면
그것을 사용하실 겁니다.
하지만 저처럼 게으르거나 계정 용량이 넉넉하지 않은 분들은 현재 돌아가는 게시판을 직접 고칠 수 있겠죠.

실수 하나 없이 완벽하게 고친다면 문제없겠지만 아무리 프로그래밍을 잘해도 문제는 꼭 발생됩니다.
그런데 만약 게시판이 파일 하나로 덜렁 되어 있다면 단지 파일 쓰기쪽만 수정했다가 오류가 생겨도 게시판
전체가 작동되지 않습니다.

하지만 위처럼 나누면 fill.php3 파일을 제외한 나머지는 정상적으로 작동합니다.
고치고 있는 것은 fill.php3 하나니까요. :]

또한 해당 기능이 각각 파일로 분리되어 있기 때문에 수정할 기능 찾기도 편하죠.
게시판이 하나의 파일로 되어 있으면 하나를 고치기 위해 수백 수천줄의 게시판 전체를 건드리게 될 겁니다.

2. 서버 과부화 방지
과부화라고 할 것도 없습니다. 현재의 cgi 는 기술적으로 한계와 문제가 있습니다.
그 중 하나가 자원의 공유하는 기능이 없는 점입니다.
이건 또 뭔 말인가하면, 게시판에 100명이 붙어서 사용 중 이라고 할 때 서버상에서는 게시판 cgi 가 100 개
모두 따로 떠있습니다. 단순 무식하게 계산해보죠.
게시판 cgi 가 0.1 메가라고 할 경우 100 명이 접속하면 웹 서버는 게시판만 10메가의 자원을 소비하고 있는 겁니다. (java 는 자원을 공유하죠)

하지만 게시판을 위처럼 나눠놓는다면?
사람 중에는 게시물 리스트만 보기도 하고 어떤 이는 글 읽기만 할 수 있습니다.
그러면 이용자가 요청한 cgi 파일만 서버에 올라가서 처리해주면 되죠.
쓸데없이 사용하지 않는 기능까지 모두 자원을 사용하도록 할 건 없다는 거에요.

* 물론 단지 저것이 서버를 크게 버벅대게 하지는 않습니다.
서버를 버벅대게 하는 것은 저런 것보다는 비효율적인 게시판 DB 구조와 게시판 검색이지요. *


이외의 장점도 있겠죠. 하지만 저는 꼽으라면 저 두가지를 꼽습니다. ^^;


- list.php3
게시물 리스트를 보여주는 역할의 파일입니다.
게시판 DB의 테이블에서 관리자가 지정한 갯수의 게시물 데이터를 읽어온 뒤 화면에 뿌려주는 거죠.
저는 게시물 번호, 작성자명, 게시물 제목, 작성일을 출력할 것이며, 작성자가 email 을 기입할 경우
작성자명을 email 주소로 링크할 것입니다. :]

게시물 제목을 클릭하면 게시물을 읽도록 하는게 좋은 방법이기 때문에 게시물 제목은 view.php3 파일로
링크할 것입니다.
view.php3 파일은 단지 글 번호만 알면 어떤 글을 이용자가 보기 원하는지 알 수 있으니

 

<a href="view.php3?no=글번호">글제목</a>

 

식으로 해주면 되겠죠.

사실 이건 매우 간단한 기능이기 때문에 매우 간단하게 구현됩니다.
중요한 것은 페이지 구현 부분이지요.
어려운 건 아니고 약간의 수학이 사용됩니다. 아니. 산.수.


- view.php3
게시물을 읽는 역할의 파일입니다. 게시물 글 번호를 받으면 그 글 번호의 글을 검색해서 내용을 출력하는
거죠. 별로 어려울 것도 없습니다.
다만 중요한 건 게시물 내용을 어떻게 뿌려주냐는거죠.
사용자가 공백을 입력하면 이것을 어떻게 처리할까요?
HTML 은 1개 이상의 공백은 무조건 1개로 처리합니다.
그러니 사용자가

디망쉬는    귀엽다


고 입력해도 출력은

디망쉬는 귀엽다


고 출력되죠. 이것을 처리하기 위해서는 두 가지 방법을 쓰면 됩니다.
첫번째는 공백 두 개 단위로 검색해서 &nbsp;&nbsp; 로 바꿔주는거죠.
어차피 공백 하나는 그냥 공백으로 해줘도 되니까요.
아. &nbsp; 는 공백을 의미하는 겁니다.

하지만 이 방법은 게시판을 느리게 합니다.
특히 장문의 글일 수록. 그래서 대부분의 게시판은 <pre> 태그를 사용합니다.
<pre> 태그는 <pre> 와 </pre> 사이의 내용은 원래의 내용 고대로 출력하는 기능을 합니다.



라고 했을 경우 이걸 <br> 과 그냥 공백으로만 처리하면


라고 출력됩니다. 하지만 위의 것을 <pre> 태그로 묶어주면 동일하게 출력됩니다.

물론 <pre> tag 를 쓰는 방법도 나름대로 단점이 있습니다.
하지만 이것이 속도상 더 빠르므로 저는 이 방식을 택하겠습니다.


- fill.php3
게시물 작성 폼 파일입니다. 보통 입력 받을 만한 걸 입력받도록 하죠 뭐.
그런 것들에는 작성자명, email 주소, 홈페이지 주소, 게시물 제목, 게시물 비번, 게시물 내용 정도입니다.

중요한 것은 글을 작성하면 이 값을을 run.php3 로 넘겨줘야 하는데 run.php3 파일은 사용자가 어떤
게시판에 해당 내용을 넣을건지 알려주지 않는한 모르기 때문에 fill.php3 파일에 이에 대한 언급이
필요합니다. 바로 <input> 태그에서 type 을 hidden 으로 하는거죠.



이런 식이죠. 이렇게 run.php3 에게 별도로 알려주는 정보로는 게시판 이름 말고도 run.php3 을 작동시킬지에
대한 방법(입력인지 수정인지 삭제인지 등)등이 있습니다.


- edit.php3
게시물의 내용을 수정하는 폼 파일입니다. 게시물 읽기와 별 다를 바가 없습니다.
다른 점이 있다면 방식은 게시물 입력과 비슷하며 수정 화면에는 수정할 게시물의 내용이 적용된채 나와야겠지요.


- delete.php3
게시물 삭제 폼 파일입니다. 이것 역시 게시물 읽기인 view.php3 와 별 다를 게 없습니다.
다만 게시물의 비밀 번호 입력란이 있고 이걸 run.php3 로 넘겨주는 거죠. 물론 게시물 번호와 게시판 이름, 처리 방법등도 함께 보내줘야합니다.


- run.php3
게시판의 핵심이 되는 처리 파일입니다. 실질직으로 글을 입력하거나 수정하거나 삭제하는 역할을 합니다.
그런 특성상 이 파일에서 echo 같은 것이 있으면 안되지요. 좋을 게 없답니다.
이유는 쿠키나 Header 문 등 때문입니다. 이것들은 해당 함수가 사용되기 이전에
어떠한 것도 먼저 출력되서는 안됩니다.

또한 이 run.php3 를 실행할 때 기본적으로 들어가야할 정보가 있다는 것입니다.
이건 위에서 설명했으니 넘어가죠.


- function.php3
게시판 운영과 관련된 다양한 함수들을 모아놓은 겁니다.
게시판 페이지 구현 등등의 사용자 정의 함수들을 따로 한 곳에 모아 관리할 필요가 있죠.
이 파일이 그 역할입니다.

끝났습니다. 비교적 내용이 적고 쉽군요. 꼭 위 내용을 당장 이해하기 위해 몇 번씩 읽거나 하실 필요 없습니다. 직접 작성해나가시다보면 자연스럽게 이해가 가실 내용입니다. :)

다음 강좌는 비교적 까다로운 게시판 DB 디자인입니다. 흑.
다음 강좌에서 뵈요.

----------------------------
함께하면 즐거운 사이트들 (-_-; 광고임 -_-;)
http://game.creple.com/delthia
http://creple.com
http://coco.st
----------------------------


- ?! 디망쉬

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,043 명
  • 현재 강좌수 :  35,853 개
  • 현재 접속자 :  97 명