▸JSP & Servlet/기본 문법

MVC 패턴의 게시판 만들기_계층형 게시판 로직 설계 [1/5]

코데방 2020. 2. 28.
728x90

로그인 페이지 만들기에 이어 이번에는 MVC 패턴을 적용한 웹 어플리케이션에서 게시판을 만들어봅니다. Spring 없이 순수 JSP와 서블릿으로 구성되며, 기존 로그인과 회원가입, 정보조회를 만들었던 웹페이지에 기능을 붙여서 구현합니다. 

 

[· JSP & Servlet/- 부트스트랩] - 부트스트랩으로 게시판 만들기_리스트 화면 [1/3]

[· JSP & Servlet/- 부트스트랩] - 부트스트랩으로 게시판 만들기_글쓰기 화면 [2/3]

[· JSP & Servlet/- 부트스트랩] - 부트스트랩으로 게시판 만들기_게시물 보기 화면 [3/3]

[· JSP & Servlet/- 기본 문법] - MVC 패턴의 게시판 만들기_계층형 게시판 로직 설계 [1/5]

[· JSP & Servlet/- 기본 문법] - MVC 패턴의 게시판 만들기_페이징 처리(오라클DB) [2/5]

[· JSP & Servlet/- 기본 문법] - MVC 패턴의 게시판 만들기_리스트 출력 로직 [3/5]

[· JSP & Servlet/- 기본 문법] - MVC 패턴의 게시판 만들기_글작성 로직 [4/5]

[· JSP & Servlet/- 기본 문법] - MVC 패턴의 게시판 만들기_게시물 보기 로직 [5/5]

 

 

 

전체 코드는 깃허브에 있습니다. 커밋 시점은 "add board" 입니다. 

https://github.com/codevang/hssweb

 

 


 

 

먼저 게시판 설계 부분입니다. 여러 알고리즘이 있겠지만 많이 사용하는 방식은 계층형 게시판 형식인 것 같습니다. 출력할 순서와 들여쓰기 될 정보를 미리 DB안에 넣어두고 그대로 가져와서 정렬된 순서대로 출력해주는 방식입니다. DB에 저장하는 방식은 정해져 있으므로 순수한 텍스트 정보를 바탕으로 게시물 간의 관계를 엮어줘야 합니다. 순서대로 하나씩 살펴보겠습니다.

 

 

1. 게시물 DB 테이블 컬럼 구성

  • 게시물 번호 : 게시물의 고유 번호 (중복없음, DB의 시퀀스 사용)
  • 그룹 번호 : 부모 게시물에서 파생된 답글들을 묶어주는 번호 (DB의 시퀀스 사용)
  • 그룹 내 순서 : 첫 게시물 아래 답글들의 순서 (최신 글은 항상 가장 위로)
  • 들여쓰기 : 답글은 부모 게시물보다 들여쓰기 돼야 하므로 정보를 미리 입력해둠
  • 제목/내용/작성자/조회수/작성일자 : 로직과는 무관하므로 설명에서는 제외

좀 복잡해보이지만 사실 생각보다 간단합니다. 로직이야 입맛대로 구현하면 되니까 계층형 게시판의 구조만 대충 이해하면 될 것 같습니다.

 

 


 

 

1. 새글쓰기

 

새 글쓰기는 DB에 순서대로 들어가주면 되기 때문에 그냥 입력만 해주면 됩니다. 

 

아래 그림과 같이 새글쓰기를 할 경우, 로직 전개를 위한 컬럼들은 고정된 값으로 채워주면 됩니다. 그룹 번호는 계속 증가하므로 실제로 게시물을 가져와서 리스트로 출력할 때는 내림차순으로 정렬하면 됩니다. 

 

 

 


 

 

2. 부모 게시물에 답글쓰기 (답글1-1)

 

먼저 1번 게시물에 답글이 달릴 경우입니다. 

 

  • 게시물 번호 : num 시퀀스 값으로 자동 증가 (새글쓰기 게시물과 같음)
  • 그룹 번호 : 부모 게시물의 그룹번호와 동일
  • 그룹 내 순서 : 부모 게시물의 ('그룹 내 순서' + 1)
  • 들여쓰기 : 부모 게시물의 ('들여쓰기' + 1)

부모 게시물에 바로 달리는 답글은 간단히 처리됩니다. 부모 게시물의 정보를 이용해서 처리해줍니다. 1번과 2번 게시물 사이에 들어와야하므로 그룹 번호를 1번 게시물의 그룹과 똑같이 맞춰줍니다. 그리고 순서는 1을 증가시키고 들여쓰기도 한 칸이므로 1 증가시킵니다.

 

 

 


 

 

3. 답글에 답글쓰기(답글1-1-1)

 

위에서 본 게시물에 답글 달기와 동일합니다. 그룹 내에서 순서대로 글 작성이 이뤄지고 있으므로 같은 그룹 번호에 그룹 내 순서와 들여쓰기를 1씩 증가시켜줍니다. 

 

 

 


 

 

4. 다시 부모 게시물에 추가로 답글 달기(답글 1-2)

 

이제 좀 생각해봐야할 문제가 나왔습니다. 게시물의 순서는 항상 최신이 위로 올라와야하기 때문에 아래 위치에 삽입되어야 합니다.

 

이 때 새로 추가될 1-2번 답글은 그룹 내 순서가 1이 돼야 하므로 1번 그룹에 있는 다른 모든 게시물들의 그룹 내 순서는 1씩 추가되어야 합니다. 결국 DB안에서 update 쿼리작업이 한 번 더 이뤄져야 한다는 뜻인데, 조금 더 로직을 추가해서 업데이트 작업을 최소화하기 위한 몇 가지 방법들이 있긴 합니다. 하지만 일단 뼈대는 현재 로직이므로 이번 게시판 만들기에서는 그냥 다 값을 업데이트 해주는 방법으로 진행하겠습니다.

 

 

 


 

 

 

위 로직을 그대로 코드로 옮기면 됩니다. DB에 값만 제대로 들어가면 출력할 때는 그룹 내림차순으로 먼저 정렬하고, 다시 그룹 내 순서(order)로 정렬해서 순서대로 출력해주면 됩니다. 실제 로직 구현은 다음글들에서 이어서 정리하겠습니다. 

728x90

댓글

💲 추천 글