개발자

JPA로 대댓글 기능 구현할 때 어떤 방식으로 구현하시나요??

2024년 02월 14일조회 1,119

오늘 개인프로젝트에 대댓글 기능을 구현했는데 검색해보니까 대부분의 블로그들이 댓글 엔티티에 양방향 연관 관계를 걸어서 구현하더라구요..? 저는 너무 복잡해보여서 groupId랑 parentId 사용해서 그룹별로 묶어서 처리를 했는데 어떤 방식이 더 좋은건지 모르겠습니다... 그룹1 부모댓글1 (groupId: 1) 자식댓글1 (groupId: 1, parentId: 1) 자식댓글2 (groupId: 1, parentId: 1) 그룹2 부모댓글2 (groupId: 2) 자식댓글1 (groupId: 2, parentId: 2) 그룹3 부모댓글3 (groupId: 3) 이런식으로 그룹별로 묶어서 조회해서 뿌려주는 방식으로 구현했습니다. 다들 어떤 방식으로 구현하시는지 궁금합니다..!

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 2

권혁진님의 프로필 사진

제 생각엔 굳이 그룹 만들 필요 없이 댓글과 대댓글 1대다 관계로 구현하면 될거 같아요 부모 댓글 자체가 그룹이라고 생각이 들기두 하구요

profile picture

익명

작성자

2024년 02월 14일

아하 구현자체는 더 간단하더라구요 리팩토링 할 때 그 방식으로 해봐야겠네여 ㅎㅎ 답변 감사합니다!

장준영님의 프로필 사진

시스템 설계라는 것이 주어진 환경을 이해하는 것에서부터 출발하다보니 정답은 없어요. 글쓴이분이 적어주신 방법도 나쁘지 않습니다. 도메인이 어떻게 구현되어 있는지 몰라서 자세히 적긴 어렵겠으나 확장성을 고려한다면 댓글 도메인을 별도로 분리해서 NoSQL 에 도메인 본인의 아이디와 댓글 내용, 생성 시점, 다른 댓글을 참조할 경우 참조할 아이디 등, 조회시 필요한 데이터를 넣어두고 사용할 것 같아요. 만약 참조하는 댓글이 있다면 대댓글일 것이고, 그렇지 않다면 상위 댓글일 테니까요. 이렇게 할 경우 대댓글의 대댓글 같은 요구사항이 들어와도 쉽게 구현해낼 수 있습니다. 확장이 편하도록 만들어졌기 때문에요.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2024년 02월 14일

JPA를 사용한 댓글과 대댓글(이하 '답글') 기능의 구현 방식에는 여러가지 접근법이 있으며, 상황과 요구사항에 따라 적절한 방법을 선택하는 것이 중요합니다. 1. Adjacency List: 가장 일반적으로 사용되는 방법으로, 각 댓글은 부모 댓글에 대한 참조를 가집니다. 이 경우 양방향 연관 관계를 설정하여 해당 댓글의 모든 답글을 쉽게 조회할 수 있습니다. 그러나 이런 형태로 트리를 구성하는 경우 특정 노드 아래의 모든 자식 노드를 가져오는 등의 연산에서 비효율이 발생할 수 있습니다. 2. Path Enumeration: 각 댓글에서 root까지 경로를 저장하는 방법입니다. 이 방법은 특정 노드의 모든 부모나 자식을 쉽게 찾을 수 있다는 장점이 있지만, 엔티티 추가 및 삭제 시 많은 업데이트 작업이 필요해질 수 있습니다. 3. Nested Set / Materialized Path / Closure Table : 위와 같은 문제들을 해결하기 위해 고안된 다른 트리 저장 전략들입니다. 데이터베이스 및 JPA 사용에 꽤 복잡하므로, 이러한 방법을 사용하는 것이 적절한지 여부는 구현 중인 애플리케이션의 요구사항과 관련이 있습니다. 기존에 구현하신 방식도 잘 동작한다면 계속 사용하시는 것도 좋은 선택입니다. 그룹ID와 부모 댓글 ID를 사용하여 대댓글을 관리하는 것은 Adjacency List 방식과 비슷한 접근 방법이며, 이 방법이 간단하고 직관적으로 원하는 결과를 얻을 수 있다면 충분히 유효한 해결책입니다. 단, 해당 구조가 복잡해진다면 위에서 언급한 다른 트리 저장 전략들을 고려해볼 수도 있습니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!