https://github.com/jihwanprogramer/NewSfeed
GitHub - jihwanprogramer/NewSfeed
Contribute to jihwanprogramer/NewSfeed development by creating an account on GitHub.
github.com
나는 많은 기능 중에 댓글 기능을 맡아 구현을 진행하였다.
📌 주요 기능
- 댓글 생성
- 댓글 조회
- 댓글 수정
- 댓글 삭제
- 페이징 처리된 댓글 목록 조회
- orphanRemoval을 활용한 자동 삭제 처리
✅ DTO
- CommentSaveRequestDto: 저장 요청
- CommentUpdateRequestDto: 수정 요청
- CommentResponseDto: 단일 댓글 응답
- CommentPageResponseDto: 페이지네이션용 응답
기본적인 CRUD와 페이징 기능구현은 다른 글에서 많이 다루고 기초적인것이므로 이번에는 Cascade 와 orphanRemoval 을 활용한 자동 삭제 처리 기능을 집중적으로 적어볼려고한다.
🧱 Entity 설계
✅ Board 엔티티 일부
@OneToMany(mappedBy = "board", cascade = CascadeType.REMOVE, orphanRemoval = true)
private List<Comment> comments = new ArrayList<>();
- cascade = REMOVE: 게시글 삭제 시 댓글도 함께 삭제됨
- orphanRemoval = true: 댓글 리스트에서 제거되면 DB에서도 삭제됨 → 별도 CommentRepository.delete() 호출 없이도 자동 삭제 가능
✅ Comment 엔티티
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "board_id")
private Board board;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;
@OneToMany(mappedBy = "comment", cascade = CascadeType.REMOVE)
private final List<CommentLike> commentLike = new ArrayList<>();
- cascade = CascadeType.REMOVE : 댓글 삭제시 댓글 좋아요도 함께 삭제됨
📎 마무리
- orphanRemoval = true의 진짜 활용법: 연관 엔티티 자동 삭제로 리포지토리 호출 최소화
- 게시판 삭제만으로 댓글까지 자동 삭제되는 구조 설계
- 정리된 책임 분리와 클린 코드 설계
'프로젝트 > 프로젝트 회고' 카테고리의 다른 글
[팀 프로젝트-배달어플] 기능 구현 (0) | 2025.04.29 |
---|---|
[팀 프로젝트-배달어플] S.A 작성 (0) | 2025.04.23 |
[팀 프로젝트-JPA 활용 게시판] branch 전략 및 패키지 구조 (1) | 2025.04.14 |
[팀 프로젝트-JPA 활용 게시판] S.A 작성 (0) | 2025.04.09 |
[일정관리]일정 수정 및 삭제 (0) | 2025.03.26 |