진행했던 프로젝트의 댓글 설계 구조를 살펴보자면
현재 설계에서는 댓글이 특정 리뷰(review_id)에 종속되는 구조이므로, 리뷰에 대한 1 Depth(1단계)만 지원된다.
즉, 리뷰에 대한 댓글은 달 수 있지만, 대댓글(댓글에 대한 댓글)은 지원되지 않는 구조이다.
대댓글을 작성하려면 어떻게 해야할까?
대댓글을 지원하기 위해 parent_id
컬럼을 추가하는 방법이다.
parent_id
가 NULL
이면 일반 댓글, 값이 있으면 해당 댓글의 대댓글로 설정하는 것이다.
parent_id
를 체크하여 부모 댓글이 존재하는지 확인한 후 저장해야 한다.ON DELETE CASCADE
를 설정하면 부모 댓글 삭제 시 대댓글도 자동 삭제할 수 있다.Depth
)가 깊어질 경우 쿼리가 복잡해진다. (재귀 쿼리 필요)대댓글이 많아질 경우, 정렬을 고려해야 한다면 group_id 와 depth 필드를 추가하는 방식도 있다.
group_id
: 부모 댓글 ID
를 저장하여 그룹화depth
: 댓글의 깊이를 저장 (0 = 부모 댓글, 1 = 첫 번째 대댓글, 2 = 두 번째 대댓글)group_id ASC
, depth ASC
, created_at ASC
로 정렬하면 트리 구조를 유지할 수 있다.ORDER BY group_id
, depth, created_at
)group_id
를 설정해야 하는 번거로움이 있다.