요약

  1. 서로 다른 게시판 도메인에서 댓글 기능을 사용해야함.
  2. Comment 엔티티만을 이용한 계층형 구조와 Comment 와 ReplyComment 엔티티를 둘다 사용하는 방식 고민
  3. 댓글과 대댓글은 개념적으로 다르기 때문에 때문에 Comment 와 ReplyComment 엔티티를 만들고 구현

댓글 구현 (문제 상황)

졸작을 하면서 두개의 게시판에 댓글 및 대댓글 기능을 각각 넣어야 하는 상황이었다.

동네 줍깅 서비스에서 운영하는 게시판은 2가지가 있다.

  1. 지역 플로깅 모집 게시판 (RecruitmentBoard)
  2. 플로깅 활동 인증 게시판 (CertificationBoard)

댓글 및 대댓글은 각각의 게시판에서 동일한 구조로서 사용되기 때문에 하나의 댓글 및 대댓글 도메인을 만들고 이를 각각에 게시판에 붙히는 구조로 기능을 구현했다.

우선 댓글 기능을 먼저 만들기로 하였고, Comment 라는 엔티티를 다음과 같이 만들어주었다.

Comment

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Comment {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "comment_id", nullable = false)
    Long id;

    @Embedded
    @Column(nullable = false)
    private CommentBody commentBody;

    @ManyToOne
    @JoinColumn(name = "member_id")
    private Member writer;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "recruitment_board_id")
    private RecruitmentBoard recruitmentBoard;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "certification_board_id")
    private CertificationBoard certificationBoard;

    @Column(nullable = false)
    private LocalDateTime createdDateTime;

    @Column(nullable = false)
    private LocalDateTime lastModifiedDateTime;

//...

}