강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

박력님의 프로필 이미지
박력

작성한 질문수

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

댓글 최대 2 depth - 목록 API 구현

2Depth 강의 도중 궁금한 점 있어요!!

해결된 질문

작성

·

35

0

CommonService 클래스 부분에서

image.png


이 코드 테스트를 하며 생각을 해봤는데요

EX)

루트 댓글 A(논리삭제)

ㄴ 댓글 B

ㄴ 대댓글 C

상황인 경우에서 B를 삭제했을 경우에 논리 삭제 되어있던 루트 댓글A도 삭제가 되면서

루트 댓글 A(물리삭제)

ㄴ 댓글 B(물리삭제)

ㄴ 대댓글 C

이런 상황으로 된다면 대댓글 C는 물리삭제 된 루트 댓글A를 parent로 가지는 고아 댓글이 되어버리는 것은 아닌가 궁금해서요!!

 

깔끔하게 딥한 강의 너무 잘 듣고 있어요!! 감사합니다 :)

 

답변 2

0

쿠케님의 프로필 이미지
쿠케
지식공유자

박력님, 안녕하세요!

잘 수강해주셔서 감사합니다.

 

A가 논리 삭제되어있더라도, B를 삭제한다고 해서 A가 물리 삭제되진 않습니다.

아직 C가 남아있기 때문입니다.

지금 코드에서 동작이 그렇게 처리되고 있다는 말씀이실까요?!

0

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

질문해주신 내용은 댓글 시스템의 데이터 베이스 구조와 관련된 것으로 보입니다. 특수한 경우에 사례를 들어 어떤 현상이 나타날 수 있는지를 확인하는 것은 좋습니다.

문제 이해

일반적으로 댓글 시스템에서 댓글은 루트 댓글과 자식 댓글로 나눌 수 있으며, 삭제 행위에는 두 가지 종류가 있습니다:
1. 논리 삭제: 데이터베이스에서 실제 삭제를 하지 않고, 댓글이 삭제되었음을 표시만 하는 것 (deleted=true).
2. 물리 삭제: 데이터베이스에서 실제로 데이터를 제거하는 것.

질문에서는 루트 댓글과 그 하위 댓글의 삭제가 어떻게 처리될지를 예측하고 있습니다. 특히 논리 삭제된 댓글이 물리 삭제될 때 하위 댓글(대댓글 C)이 고아가 되는 상황을 고려하고 계신 것 같습니다.

해결 방향

실제로 댓글 A가 물리적으로 삭제되면, 댓글 B와 C도 함께 삭제되도록 처리하는 것이 일반적입니다. 이런 식으로 처리하지 않으면 고아 댓글 문제가 발생할 수 있습니다.

  1. Cascade Delete 설정: 데이터베이스에서 댓글 구조에 대해 cascade 옵션을 설정하면, 부모가 삭제될 때 자식도 자동으로 삭제됩니다. 이는 보통 물리 삭제에서 사용됩니다.
  2. 애플리케이션 레벨 로직: 댓글 삭제에 있어 트랜잭션을 사용해 일관성 있는 상태를 유지할 수 있도록 추가적인 논리를 작성할 수도 있습니다. 즉, A가 물리적으로 삭제되면 B와 C도 삭제되도록 코드를 구성합니다.

참고 링크

비슷한 문제와 해결책을 다룬 유사한 기존 질문을 확인하실 수 있습니다:
- 댓글 시스템에서 고아 댓글 처리 방법 (게시글 제목)

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

박력님의 프로필 이미지
박력

작성한 질문수

질문하기