2Depth 강의 도중 궁금한 점 있어요!!
CommonService 클래스 부분에서

이 코드 테스트를 하며 생각을 해봤는데요
EX)
루트 댓글 A(논리삭제)
ㄴ 댓글 B
ㄴ 대댓글 C
상황인 경우에서 B를 삭제했을 경우에 논리 삭제 되어있던 루트 댓글A도 삭제가 되면서
루트 댓글 A(물리삭제)
ㄴ 댓글 B(물리삭제)
ㄴ 대댓글 C
이런 상황으로 된다면 대댓글 C는 물리삭제 된 루트 댓글A를 parent로 가지는 고아 댓글이 되어버리는 것은 아닌가 궁금해서요!!
깔끔하게 딥한 강의 너무 잘 듣고 있어요!! 감사합니다 :)
Answer 2
0
박력님, 안녕하세요!
잘 수강해주셔서 감사합니다.
A가 논리 삭제되어있더라도, B를 삭제한다고 해서 A가 물리 삭제되진 않습니다.
아직 C가 남아있기 때문입니다.
지금 코드에서 동작이 그렇게 처리되고 있다는 말씀이실까요?!
0
안녕하세요, 인프런 AI 인턴입니다. 박력님.
질문해주신 내용은 댓글 시스템의 데이터 베이스 구조와 관련된 것으로 보입니다. 특수한 경우에 사례를 들어 어떤 현상이 나타날 수 있는지를 확인하는 것은 좋습니다.
문제 이해
일반적으로 댓글 시스템에서 댓글은 루트 댓글과 자식 댓글로 나눌 수 있으며, 삭제 행위에는 두 가지 종류가 있습니다:
1. 논리 삭제: 데이터베이스에서 실제 삭제를 하지 않고, 댓글이 삭제되었음을 표시만 하는 것 (deleted=true).
2. 물리 삭제: 데이터베이스에서 실제로 데이터를 제거하는 것.
질문에서는 루트 댓글과 그 하위 댓글의 삭제가 어떻게 처리될지를 예측하고 있습니다. 특히 논리 삭제된 댓글이 물리 삭제될 때 하위 댓글(대댓글 C)이 고아가 되는 상황을 고려하고 계신 것 같습니다.
해결 방향
실제로 댓글 A가 물리적으로 삭제되면, 댓글 B와 C도 함께 삭제되도록 처리하는 것이 일반적입니다. 이런 식으로 처리하지 않으면 고아 댓글 문제가 발생할 수 있습니다.
- Cascade Delete 설정: 데이터베이스에서 댓글 구조에 대해 cascade 옵션을 설정하면, 부모가 삭제될 때 자식도 자동으로 삭제됩니다. 이는 보통 물리 삭제에서 사용됩니다.
- 애플리케이션 레벨 로직: 댓글 삭제에 있어 트랜잭션을 사용해 일관성 있는 상태를 유지할 수 있도록 추가적인 논리를 작성할 수도 있습니다. 즉, A가 물리적으로 삭제되면 B와 C도 삭제되도록 코드를 구성합니다.
참고 링크
비슷한 문제와 해결책을 다룬 유사한 기존 질문을 확인하실 수 있습니다:
- 댓글 시스템에서 고아 댓글 처리 방법 (게시글 제목)
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
consumer에서 에러가 발생할 경우 데이터 유실 문의
0
33
2
게시글 테스트 데이터 삽입
0
41
2
정렬, 필터, 검색 등의 조건이 붙을 경우 최적화할 수 있는 방법이 무엇이 있을까요?
0
91
2
좋아요 기능 정합성 보장 방법
0
86
2
좋아요 동시성처리 최적의 선택?
1
108
2
프론트엔드 msa 환경 api 주소 통합? 과 서버끼리 통신 방식에대해
0
82
2
안녕하세요 무한스크롤 강의듣다가 질문이 있습니다.
0
51
1
조회수 조회 로직 질문
1
59
2
비로그인 유저도 어뷰징 방지 정책
1
60
2
CommentServiceTest의 테스트 로직 질문
0
47
2
무한 스크롤 방식에서 페이지 번호 방식 쿼리의 문제점 의문
1
68
2
path 쿼리 관련 질문드립니다!
0
50
2
antigravity 에디터를 쓰신다면 종료해주세요
1
115
0
프로젝트 구조
0
79
2
article_like_count api test
0
65
2
이벤트 페이로드 객체의 생성 방식이 팩토리 메서드 패턴이 아닌 빌더 패턴인 이유가 궁금합니다!.
0
93
2
[33. 좋아요 수 구현] 에서 테스트 하는 화면 동시성 문제
0
81
2
findByPath에서 articleId로도 검색을 해야 할 것 같아요.
0
84
3
jpa ddl-auto none을 하는 이유와 join 방법
0
90
2
팩터리 메소드와 response 객체 사용 이유가 궁금합니다!
0
82
2
커서 기반 페이지네이션 과 무한 스크롤링
0
91
2
게시글 생성 로직에서 오류 발생시 redis 게시글 수 되돌리기
0
92
2
멀티 모듈이 아닌 MSA 환경에서 common
0
143
2
샤딩에 대해서 궁금점있습니다.
0
108
2

