inflearn logo
강의

Course

Instructor

Learning Large-Scale System Design by Building Directly with Spring Boot - Bulletin Board

Comment List API Implementation - Maximum 2 Depths

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

Resolved

69

pryeok

2 asked

0

CommonService 클래스 부분에서

image.png


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

EX)

루트 댓글 A(논리삭제)

ㄴ 댓글 B

ㄴ 대댓글 C

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

루트 댓글 A(물리삭제)

ㄴ 댓글 B(물리삭제)

ㄴ 대댓글 C

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

 

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

 

java mysql spring-boot kafka redis

Answer 2

0

kuke

박력님, 안녕하세요!

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

 

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

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

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

0

communityai8509

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

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

문제 이해

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

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

해결 방향

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

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