[게시판만들기] 첫번째 이야기
===============================================================
게시판 만들기의 첫 번째 강좌입니다.
이론 중심의 강좌이며 게시판을 함께 만들어 보도록 하겠습니다.
중간에 그림 삽입이 어려워 링크로 대체 했습니다.
그림 삽입 방법 아시면 리플 달아 주세요.
글쓴이 메일: webmaster@skynoa.com
webmaster@iclan.co.kr
개별적인 답변은 드리지 않습니다.
===============================================================
[ 게시판 만들기 ]
= 준비물
PHP, MySQL 사용 가능한 계정 (홈페이지 운영용)
APM이 설치된 개인 컴퓨터 혹은 Linux가 설치된 컴퓨터 (테스트용)
텍스트 에디터 (드림위버, 에디터 플러스 추천)
= 사전 지식
HTML / JAVA script / PHP / MySQL 사용법
텍스트 에디터 사용법
= 강좌 전체 내용
게시판 - 이 강좌의 중심이며 핵심입니다.
회원관리 - 게시판에 추가 되는 회원관리 모듈입니다.
= 게시판 설계
- 게시판 구조
여기서 다루는 게시판은 가장 단순한 게시판이며 스킨은 구현하지 않습니다.
우리가 함께 만들 게시판은 아래와 같은 구성을 가지고 있습니다.
번호, 작성자, 비밀번호, 제목, 내용, 작성시간, 작성일
- 번호
번호는 게시물을 표시하기 위한 모든 숫자를 말합니다.
이 강좌에서는 세 가지 번호를 사용합니다.
첫째, 게시물 작성 번호
둘째, 게시물 화면표시 번호
셋째, 게시물 검색 번호
게시물 작성 번호는 게시물이 하나씩 추가될 때 마다 카운트 되는 번호입니다.
이 번호는 게시물이 작성되고 삭제 될 때까지 변하지 않습니다.
게시물 화면표시 번호는 게시물을 화면에 표시하기 위해 사용됩니다.
답글은 부모글에게 물려 받아 자신의 번호를 만들어 냅니다.
이에 대한 내용은 뒤에 자세히 다룹니다.
(답글 이란 게시물에 의견을 달기 위해 별도로 추가된 게시물을 말합니다.)
게시물 검색 번호는 게시물 검색을 빠르게 하기 위해 추가되는 번호 입니다.
이 번호를 활용하여 게시판의 전체 처리 시간을 단축 할 수 있습니다.
http://www.iclan.co.kr/board/1/001.JPG <- 그림 1
- 게시물 작성 번호(no)
작성 번호는 게시물이 추가 될 때 마다 카운트 하며 수정되지 않습니다.
- 게시물 화면표시 번호(family, step, answer)
번호 중 가장 중요한 번호이며 답글 처리를 위해 꼭 필요합니다.
게시물 리스트를 화면에 표시 할 때 일반 게시물은 글이 작성된 순서대로 표시 하면 되지만 답글은 부모글과 항상 같이 위치 해야 합니다.
그러한 이유로 화면에 표시할 때 게시물 작성 번호와는 달리 답글의 위치가 수정된 번호가 필요하게 됩니다.
게시물 화면표시 번호는 이 때 사용할 번호 입니다.
그런데 답글이 추가 될 때 마다 전체 화면표시 번호를 수정해 주는 것은 비효율 적입니다.
게시물 수가 많을수록 이는 더 합니다.
이 점을 개선하기 위해 화면표시 번호는 3개의 숫자를 사용합니다.
여기서는 family, step, answer 로 표기 하였습니다.
family는 답글과 부모글을 묶어 주기 위해 사용하는 숫자 입니다.
일반 게시물은 글이 추가될 때 마다 카운트 되며 답글은 부모글의 번호를 물려 받습니다.
step은 몇 단계의 답글 인지를 표시 합니다.
일반글은 0, 일반글의 답글은 1, 답글의 답글은 2, 답글의 답글의 답글은 3 …
answer는 답글의 화면표시 번호 입니다.
(답글이 여럿일 경우 화면에 표시 할 순서를 정해야 하므로)
본래라면 답글이 추가 될 때 마다 카운트 되어야 하지만 그럴 경우 family검색 -> step검색 -> answer검색을 통해 검색한 후 전체를 다시 정렬 해 주어야 합니다.
이 검색 시간을 줄이기 위해 약간의 작업이 필요합니다.
참고로 말씀 드리면 게시판을 사용할 때 하나의 글을 한번만 읽는 것이 아니라 여러 번 읽히게 되는데 글 저장 시간이 늘어 나더라도 읽는 시간을 줄일 수 있다면 게시판 전체 실행 시간이 단축 됩니다.
예를 들면 내가 하나의 글을 작성했고 글이 저장될 때 읽는 속도를 줄일 수 있는 어떤 작업을 프로그램 내부에서 처리해 속도가 2초가 더 걸리더라도 그 작업으로 인해 글 읽는 속도가 1초 단축 된다면 10번 읽었을 때 10초가 덜 걸리게 됩니다.
즉, 프로그램 전체적으로 10-2 = 8 초의 속도 향상이 있는 것과 같습니다.
그런 이유로 저장시 작업으로 글 읽는 속도를 향상 시킬 수 있다면 해 주는 것이 좋습니다.
위에서 family -> step -> answer 순으로 3번의 검색을 한다고 했습니다.
우리가 해 줄 작업은 답글이 저장될 때 answer를 미리 정렬해 저장해 주는 일입니다.
이 작업을 해 주면 글을 읽을 때 family검색 만으로 검색이 끝나게 됩니다.
그럼 어떤 식으로 정렬을 해 주어야 할까요?
정렬 방식을 정해 주기 전에 아래 내용을 먼저 읽어 보도록 합시다.
----------------------------------------------------------------------
* 컴퓨터의 사칙연산 처리 속도
컴퓨터는 그 어원에서 알 수 있듯이 계산을 하기 위해 만들어진 기계입니다.
더하고 빼고 나누고 곱하는 사칙연산을 계산이라고 하는데 컴퓨터는 이 사칙연산 중 더하는 기능으로 빼고 나누고 곱하는 동작을 모두 합니다.
즉, 컴퓨터에서는 더하기 기능과 보수만으로 모든 계산을 합니다.
( 보수란 어떤 수가 되기 위해 부족한 수 입니다.
예를 들면 10의 보수라고 하면 10이 되기에 필요한 수를 말하므로 6이라는 수가 있고 그 수의 10의 보수는 6이 10이 되기 위해서는 4가 필요하므로 6은 10의 보수가 4입니다. - 2진수를 사용하는 컴퓨터에서는 1의 보수와 2의 보수를 사용합니다.)
아래 빼기를 예를 들어 보도록 하겠습니다.
( 자세한 내용은 정보처리 요약집을 참고 하시기 바랍니다. )
7 -5 0 0111 + 0 1010(1의 보수) = 1 0001 +1 = 0 0010 = 2 (2의 보수)
5 -7 0 0101 + 0 1000(1의 보수) = 0 1101 = 1 0010(1의 보수) = -2
8 -3 0 1000 + 0 1100(1의 보수) = 1 0100 +1 = 0 0101 = 5 (2의 보수)
3 -8 0 0011 + 0 0111(1의 보수) = 0 1010 = 1 0101(1의 보수) = -5
실제 프로그램을 만드는데 이러한 내용을 알 필요는 없습니다.
요점만 말하면 컴퓨터는 모든 계산이 더하기를 기본으로 하기 때문에 더하는 작업이 가장 빠르다는 것입니다.
----------------------------------------------------------------------
숫자를 정렬하는 방법은 숫자를 증가해 가는 오름차순 정렬과 숫자를 줄여가는 내림차순 정렬이 대표적입니다.
위에서 컴퓨터는 더하는 작업이 가장 빠르다고 했습니다.
오름차순으로 된 수는 검색할 때 숫자를 하나씩 더해가며 검색합니다.
내림차순으로 된 수는 검색할 때 숫자를 하나씩 빼가며 검색합니다.
당연히 오름차순으로 된 수를 검색하는 것이 훠~월~씬(!!강조!!) 빠릅니다.
간단히 더하기 보다 빼기가 두 배 느리다면? 게시판에서 답글이 100개 라면 200배나 느려진다는 결론이… ( 허~억 ) 게시판에 하루에 100사람이 접속 했다면? 200 * 100 = 2만배나 느려지는… ( 허~어~억~ )
요즘 컴퓨터는 워낙 빠르기에 2만배라도 그리 큰 시간은 아니지만 이왕이면 빠른 것이 좋지 않겠습니까?
그럼 answer를 오름차순으로 정렬하도록 합시다.
자료의 검색은 나중에 저장된 자료부터 하는 것이 일반적입니다.
찾고자 하는 자료가 최근 자료일 경우가 많기 때문입니다.
즉, 최근 자료가 가장 적은 숫자가 되어야 하므로 자료가 저장될 때 마다 앞에 위치한 자료의 answer를 증가 시켜 주어야 합니다. ( 저장 속도가 느려지게 된다. )
검색하는 횟수보다 자료를 저장하는 횟수가 훨씬 적으므로 저장 속도가 늘어 난다 하더라도 검색 속도가 줄어든다면 전체적인 프로그램 실행 속도가 빨라지게 됩니다.
그렇다면 answer는 어떻게 증가 시켜야 할까요?
답글이라 하면 원래 그 답글이 달려 있는 부모글이 존재합니다.
부모글의 answer에 1을 더해 주면 되고 1이 더해 지기 전의 자신의 answer보다 큰 answer를 1씩 증가시켜 주어야 합니다. ( 오름차순 정렬하기 위해 )
answer가 자신보다 적은 글은 현재 글보다 나중 글 이므로 증가시켜 줄 필요가 없습니다.
답글은 그 특성상 글과 글 중간에 삽입 될 수 있기 때문입니다.
그러면 아래와 같이 answer가 오름차순으로 정렬이 됩니다.
http://www.iclan.co.kr/board/1/002.JPG <- 그림 2
자 위의 표(그림)를 째려 보십시오.
답글은 오름차순 정렬이 된 answer로 빠르게 검색 할 수 있습니다.
그런데 옆에 있는 family는 내림차순 정렬 이군요. 우째 이런일이…
family도 오름차순으로 정렬을 해 봅시다.
답글은 그 수가 일반 게시물에 비해 훨씬 적으로므로 1씩 더해주는 것으로 간단히 해결을 했지만 이런 방법을 사용하면 family는 전체 게시물에 대해서 작업을 해 주어야 하므로 비효율적입니다.
간단히 -1을 곱하는 걸로 해결해 봅시다.
전체 게시물의 family에 1을 더해 주는 것보다는 게시물을 저장할 때 그 게시물의 family만 -1을 한번 곱해주는 것이 빠릅니다.
( 게시물이 천개라면 1을 천번 더하는 곳보다는 -1을 한번 곱하는게 빠르겠지요? )
이렇게 처리 할 수 있는 이유는 답글과는 달리 일반 게시물은 중간에 삽입되는 게시물이 없기 때문입니다.
( 답글은 중간에 끼어드는 글들이 있어 answer에 -1을 곱하는 것으로는 해결이 되지 않습니다. - 혹시나 해서 써 넣습니다. )
http://www.iclan.co.kr/board/1/003.JPG <- 그림 3
주) 중간에 위치한 답글이 지워지면 답글이 추가 되면서 1씩 더해진 answer를 원래의 값으로 바꾸어 주어야 한다고 생각하실 분들이 있을 듯 합니다만 오른차순으로 정렬을 하기 위한 것이므로 굳이 수정할 필요는 없습니다. 오른차순 정렬에는 문제가 없기 때문입니다.
- 검색번호(prev_no, next_no)
검색번호는 게시물을 표시할 때 좀더 속도를 올리기 위해 보조로 사용되는 숫자입니다.
없어도 상관은 없습니다만 실행 속도를 빠르게 하기 위해 추가된 부분입니다.
( 앞에서도 이야기 했지만 게시물 저장시 속도가 다소 늘어 나더라도 전체 검색 시간이 줄어 든 다면 전체 프로그램 실행 속도가 빨라 지게 됩니다. )
이 글을 읽고 계시는 분들이 추가해 보시기 바랍니다.
여기서는 앞 게시물, 뒷 게시물 번호를 저장하는 것을 예로 들겠습니다.
게시판을 사용하다 보면 게시물을 삭제 하거나 답글을 작성 하고 지우는 작업으로 인해 앞글과 뒷글을 찾기가 힘들어 질 때 가 있습니다.
처음부터 검색해 다시 정렬하는 방법도 있겠지만 단순히 앞과 뒷 글을 읽기 위해 그런 작업을 하기에는 효율이 떨어집니다.
여러 게시판을 사용하다 보면 앞 글과 뒷 글로 바로 갈 수 있도록 링크를 제공하는 경우를 보신적이 있으실 겁니다.
주로 게시물을 차례대로 읽는데 사용됩니다.
게시물을 저장할 때 prev_no, next_no 두 개의 변수를 만들어 앞 게시물과 뒷 게시물의 작성번호를 저장합니다.
화면표시 번호는 말 그대로 화면에 표시하기 위해 변형된 번호 이므로 기준이 될 수 없으며 작성 번호는 게시물이 작성 될 때 만들어져 게시물이 삭제 될 때까지 변하지 않으므로 이 번호를 저장하면 앞/뒤 글을 빨리 찾을 수 있습니다.
검색번호는 작성번호를 활용한다는 것을 알아 두시기 바랍니다.
<?
$bbs_id = 게시판 이름;
$bbs_table_schema ="
create table bbs_board_$bbs_id (
no int unsigned default '0' not null auto_increment primary key,
family int default '0' not null,
step int default '0' not null,
answer int default '0' not null,
prev_no int default '0' not null,
next_no int default '0' not null,
KEY family (family),
KEY step (step),
KEY prev_no (prev_no),
KEY next_no (next_no)
)";
?>
=================================================================
이상 오늘 강좌 끝~~
쉽죠?
많은 내용은 아니지만 처음부터 너무 많은 내용을 다루면 힘들겠죠?
차근 차근 진행해 나가도록 하겠습니다.
의견 제시를 많이 해 주세요.
게시판 만들기의 첫 번째 강좌입니다.
이론 중심의 강좌이며 게시판을 함께 만들어 보도록 하겠습니다.
중간에 그림 삽입이 어려워 링크로 대체 했습니다.
그림 삽입 방법 아시면 리플 달아 주세요.
글쓴이 메일: webmaster@skynoa.com
webmaster@iclan.co.kr
개별적인 답변은 드리지 않습니다.
===============================================================
[ 게시판 만들기 ]
= 준비물
PHP, MySQL 사용 가능한 계정 (홈페이지 운영용)
APM이 설치된 개인 컴퓨터 혹은 Linux가 설치된 컴퓨터 (테스트용)
텍스트 에디터 (드림위버, 에디터 플러스 추천)
= 사전 지식
HTML / JAVA script / PHP / MySQL 사용법
텍스트 에디터 사용법
= 강좌 전체 내용
게시판 - 이 강좌의 중심이며 핵심입니다.
회원관리 - 게시판에 추가 되는 회원관리 모듈입니다.
= 게시판 설계
- 게시판 구조
여기서 다루는 게시판은 가장 단순한 게시판이며 스킨은 구현하지 않습니다.
우리가 함께 만들 게시판은 아래와 같은 구성을 가지고 있습니다.
번호, 작성자, 비밀번호, 제목, 내용, 작성시간, 작성일
- 번호
번호는 게시물을 표시하기 위한 모든 숫자를 말합니다.
이 강좌에서는 세 가지 번호를 사용합니다.
첫째, 게시물 작성 번호
둘째, 게시물 화면표시 번호
셋째, 게시물 검색 번호
게시물 작성 번호는 게시물이 하나씩 추가될 때 마다 카운트 되는 번호입니다.
이 번호는 게시물이 작성되고 삭제 될 때까지 변하지 않습니다.
게시물 화면표시 번호는 게시물을 화면에 표시하기 위해 사용됩니다.
답글은 부모글에게 물려 받아 자신의 번호를 만들어 냅니다.
이에 대한 내용은 뒤에 자세히 다룹니다.
(답글 이란 게시물에 의견을 달기 위해 별도로 추가된 게시물을 말합니다.)
게시물 검색 번호는 게시물 검색을 빠르게 하기 위해 추가되는 번호 입니다.
이 번호를 활용하여 게시판의 전체 처리 시간을 단축 할 수 있습니다.
http://www.iclan.co.kr/board/1/001.JPG <- 그림 1
- 게시물 작성 번호(no)
작성 번호는 게시물이 추가 될 때 마다 카운트 하며 수정되지 않습니다.
- 게시물 화면표시 번호(family, step, answer)
번호 중 가장 중요한 번호이며 답글 처리를 위해 꼭 필요합니다.
게시물 리스트를 화면에 표시 할 때 일반 게시물은 글이 작성된 순서대로 표시 하면 되지만 답글은 부모글과 항상 같이 위치 해야 합니다.
그러한 이유로 화면에 표시할 때 게시물 작성 번호와는 달리 답글의 위치가 수정된 번호가 필요하게 됩니다.
게시물 화면표시 번호는 이 때 사용할 번호 입니다.
그런데 답글이 추가 될 때 마다 전체 화면표시 번호를 수정해 주는 것은 비효율 적입니다.
게시물 수가 많을수록 이는 더 합니다.
이 점을 개선하기 위해 화면표시 번호는 3개의 숫자를 사용합니다.
여기서는 family, step, answer 로 표기 하였습니다.
family는 답글과 부모글을 묶어 주기 위해 사용하는 숫자 입니다.
일반 게시물은 글이 추가될 때 마다 카운트 되며 답글은 부모글의 번호를 물려 받습니다.
step은 몇 단계의 답글 인지를 표시 합니다.
일반글은 0, 일반글의 답글은 1, 답글의 답글은 2, 답글의 답글의 답글은 3 …
answer는 답글의 화면표시 번호 입니다.
(답글이 여럿일 경우 화면에 표시 할 순서를 정해야 하므로)
본래라면 답글이 추가 될 때 마다 카운트 되어야 하지만 그럴 경우 family검색 -> step검색 -> answer검색을 통해 검색한 후 전체를 다시 정렬 해 주어야 합니다.
이 검색 시간을 줄이기 위해 약간의 작업이 필요합니다.
참고로 말씀 드리면 게시판을 사용할 때 하나의 글을 한번만 읽는 것이 아니라 여러 번 읽히게 되는데 글 저장 시간이 늘어 나더라도 읽는 시간을 줄일 수 있다면 게시판 전체 실행 시간이 단축 됩니다.
예를 들면 내가 하나의 글을 작성했고 글이 저장될 때 읽는 속도를 줄일 수 있는 어떤 작업을 프로그램 내부에서 처리해 속도가 2초가 더 걸리더라도 그 작업으로 인해 글 읽는 속도가 1초 단축 된다면 10번 읽었을 때 10초가 덜 걸리게 됩니다.
즉, 프로그램 전체적으로 10-2 = 8 초의 속도 향상이 있는 것과 같습니다.
그런 이유로 저장시 작업으로 글 읽는 속도를 향상 시킬 수 있다면 해 주는 것이 좋습니다.
위에서 family -> step -> answer 순으로 3번의 검색을 한다고 했습니다.
우리가 해 줄 작업은 답글이 저장될 때 answer를 미리 정렬해 저장해 주는 일입니다.
이 작업을 해 주면 글을 읽을 때 family검색 만으로 검색이 끝나게 됩니다.
그럼 어떤 식으로 정렬을 해 주어야 할까요?
정렬 방식을 정해 주기 전에 아래 내용을 먼저 읽어 보도록 합시다.
----------------------------------------------------------------------
* 컴퓨터의 사칙연산 처리 속도
컴퓨터는 그 어원에서 알 수 있듯이 계산을 하기 위해 만들어진 기계입니다.
더하고 빼고 나누고 곱하는 사칙연산을 계산이라고 하는데 컴퓨터는 이 사칙연산 중 더하는 기능으로 빼고 나누고 곱하는 동작을 모두 합니다.
즉, 컴퓨터에서는 더하기 기능과 보수만으로 모든 계산을 합니다.
( 보수란 어떤 수가 되기 위해 부족한 수 입니다.
예를 들면 10의 보수라고 하면 10이 되기에 필요한 수를 말하므로 6이라는 수가 있고 그 수의 10의 보수는 6이 10이 되기 위해서는 4가 필요하므로 6은 10의 보수가 4입니다. - 2진수를 사용하는 컴퓨터에서는 1의 보수와 2의 보수를 사용합니다.)
아래 빼기를 예를 들어 보도록 하겠습니다.
( 자세한 내용은 정보처리 요약집을 참고 하시기 바랍니다. )
7 -5 0 0111 + 0 1010(1의 보수) = 1 0001 +1 = 0 0010 = 2 (2의 보수)
5 -7 0 0101 + 0 1000(1의 보수) = 0 1101 = 1 0010(1의 보수) = -2
8 -3 0 1000 + 0 1100(1의 보수) = 1 0100 +1 = 0 0101 = 5 (2의 보수)
3 -8 0 0011 + 0 0111(1의 보수) = 0 1010 = 1 0101(1의 보수) = -5
실제 프로그램을 만드는데 이러한 내용을 알 필요는 없습니다.
요점만 말하면 컴퓨터는 모든 계산이 더하기를 기본으로 하기 때문에 더하는 작업이 가장 빠르다는 것입니다.
----------------------------------------------------------------------
숫자를 정렬하는 방법은 숫자를 증가해 가는 오름차순 정렬과 숫자를 줄여가는 내림차순 정렬이 대표적입니다.
위에서 컴퓨터는 더하는 작업이 가장 빠르다고 했습니다.
오름차순으로 된 수는 검색할 때 숫자를 하나씩 더해가며 검색합니다.
내림차순으로 된 수는 검색할 때 숫자를 하나씩 빼가며 검색합니다.
당연히 오름차순으로 된 수를 검색하는 것이 훠~월~씬(!!강조!!) 빠릅니다.
간단히 더하기 보다 빼기가 두 배 느리다면? 게시판에서 답글이 100개 라면 200배나 느려진다는 결론이… ( 허~억 ) 게시판에 하루에 100사람이 접속 했다면? 200 * 100 = 2만배나 느려지는… ( 허~어~억~ )
요즘 컴퓨터는 워낙 빠르기에 2만배라도 그리 큰 시간은 아니지만 이왕이면 빠른 것이 좋지 않겠습니까?
그럼 answer를 오름차순으로 정렬하도록 합시다.
자료의 검색은 나중에 저장된 자료부터 하는 것이 일반적입니다.
찾고자 하는 자료가 최근 자료일 경우가 많기 때문입니다.
즉, 최근 자료가 가장 적은 숫자가 되어야 하므로 자료가 저장될 때 마다 앞에 위치한 자료의 answer를 증가 시켜 주어야 합니다. ( 저장 속도가 느려지게 된다. )
검색하는 횟수보다 자료를 저장하는 횟수가 훨씬 적으므로 저장 속도가 늘어 난다 하더라도 검색 속도가 줄어든다면 전체적인 프로그램 실행 속도가 빨라지게 됩니다.
그렇다면 answer는 어떻게 증가 시켜야 할까요?
답글이라 하면 원래 그 답글이 달려 있는 부모글이 존재합니다.
부모글의 answer에 1을 더해 주면 되고 1이 더해 지기 전의 자신의 answer보다 큰 answer를 1씩 증가시켜 주어야 합니다. ( 오름차순 정렬하기 위해 )
answer가 자신보다 적은 글은 현재 글보다 나중 글 이므로 증가시켜 줄 필요가 없습니다.
답글은 그 특성상 글과 글 중간에 삽입 될 수 있기 때문입니다.
그러면 아래와 같이 answer가 오름차순으로 정렬이 됩니다.
http://www.iclan.co.kr/board/1/002.JPG <- 그림 2
자 위의 표(그림)를 째려 보십시오.
답글은 오름차순 정렬이 된 answer로 빠르게 검색 할 수 있습니다.
그런데 옆에 있는 family는 내림차순 정렬 이군요. 우째 이런일이…
family도 오름차순으로 정렬을 해 봅시다.
답글은 그 수가 일반 게시물에 비해 훨씬 적으로므로 1씩 더해주는 것으로 간단히 해결을 했지만 이런 방법을 사용하면 family는 전체 게시물에 대해서 작업을 해 주어야 하므로 비효율적입니다.
간단히 -1을 곱하는 걸로 해결해 봅시다.
전체 게시물의 family에 1을 더해 주는 것보다는 게시물을 저장할 때 그 게시물의 family만 -1을 한번 곱해주는 것이 빠릅니다.
( 게시물이 천개라면 1을 천번 더하는 곳보다는 -1을 한번 곱하는게 빠르겠지요? )
이렇게 처리 할 수 있는 이유는 답글과는 달리 일반 게시물은 중간에 삽입되는 게시물이 없기 때문입니다.
( 답글은 중간에 끼어드는 글들이 있어 answer에 -1을 곱하는 것으로는 해결이 되지 않습니다. - 혹시나 해서 써 넣습니다. )
http://www.iclan.co.kr/board/1/003.JPG <- 그림 3
주) 중간에 위치한 답글이 지워지면 답글이 추가 되면서 1씩 더해진 answer를 원래의 값으로 바꾸어 주어야 한다고 생각하실 분들이 있을 듯 합니다만 오른차순으로 정렬을 하기 위한 것이므로 굳이 수정할 필요는 없습니다. 오른차순 정렬에는 문제가 없기 때문입니다.
- 검색번호(prev_no, next_no)
검색번호는 게시물을 표시할 때 좀더 속도를 올리기 위해 보조로 사용되는 숫자입니다.
없어도 상관은 없습니다만 실행 속도를 빠르게 하기 위해 추가된 부분입니다.
( 앞에서도 이야기 했지만 게시물 저장시 속도가 다소 늘어 나더라도 전체 검색 시간이 줄어 든 다면 전체 프로그램 실행 속도가 빨라 지게 됩니다. )
이 글을 읽고 계시는 분들이 추가해 보시기 바랍니다.
여기서는 앞 게시물, 뒷 게시물 번호를 저장하는 것을 예로 들겠습니다.
게시판을 사용하다 보면 게시물을 삭제 하거나 답글을 작성 하고 지우는 작업으로 인해 앞글과 뒷글을 찾기가 힘들어 질 때 가 있습니다.
처음부터 검색해 다시 정렬하는 방법도 있겠지만 단순히 앞과 뒷 글을 읽기 위해 그런 작업을 하기에는 효율이 떨어집니다.
여러 게시판을 사용하다 보면 앞 글과 뒷 글로 바로 갈 수 있도록 링크를 제공하는 경우를 보신적이 있으실 겁니다.
주로 게시물을 차례대로 읽는데 사용됩니다.
게시물을 저장할 때 prev_no, next_no 두 개의 변수를 만들어 앞 게시물과 뒷 게시물의 작성번호를 저장합니다.
화면표시 번호는 말 그대로 화면에 표시하기 위해 변형된 번호 이므로 기준이 될 수 없으며 작성 번호는 게시물이 작성 될 때 만들어져 게시물이 삭제 될 때까지 변하지 않으므로 이 번호를 저장하면 앞/뒤 글을 빨리 찾을 수 있습니다.
검색번호는 작성번호를 활용한다는 것을 알아 두시기 바랍니다.
<?
$bbs_id = 게시판 이름;
$bbs_table_schema ="
create table bbs_board_$bbs_id (
no int unsigned default '0' not null auto_increment primary key,
family int default '0' not null,
step int default '0' not null,
answer int default '0' not null,
prev_no int default '0' not null,
next_no int default '0' not null,
KEY family (family),
KEY step (step),
KEY prev_no (prev_no),
KEY next_no (next_no)
)";
?>
=================================================================
이상 오늘 강좌 끝~~
쉽죠?
많은 내용은 아니지만 처음부터 너무 많은 내용을 다루면 힘들겠죠?
차근 차근 진행해 나가도록 하겠습니다.
의견 제시를 많이 해 주세요.
|
댓글을 작성하시려면 로그인이 필요합니다.
로그인