답글이 있는 게시판 만들기

2024. 12. 20. 18:30·Spring

1. 설계 개요

1-1. 주요 필드 정의

필드명 설명
seq 글번호(순서). 게시판의 모든 글(댓글, 답글 포함)에 대해 고유한 번호. 자동 증가 (AUTO_INCREMENT).
grp 글그룹. 하나의 글과 그에 속한 모든 답글이 동일한 grp 값을 가짐.
grps 그룹 내 순서. 같은 그룹(grp) 내에서의 정렬 순서를 나타냄.
grpl 그룹 내 깊이. 댓글은 0, 답글은 1 이상으로 계층적 깊이를 나타냄.

2. 테이블 구조

2-1. 테이블 생성

rep_board1 테이블은 댓글과 답글을 포함한 계층적 데이터를 관리합니다.

CREATE TABLE rep_board1 (
    seq          INT AUTO_INCREMENT PRIMARY KEY, -- 고유 글번호
    grp          INT NOT NULL,                  -- 글그룹 번호
    grps         INT NOT NULL,                  -- 그룹 내 순서
    grpl         INT NOT NULL,                  -- 그룹 내 깊이
    subject      VARCHAR(150) NOT NULL,         -- 제목
    writer       VARCHAR(12) NOT NULL,          -- 작성자
    mail         VARCHAR(50),                   -- 이메일
    password     VARCHAR(41) NOT NULL,          -- 비밀번호
    content      VARCHAR(2000),                 -- 내용
    hit          INT NOT NULL DEFAULT 0,        -- 조회수
    wip          VARCHAR(15) NOT NULL,          -- 작성자 IP
    wdate        DATE NOT NULL DEFAULT CURDATE()-- 작성일
);

3. SQL 로직

3-1. 모글 삽입

모글은 새로운 그룹으로 추가되며, grp 값은 seq와 동일합니다.

INSERT INTO rep_board1 (grp, grps, grpl, subject, writer, mail, password, content, hit, wip, wdate)
VALUES (LAST_INSERT_ID() + 1, 0, 0, '모글 제목', '작성자', 'test@example.com', PASSWORD('1234'), '모글 내용', 0, '127.0.0.1', CURDATE());

3-2. 답글 삽입

답글은 부모 글의 grp와 동일한 그룹에 추가되며, 부모 글의 순서를 기준으로 정렬합니다.

1. grps 값 조정

부모 글의 grps보다 큰 값을 가진 모든 글의 grps를 +1 증가시킵니다.

UPDATE rep_board1
SET grps = grps + 1
WHERE grp = ? AND grps > ?;

2. 답글 삽입

부모 글의 grp, grps, grpl 값을 기반으로 답글을 삽입합니다.

INSERT INTO rep_board1 (grp, grps, grpl, subject, writer, mail, password, content, hit, wip, wdate)
VALUES (?, ?, ?, '답글 제목', '작성자', 'test@example.com', PASSWORD('1234'), '답글 내용', 0, '127.0.0.1', CURDATE());

  • grp: 부모 글의 grp.
  • grps: 부모 글의 grps + 1.
  • grpl: 부모 글의 grpl + 1.

3-3. 댓글/답글 조회

ORDER BY grp DESC, grps ASC를 통해 계층적으로 데이터를 정렬합니다.

SELECT seq, grp, grps, grpl, subject, writer, wdate
FROM rep_board1
ORDER BY grp DESC, grps ASC;


4. 데이터 예시

4-1. 데이터 삽입 후

seq grp grps grpl subject action
1 1 0 0 모글1 board_write
2 2 0 0 모글2 board_write
3 1 4 1 1-1 board_reply
4 1 2 1 1-2 board_reply
5 1 1 1 1-3 board_reply
6 1 6 2 1-1-1 board_reply
7 1 5 2 1-1-2 board_reply
8 1 3 2 1-2-1 board_reply

4-2. 정렬 결과

쿼리:

SELECT seq, grp, grps, grpl, subject
FROM rep_board1
ORDER BY grp DESC, grps ASC;

출력:

seq grp grps grpl subject
2 2 0 0 모글2
1 1 0 0 모글1
5 1 1 1 1-3
4 1 2 1 1-2
8 1 3 2 1-2-1
3 1 4 1 1-1
7 1 5 2 1-1-2
6 1 6 2 1-1-1

모글2
└── (그룹 내 순서 없음)

모글1
├── 1-3
├── 1-2
│   └── 1-2-1
└── 1-1
    ├── 1-1-2
    └── 1-1-1

'Spring' 카테고리의 다른 글

Spring Web MVC - HTTP 요청 RequestMapping  (1) 2024.12.20
SpringBoot 웹 애플리케이션의 MVC 패턴  (0) 2024.12.20
JSP로 페이징 구현하기  (1) 2024.12.20
MVC 패턴이란?  (2) 2024.12.19
Spring Web MVC - Http 요청  (0) 2024.12.19
'Spring' 카테고리의 다른 글
  • Spring Web MVC - HTTP 요청 RequestMapping
  • SpringBoot 웹 애플리케이션의 MVC 패턴
  • JSP로 페이징 구현하기
  • MVC 패턴이란?
jhyngu
jhyngu
취업하자.
    티스토리 홈
    |
  • jhyngu
    jhyngu
    jhyngu
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • Dev (151)
      • Java (2)
      • Spring (51)
      • Spring Security (39)
        • JWT (22)
        • OAuth2 (17)
      • Kotlin (2)
      • React (6)
      • Coding Test (28)
      • DB (0)
      • Git (5)
      • Linux (14)
      • docker (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    api client
    JavaScript
    git
    mybatis
    Linux
    Spring Security
    MariaDB
    react
    Spring Boot
    Spring
    Postman
    OAuth2
    spring web
    JWT
    백준
    oauth2
    Spring Framework
    MVC
    JDBC
    알고리즘
  • hELLO· Designed By정상우.v4.10.3
jhyngu
답글이 있는 게시판 만들기
상단으로

티스토리툴바