본문 바로가기
자바웹개발

댓글가능게시판 구현

by 오렌지코딩 2022. 5. 22.

댓글가능게시판

유형1:  MVC형태
View > Controller > Service (비즈니스로직) > DB

유형2: 무슨형태??
Controller(View 역할 포함) > Service > DB 


Column 

글번호(number), 부모글번호(number), 글제목(varchar2), 

작성자명(varchar2), 작성일자(Data), 비밀번호(varchar2), 조회수(number) 

 

  글번호 부모글번호 글제목 작성자명 작성일자 비밀번호 조회수
원글 1 null          
원글 2 null          
1번글의답글 3 1          
2번글의답글 4 2          
1번글의답글 5 1          
5번글의답글 6 5          

글번호 컬럼에는 시퀀스 필요


만약 글번호: 1 이고 부모글번호: 0 이면 원래글로 판단, 

글번호가 3이고 부모글번호가1이면 3번글은 1번글에 대한 답글

글번호가 4이고 부모글번호가2이면 2번글의 대한 답글

글번호가 5이고 부모글번호가 1이면 1번글에 대한 답글

글번호가 6이고 부모글번호가 5이면 5번글에 대한 답글 ( 1번글 답글에 대한 답글)


CREATE TABLE repboard(
  board_no number,  // 글번호
  parent_no number, // 부모글번호
  board_title varchar2(30), // 제목
  board_writer varchar2(15), // 작성자명
  board_dt date, // 작성일자
  board_pwd varchar2(4), // 글 비밀번호
  board_cnt number(5), // 조회수
  constraint repboard_no_pk PRIMARY KEY(board_no) // 글번호를 pk로 설정
);

 

샘플데이터

INSERT INTO repboard (board_no, parent_no, board_title, board_writer, board_dt, BOARD_PWD, board_cnt)  

VALUES (1,  0, '글1',  NULL,  '21/03/01',  '1234',  0);

INSERT INTO repboard(board_no, parent_no, board_title, board_writer, board_dt, BOARD_PWD, board_cnt)  

VALUES (2,             0,            '글2',          '이씨',           '21/03/02',    '1234',         0);
INSERT INTO repboard(board_no, parent_no, board_title, board_writer, board_dt, BOARD_PWD, board_cnt)  

VALUES (3,             2,            '글3-답글2',  '김씨',          '21/03/03',    '1234',         0);
INSERT INTO repboard(board_no, parent_no, board_title, board_writer, board_dt, BOARD_PWD, board_cnt)  

VALUES (4,             2,            '글4-답글2',  '강씨',          '21/03/04',    '1234',         0);
INSERT INTO repboard(board_no, parent_no, board_title, board_writer, board_dt, BOARD_PWD, board_cnt)  

VALUES (5,             3,            '글5-답글3',  '신씨',          '21/03/05',    '1234',         0);

.

.

.

 

 

댓글구현을 위해 오라클 계층형 쿼리를 사용해보자

원글인지 답글인지에 따라 글의 순서를 정의할 수 있는 계층형쿼리 쿼리 사용법

 

level1: 원글, level2: 원글의 답글, level3: 답글의 답글

 

SELECT [컬럼]

FROM [테이블]

WHERE [조건]

START WITH [최상위 조건]

CONNECT BY [NOCYCLE] [PRIOR 계층형 구조 조건];

 

parnet_no = 0 이면 원글

START WITH parent_no = 0 (level1로 보여줄 조건) 

 

SELECT board_no

FROM repboard

START WITH parent_no = 0

CONNECT BY PRIOR board_no = parent_no; // 현재행의 부모글번호와 같은 값을 갖는 board_no(글번호)행을 찾는다.

 

 

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

 

추가로 글번호(board_no)순으로 내림차순 정렬이 필요

동일레벨의 행들간에는 최신순으로 정렬

원글 들 중 최신글이 먼저 위치하고, 답글들 중에서도 최신글이 윗 부분에 위치하게 만들어야 한다

같은 레벨을 뜻하는 것이 SIBLINGS(계층형 쿼리에서 사용)

원글은 1번글과 2번글. 2번글이 최신글이므로 1번글보다 위에 위치한다.

4번글과 3번글은 2번글의 답글, 4번답글이 3번답글보다 최신글이므로 상대적으로 위에 위치한다.

5번글은 3번글의 답글

 

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

 

LEVEL은 오라클의 자체내장 컬럼이다 (실제 REPBOARD 데이터 반영)

 

 

 

 

> 글번호 자동생성을 위한 SEQUENCE 생성

DROP SEQUENCE board_seq;
CREATE SEQUENCE board_seq START WITH 11; 

(START WITH 11 이므로 글번호는 11번부터 자동생성된다)

 

 


 

이클립스에서 프로젝트를 생성해보자. Dynamic web project 생성

 

 

 

boardmvc 프로젝트 생성 시작 (Dynamic web module version 3.0으로 생성, 기존에는 2.5로 했었는데) 3.0부터는 web.xml 필요하지 않습니다. 톰캣 서버에서 제공되는 최신 다이나믹 웹 모듈 버전이 현재 4.0 (2021년 3월기준) 

 

Source folders on build path: src,  Default output folder: build\\classes

 

<sevlet>

</servlet>

<servlet-mapping>

</servlet-mapping>

이렇게 2.5버전에서 web.xml에서 설정해야 했던 부분은 3.0이상부터는 어노테이션으로 대체 가능

 

 

 


src > package 만들기 > 패키지이름은 control > servlet만들기 BoardListServlet  

 

URL mapping은&nbsp;&nbsp; /list
요청방식은 구분하지 않으므로 service() 메소드만 생성

 

 


3.0버전이므로 web.xml에서 설정하지 않고 어노테이션으로 설정. @webServlet("/list") 이렇게 servlet 위에 어노테이션이 설정되어있다.

 

@WebServlet 어노테이션은 클래스 위에 선언되는 어노테이션


메인페이지 생성

메인페이지 index.jsp

 

'자바웹개발' 카테고리의 다른 글

스타벅스 화면 구성  (0) 2023.09.17
톰캣 설치 및 web 프론트엔드 구현  (0) 2023.09.17
테이블 설계  (0) 2023.09.16