inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

댓글 무한 depth - 테이블&구현 설계

댓글순서부여방식

1

pumpingYoo

작성한 질문수 5

0

무한 depth 댓글의 path 생성 방식에 대해 궁금한 점이 있습니다.

강의에서는 각 depth마다 00000, 00001 같은 별도의 순차값을 부여해서

예를 들면

댓글1 → 00000

댓글2 → 00000 00000

댓글6 → 00000 00000 00000

댓글4 → 00000 00001

처럼 path를 구성하는 것으로 이해했습니다.

그런데 기존의 comment_id가 이미 댓글 생성 순서를 보장한다면,

굳이 각 depth마다 새로운 순차값을 다시 부여하지 않고

comment_id를 고정 길이 문자열로 변환해서

댓글1(id=1) → 00001

댓글2(id=2) → 00001 00002

댓글6(id=6) → 00001 00002 00006

댓글4(id=4) → 00001 00004

처럼 path를 만들어도 ORDER BY path ASC 시 동일하게 트리 순서가 보장될 것 같은데,

강의에서 별도의 순차값을 사용하는 이유가 있을까요?


java mysql spring-boot kafka redis

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. pumpingYoo님.

말씀하신 것처럼 comment_id가 항상 생성 순서를 보장하고, 고정 길이로 변환할 수 있다면 comment_id를 path의 각 구간으로 사용하는 방식도 정렬 자체는 가능합니다.

다만 강의에서는 댓글 식별자(comment_id)와 댓글 트리 내 순서값(path chunk)을 분리하는 방식을 사용합니다.

  • comment_id는 댓글을 식별하기 위한 값입니다.
  • path의 순차값은 같은 부모 아래에서 댓글의 노출 순서를 표현하기 위한 값입니다.
  • 향후 DB 샤딩, 분산 ID 생성, 저장소 변경 등이 적용되면 comment_id가 전역적인 생성 순서를 보장하지 않을 수 있습니다.
  • ID가 커지면 path의 각 구간이 고정 길이를 초과할 수 있고, ID 생성 정책이 변경될 때 댓글 트리 정렬 규칙까지 영향을 받을 수 있습니다.
  • 반면 별도의 순차값을 사용하면 댓글 식별 정책과 무관하게 트리 정렬 규칙을 유지할 수 있습니다.

따라서 현재 구조에서 단일 DB의 auto increment comment_id가 생성 순서를 보장한다면 질문하신 방식도 구현할 수 있지만, 대규모 시스템에서는 식별자와 정렬 순서를 분리하는 편이 확장성과 변경에 더 유리합니다.

path의 사전순 정렬과 부모·자식 댓글 간 childrenTopPath, descendantsTopPath의 관계는 아래 질문과 답변에서도 확인하실 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

movablePageCount와 pageSize 상수

0

14

1

JPA와 네이티브 쿼리

0

16

1

ArticleReadService 관련 질문

0

53

1

조건 검색 질문

0

62

1

댓글 삭제 로직에서 동시성 문제 발생 가능성

0

68

1

무한 depth 구현 중 CommentPath 관련 질문

0

65

1

테스트 코드 작성 시 DTO 새로 작성하는 이유가 궁금합니다.

0

84

1

Kafka Cluster 구성도 질문

0

66

1

@Version 어노테이션이 붙은 필드는 낙관적 락이든 비관적 락이든 업데이트가 됩니다.

0

109

1

consumer에서 에러가 발생할 경우 데이터 유실 문의

0

117

2

게시글 테스트 데이터 삽입

0

102

2

정렬, 필터, 검색 등의 조건이 붙을 경우 최적화할 수 있는 방법이 무엇이 있을까요?

0

176

2

좋아요 기능 정합성 보장 방법

0

152

2

좋아요 동시성처리 최적의 선택?

1

213

2

프론트엔드 msa 환경 api 주소 통합? 과 서버끼리 통신 방식에대해

0

144

2

안녕하세요 무한스크롤 강의듣다가 질문이 있습니다.

0

103

1

조회수 조회 로직 질문

1

124

2

비로그인 유저도 어뷰징 방지 정책

1

137

2

CommentServiceTest의 테스트 로직 질문

0

92

2

무한 스크롤 방식에서 페이지 번호 방식 쿼리의 문제점 의문

1

119

2

path 쿼리 관련 질문드립니다!

0

108

2

antigravity 에디터를 쓰신다면 종료해주세요

1

154

0

프로젝트 구조

0

131

2

article_like_count api test

0

120

2