프로그래밍/게시판만들기

나도 답변형 게시판을 만들어보자 ! (1)

Jay22 2017. 1. 15. 22:47
반응형

게시판은 웹 어플리케이션의 기본 구성 요소 중의 하나로서, 거의 모든 커뮤니티 사이트는 대부분 게시판 기능을 제공하고 있다. 또한, 이들 게시판은 답변을 등록할 수 있는 기능을 함께 제공하고 있다.


이번 포스팅은 답변형 게시판을 만드는 과정을 보일 것이다.


1. 로직


답변형 게시판의 주안점은 글이 작성되는 순서와 글이 화면에 보여지는 순서가 다르다는 점이다. 왜냐하면 게시판에서는 답변 관계를 기준으로 글을 정렬해서 보여주기 때문이다. 그래서 중첩 레벨이라는 것을 갖는다.

답변형 게시판을 구현하려면 그룹 내에서 부모 글과 자식 글 관계에 맞는 순서 값을 지정해야 한다. 이 순서 값은 다음의 두 가지 정보를 통해서 결정된다.


- 그룹 번호 : 동일한 루트를 갖는 글 들이 공유하는 번호, 새로운 루트가 추가될 때마다 그룹 번호 값이 1씩 증가된다.


- 순서 번호 : 동일한 그룹에 속하는 글 들의 순서 번호를 이용해서 정렬한다.

 

글번호 

그룹번호 

순서번호 

관계 

999999 

1번루트 

-> 2

989999 

1번글의 첫 번째 자식 글 

-->4 

989899 

2번글의 첫 번째 자식 글 

--->5 

989898 

4번글의 첫 번째 자식 글 

->3 

979999 

1번글의 두 번째 자식 글 


자 여기서 ->의 의미는 부모글에 답변글(자식글)이 달린 것을 의미한다. 그리고 각 글은 각각레벨마다 두자리 순서 번호를 값으로 갖는다. 루트 글은 레벨1값으로 99를 가지며 루트 글의 첫 번째 자식 글은 레벨1값으로 98을, 두 번째 자식 글은 97을 값으로 갖는다. 쭉 가서 99번째 자식글은 00을 값으로 갖는다.

즉, 내림차순으로 조지면 답변 계층에 따라 알맞은 순서대로 보여지게 된다. 여기서는 레벨 3까지 가능한데 더 많은 레벨의 답변을 등록하고 싶다면 순서번호의 길이를 길게 하면 된다.




2. DB 테이블 생성하기 


데이터저장소로는 mysql을 사용할 것이다. 게시판을 구현하는데 사용되는 테이블은 게시글 데이터를 저장하는 article테이블과 그룹 번호를 생성하는데 사용되는 id_sequence테이블이다. 

스키마를 보자.


article 테이블


 칼럼이름

칼럼타입 

설명 

article_id 

INT 

게시글번호(PK) 

group_id 

INT 

그룹 번호 

sequence_no 

CHAR(16) 

순서 번호 

posting_date 

DATETIME 

게시글 등록 일시 

read_count

INT 

조회수 

writer_name 

VARCHAR(20) 

작성자 이름 

password 

VARCHAR(10) 

게시글 암호 

title 

VARCHAR(100) 

게시글 제목 

content 

TEXT 

게시글 내용 



id_sequence 테이블


칼럼이름 

칼럼타입 

설명 

sequence_name 

VARCHAR(10) 

시퀀스 이름(PK) 

next_value 

INT 

시퀀스 값 


앞서 설명한 구현 로직에서 게시글 순서 번호의 길이는 6이었다. 위의 article테이블에서의 게시글 순서 번호는 16이다. 이유는 그룹 번호와 순서 번호를 함께 저장하기 위해서이다.


0000000101989899 (파란색이 그룹번호, 검은색이 순서번호)


이렇게 하나로 묶어서 저장하는 이유는 sequence_no 칼럼 하나만 내림차순으로 정렬하면 게시글을 알맞은 순서로 구할 수 있기 때문이다. 


id_sequence테이블은 게시글의 그룹 번호 값을 생성할때 사용된다. 그룹 번호는 새로운 루트 게시글이 등록될 때 1씩 증가되는 값인데, 새로운 글을 등록할 때 next_value값을 일거오아 1증가한 값을 게시글의 그룹번호로 사용하고 새로운 그룹번호 값을 다시 next_value칼럼에 저장한다. 이렇게 함으로써 새로운 루트 게시글이 등록될 때마다 1씩 증가된 그룹 번호를 생성할 수 있다.



다음 포스팅에선 디비를 생성해보자.










반응형