다연이네

[days10] 이론 - 답글을 달 수 있는 게시판(==계층형 게시판==답변형 게시판) 본문

JSP

[days10] 이론 - 답글을 달 수 있는 게시판(==계층형 게시판==답변형 게시판)

 다연  2021. 1. 7. 22:44
반응형

답글을 달 수 있는 게시판  == 계층형 게시판 == 답변형 게시판 
계층형 게시판은 하나의 글에 트리 형태로 다른 사람이 답변을 달 수 있는 구조이다. 
'답변형', '계층형' 혹은 '쓰레드형'이라고도 부른다.

 

[답변형 게시판의 로직 이해 (필수)]

 

1) 게시판 테이블 컬럼 3개 추가 :

     - 그룹을 묶어주는 그룹컬럼(REF),

     - 그룹 내에서 순번을 나타내는 컬럼 (STEP)
     - 들여쓰기 작업(깊이를 나타내는 컬럼 추가) (DEPTH)

 

2)게시판 테이블 컬럼 2개 추가 : 

     - THREAD == [그룹컬럼(REF) + 그룹내 순번컬럼(STEP)] 

     - 들여쓰기 작업(깊이를 나타내는 컬럼 추가) (DEPTH)

 

 

 

 

 

 ㄱ. 오라클 / replyboard 테이블 
    글번호(seq:PK), 제목(subject)
       1                    첫 번째 게시글
       2                    두 번째 게시글
       3                    세 번째 게시글
       4                    2 게시글의 댓글
       5                    4 게시글의 댓글
       6                    2 게시글의 댓글
       7                    6 게시글의 댓글
       8                    3 게시글의 댓글
       
 ㄴ. 게시판 목록을 보여주는 목록 페이지 ( list .jsp )
      - order by seq desc - 최신글 먼저 (이렇게 하지 않을 것)
 --------------------------------------------
 글번호   |       제목        |    (작성자   | 작성일 일단 제외)  
 --------------------------------------------
   3         세 번째 게시글
      ㄴ8      3 - 댓글
   2         두 번째 게시글
      ㄴ6      2 - 댓글
         ㄴ7      6 - 댓글
      ㄴ4      2 게시글의 댓글
         ㄴ5      4 - 댓글
   1         첫 번째 게시글
 
 --------------------------------------------
                        [1]
 --------------------------------------------

 

ㄷ. 누가 2번 게시글 제목 클릭하면 - 상세페이지(content .jsp)로 이동할 것
      [부모글 REF, STEP]
      제목:
      작성자:
      작성일:
      글내용:
      
      [수정][삭제][Home][댓글] 

      댓글은 항상 게시글을 보고 난 후 댓글을 달아야 
      
      댓글 db에는 그냥 글번호로 들어가있지만 화면에 출력할때는 들여쓰기 되어 댓글로 들어가야 함

 

로직

1) 게시판 테이블 컬럼 3개 추가 : REF, STEP, DEPTH

ㄹ. 게시글 추가(insert)되어질때 그 글번호 값으로  REF를 준다, STEP 

 

  ㄱ. 오라클 / replyboard 테이블 
    글번호(seq:PK), 제목(subject)          REF(그룹)        STEP(그룹의 순번)                   DEPTH(깊이)
    (새글)   1                    첫 번째 게시글             1(seq)            1                                         0
    (새글)   2                    두 번째 게시글             2(seq)            1                                         0
    (새글)   3                    세 번째 게시글             3(seq)            1                                          0
    (댓글)   4                    2- 댓글                2(seq)(부모따라)  1+1(부모STEP+1)+1+1          1(부모DEPTH+1)
  (댓댓글)   5                    4- 댓댓글             2(seq)(부모따라)  3(부모STEP+1)+1+1              2(부모DEPTH+1)
    (댓글)   6                    2- 댓글                2                      2(부모STEP+1)+1                  1(부모DEPTH+1)
  (댓댓글)   7                    6- 댓글                2                     3(부모STEP+1)                       2(부모DEPTH+1)
    (댓글)   8                    3- 댓댓글              3                     2(부모STEP+1)                       1(부모DEPTH+1)

 

 

**새 글이 작성될때는 글번호(seq)값으로 REF값 설정, STEP은 무조건 1
**댓글이 작성될때는 부모의 REF를 자신의 REF로 설정, STEP 부모+1
**새글이 작성될때는 DEPTH=0, 댓글은 부모의 DEPTH+1
**댓글 작성될때는 같은 그룹 내에서 부모의 STEP 보다 큰 게시글의 STEP+1 하는 UPDATE코딩  하고 난 후 그 자리에 들어감 (6번글)

 

   ㄴ.목록 페이지 ( list .jsp )
   
   order by ref desc, step asc
 --------------------------------------------
 글번호   |       제목        |    (작성자   | 작성일 일단 제외)  
 --------------------------------------------
 (새글)   3                    세 번째 게시글             3(seq)            1
   [depth 1]ㄴ(댓글)   8                    3- 댓글                3            3
 (새글)   2                    두 번째 게시글             2(seq)            1
   [depth 1]ㄴ(댓글)   6                    2- 댓글                2            3
     [depth 2] ㄴ(댓글)   7                   6- 댓댓글               2                            3    
   [depth 1]ㄴ(댓글)   4                    2- 댓글                2               4
     [depth 2] ㄴ(댓글)   5                   4- 댓댓글               2             5
 (새글)   1                    첫 번째 게시글             1               1
 --------------------------------------------
                        [1]
 --------------------------------------------

 

 

 

2) 게시판 테이블 컬럼 2개 추가 : THREAD, DEPTH

 

가정) 하나의 새 글에 댓글이 1000개가 안 넘는다고 가정

 

 ORACLE
                        Thread        Depth
  1 첫번째 글            1000             0          (새글)
  2 두번째 글            2000             0          (새글)
  3 세번째 글            3000             0          (새글)
  4 2-댓글               1999-1-1       1          (댓글)  Thread=부모t-1 Depth=부모d+1
  5 2-댓글               1999-1          1          (댓글)  Thread=부모t-1 Depth=부모d+1
  6 2-댓글               1999             1          (댓글)  Thread=부모t-1 Depth=부모d+1
     2번 새글 그룹 (같은 그룹 2000~1001)
  
  댓글 : Thread :부모 스레드-1
          Depth : 부모 Depth+1
          같은 그룹에서 부모 Thread보다 작은 Thread의 Thread-1 
  
  order by Thread desc
  
  3 세번째 글            3000             0          (새글)
  2 두번째 글            2000             0          (새글)
  1 첫번째 글            1000             0          (새글)

반응형
Comments