본문 바로가기
  • 실행력이 모든걸 결정한다
Spring 사전 준비/JSP Servlet

[JSP Servlet] 게시판 설계 준비과정

by 김코더 김주역 2020. 12. 16.
반응형

1. 구성 요소

MVC MODEL 2, FrontController - Command 패턴을 이용한다.

 

※ MVC MODEL 2 설명 - 2. MVC 패턴의 종류 - 2) 모델2

kimcoder.tistory.com/188

 

[JSP Servlet] MVC란? / JSP 문서 작성법

* DAO : 데이터 접근 객체 * 모듈화 : 작업을 작은 단위로 나누는 것, 부품화 1. MVC란? MVC -> Model, View(JSP), Controller(Servlet) Model은 데이터베이스와의 관계를 담당한다. 사용자가 Controller에게 요청..

kimcoder.tistory.com

 

※ FrontController - Command 패턴 설명

kimcoder.tistory.com/222

 

[JSP Servlet] FrontController - Command 패턴 / 포워딩

* Directory pattern : /name * 확장자 pattern : /name.확장자 * 위 두 패턴은 처리하는 서블릿 파일이 다르다. 이미지 출처 - www.javatpoint.com/front-controller-pattern 1. FrontController 패턴 클라이언..

kimcoder.tistory.com

 

요청 : 클라이언트 요청 -> FrontController -> Command -> DTO, DAO -> DataBase

응답 : DataBase -> DTO, DAO -> Command -> FrontController -> View -> 클라이언트 응답

 

 

2. 데이터 베이스 테이블 생성

게시글 정보에 대한 필드 목록을 정한다.

 

테이블 명 mvc_board -> CREATE TABLE mvc_board( );

 

글 ID -> pID NUMBER(8) PRIMARY KEY,

글 작성자 -> pUSER VARCHAR2(20),

글 제목 -> pTITLE VARCHAR2(80),

글 내용 -> pCONTENT VARCHAR2(300),

글 작성 날짜 -> pDATE DATE DEFAULT SYSDATE,

글 조회수 -> pVIEWS NUMBER(8) DEFAULT 0,

답변글 처리(현재 시퀀스 값(id와 구분), 어느 최상위 글의 답변인지 확인하려는 용도) -> pGROUP NUMBER(4),

답변글 처리(최상위 글로부터 몇 칸 뒤에 배치할 지 결정, 이 값은 중복되지 않게 설계) -> pSTEP NUMBER(4),

답변글 처리(들여쓰기 할 정도) -> pINDENT NUMBER(4)

 

자동 증가를 위한 sequence 생성

-> create sequence mvc_board_seq;

 

 

3. 게시판의 기능

* FrontController 은 .do 로 접속시 반드시 거치게 됨

FrontController의 request, response 객체는 Command의 작업 수행 메소드를 이용하여 인자에 담아서

마지막에 RequestDispatcher 객체를 이용하여 이 request, response 객체를 다음 페이지에 보내면 된다.

그러면, 다음 페이지에서는 별도의 import 작업 없이 이전에 request.setAttribute("name","value") 으로 설정했던 name으로 value에 바로 접근할 수 있다.

사용자가 입력한 정보가 필요하다면 <form> 태그를 이용하여 값들을 URI의 querystring에 붙여보낸다.

데이터 베이스 안에 있는 정보가 필요하다면 request.setAttribute로 레코드 혹은 레코드 리스트들을 요청 객체에 담는다.

 

1) 글 목록 조회

요청 : 클라이언트 요청 -> FrontController -> 목록 조회 Command -> DTO,DAO -> DataBase

응답 : DataBase -> DTO,DAO -> 목록 조회 Command -> FrontController -> View

DB : SELECT 문으로 모든 레코드의 모든 필드 조회, ORDER BY로 pGROUP 기준 1차 내림차순 정렬, pSETP 기준 2차 오름차순 정렬

 

2) 글 내용 조회

요청 : <a> 태그로 클라이언트 요청 -> FrontController -> 내용 조회 Command -> DTO,DAO -> DataBase

응답 : DataBase -> DTO,DAO -> 내용 조회 Command -> FrontController -> View

DB1 : UPDATE 문으로 ID값(<a> 태그의 querystring으로 전송) 에 해당하는 레코드의 조회수를 1 증가

DB2 : SELECT, WHERE 문으로 ID값에 해당하는 레코드의 모든 필드 조회

 

3) 글 수정

요청 : <form> 태그로 클라이언트 요청 -> FrontController -> 수정 Command -> DTO,DAO -> DataBase

응답 : DataBase -> DTO,DAO -> 수정 Command -> FrontController -> View

DB : UPDATE 문으로 ID값(<form> 태그 안에 있는 <input> 태그의 type="hidden" 으로 전송)에 해당하는 레코드의 제목, 내용 등을 수정

 

4) 글 삭제

요청 : <a> 태그로 클라이언트 요청 -> FrontController -> 삭제 Command -> DTO,DAO -> DataBase

응답 : DataBase -> DTO,DAO -> 삭제 Command -> FrontController -> View

DB : DELETE, WHERE 문으로 ID값에 해당하는 레코드 삭제

 

5) 글 작성

요청 : <a 태그로> 클라이언트 요청 -> FrontController -> 글 작성 Command -> DTO,DAO -> DataBase

응답 : DataBase -> DTO,DAO -> 글 작성 Command -> FrontController -> View

DB : INSERT 문으로 레코드 추가, pID 필드값은 mvc_board_seq.nextval로, pGROUP 필드값은 mvc_board_seq.currval로 설정

 

6) 글 답변

6 - 1) 부모(상위) 글 정보 가져오기

요청 : <a> 태그로 클라이언트 요청 -> FrontController -> 부모(상위) 글 정보 추출 Command -> DTO,DAO -> DataBase

응답 : DataBase -> DTO,DAO -> 부모(상위) 글 정보 추출 Command -> FrontController -> View

DB : SELECT 문으로 ID값(<a> 태그의 querystring으로 전송) 에 해당하는 레코드의 글 정보 가져오기(pID, pGROUP, pSTEP, pINDENT 필드는 필수적)

 

6 - 2) 글 작성

요청 : <form> 태그로 클라이언트 요청 -> FrontController -> 답변 글 작성 Command -> DTO,DAO -> DataBase

응답 : DataBase -> DTO,DAO -> 답변 글 작성 Command -> FrontController -> View

 

DB1 : UPDATE 문으로 GROUP값(<form> 태그 안에 있는 <input> 태그의 type="hidden" 으로 전송)이 부모(상위)글의 GROUP값(=최상위글의 GROUP값)과 같으면서, STEP값(<form> 태그 안에 있는 <input> 태그의 type="hidden" 으로 전송)이 부모(상위) 글의 STEP값보다 큰 레코드들의 STEP값을 1증가

* DB1 설명 : 부모(상위) 글의 다른 답변 글들 처리 - 이 답변글을 부모(상위) 글의 바로 아래에 배치시킬 목적, 기존 부모(상위) 글의 답변 글들은 1STEP씩 뒤로 밀어냄

 

DB2 : INSERT 문으로 레코드 추가, pSTEP과 pINDENT는 1씩 더해서 추가 (부모(상위) 글의 바로 아래에, 한칸 더 들여쓰기 위함)

 

※ 페이지로 나눠서 게시글을 표시하고 싶을 경우에는 SQL의 LIMIT 을 이용한다.

LIMIT a, b : 상위 a+1번째 레코드부터 b개의 레코드 추출

ex) LIMIT 20,10 : 상위 21~30번째 레코드 추출

 

 

 

반응형

댓글