백엔드 기초 재정비/ERD 기반 API 설계

자기참조 관계 (댓글–대댓글) 설계 정리

namerong 2026. 2. 19. 13:46

1. 자기참조 관계란 무엇인가

자기참조 관계(Self-Referencing Relationship)란
하나의 테이블이 자기 자신의 PK를 참조하는 FK를 가지는 구조를 의미한다.

즉, 같은 엔티티 안에서 부모–자식 관계가 생기는 구조다.

대표적인 예시는 다음과 같다.

  • 댓글 ↔ 대댓글
  • 카테고리 ↔ 하위 카테고리
  • 조직도 (사원 ↔ 상사)

2. 댓글–대댓글 ERD 구조

댓글과 대댓글은 서로 다른 엔티티가 아니라
같은 Comment 엔티티 안에서 계층 구조로 표현된다.

Comment 테이블

컬럼명키설명

comment_id PK 댓글 고유 ID
post_id FK 어떤 게시글의 댓글인지
user_id FK 작성자
content   댓글 내용
parent_comment_id FK 부모 댓글 ID (자기참조)
created_at   작성 시각

3. parent_comment_id의 역할

parent_comment_id는
“이 댓글이 어떤 댓글의 자식인가?”를 나타낸다.

1) 일반 댓글 (최상위 댓글)

comment_id = 1
parent_comment_id = NULL
  • 누구에게도 달리지 않은 댓글
  • 게시글에 직접 달린 댓글

2) 대댓글

comment_id = 2
parent_comment_id = 1
  • 1번 댓글에 달린 댓글
  • 부모 댓글이 존재함

4. ERD 관계 표현

관계로 표현하면 다음과 같다.

Comment (1) ─── N Comment
  • 하나의 댓글은 여러 개의 대댓글을 가질 수 있다.
  • 대댓글은 반드시 하나의 부모 댓글을 가진다.
  • 같은 테이블끼리 연결되는 구조이므로 자기참조 관계다.

ERD에서는 보통 점선으로 표현되는 선택 관계로 그려진다.
(최상위 댓글은 parent_comment_id가 NULL이 될 수 있기 때문)


5. 자기 FK(Self-Referencing FK) 설명

자기 FK란
한 테이블이 자기 자신의 PK를 참조하는 외래키를 의미한다.

예시 구조:

Comment
--------------------------
comment_id (PK)
parent_comment_id (FK → Comment.comment_id)
  • 같은 테이블 안에서
  • PK를 FK로 다시 참조한다.
  • 이를 통해 계층 구조를 표현한다.

정리

Comment 테이블의 parent_comment_id는
같은 comment 테이블의 comment_id를 참조하는 자기참조 외래키다.
이를 통해 댓글과 대댓글의 부모–자식 관계를 표현한다.


6. 왜 자기 FK가 필요한가

댓글은 다른 댓글에 종속될 수 있다.

이는 단순한 값이 아니라
엔티티 간의 관계이기 때문에 FK로 표현해야 한다.

FK로 관리하면 다음을 보장할 수 있다.

  • 존재하지 않는 댓글을 부모로 참조하지 못함
  • 데이터 무결성 유지
  • 계층 구조 조회 가능

7. 왜 댓글과 대댓글을 테이블로 분리하지 않았는가

댓글과 대댓글은 구조적으로 완전히 동일하다.

  • 컬럼 구조 동일
  • 저장하는 데이터 동일
  • 역할만 다름 (부모인지, 자식인지)

따라서 별도 테이블로 분리하는 것은 불필요하다.

하나의 Comment 테이블에서
parent_comment_id를 통해 계층을 표현하는 것이

  • 정규화 원칙에 맞고
  • 확장성도 좋은 설계다.

최종 정리

댓글과 대댓글은 하나의 Comment 엔티티로 관리한다.

계층 구조를 표현하기 위해
parent_comment_id가 같은 테이블의 comment_id를 참조하는
자기참조 외래키 구조를 사용한다.

이를 통해

  • 부모–자식 관계를 명확히 표현하고
  • 데이터 무결성을 보장하며
  • 확장 가능한 댓글 계층 구조를 설계할 수 있다.