Conversation
📝 WalkthroughWalkthrough회원 탈퇴 시 다국어 번역 데이터를 포함한 관련 정보가 제대로 삭제되지 않는 문제를 수정합니다. MemberDeletionService에 여러 저장소를 주입하고, 회원 삭제 전에 MemberTerm 및 다양한 번역 엔티티의 레코드를 대량 삭제하도록 변경했습니다. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
src/main/java/org/sopt/kareer/domain/member/service/MemberDeletionService.java (1)
41-59: 성능 최적화 고려사항 (선택 사항)Spring Data JPA의 파생
deleteAllBy...메서드는 내부적으로 엔티티를 먼저 조회한 후 개별적으로 삭제합니다. 회원당 번역 레코드가 많은 경우 성능 저하가 발생할 수 있습니다.대량 데이터가 예상되는 경우
@Modifying@Query``를 사용한 벌크 DELETE 쿼리로 전환을 고려해 볼 수 있습니다:♻️ 예시: 벌크 DELETE 쿼리
// Repository 예시 `@Modifying` `@Query`("DELETE FROM PhaseTranslation pt WHERE pt.phase.member.id = :memberId") void bulkDeleteByMemberId(`@Param`("memberId") Long memberId);🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/main/java/org/sopt/kareer/domain/member/service/MemberDeletionService.java` around lines 41 - 59, The current deleteMember flow uses Spring Data derived deleteAllBy... methods (phaseActionGuidelineTranslationRepository.deleteAllByGuideline_PhaseAction_Phase_Member_Id, phaseActionMistakeTranslationRepository.deleteAllByMistake_PhaseAction_Phase_Member_Id, actionItemTranslationRepository.deleteAllByActionItem_Member_Id, phaseActionTranslationRepository.deleteAllByPhaseAction_Phase_Member_Id, phaseTranslationRepository.deleteAllByPhase_Member_Id, phaseActionGuidelineRepository.deleteAllByPhaseAction_Phase_Member_Id, phaseActionMistakeRepository.deleteAllByPhaseAction_Phase_Member_Id, actionItemRepository.deleteAllByMemberId, phaseActionRepository.deleteAllByPhase_Member_Id, phaseRepository.deleteAllByMember_Id, jobPostingBookmarkRepository.deleteAllByMemberId, memberTermRepository.deleteAllByMemberId, memberVisaRepository.deleteAllByMemberId) which can trigger N+1 loads; replace the heavy ones with repository bulk delete methods using `@Modifying` `@Query` JPQL/SQL that performs DELETE ... WHERE ... = :memberId (e.g. add bulkDeleteByMemberId variants in the corresponding repositories), annotate those repository methods with `@Modifying` and `@Transactional` (or call them from the service transaction), and call the new bulk methods from deleteMember instead of the derived deleteAllBy... methods to avoid loading entities into memory.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In
`@src/main/java/org/sopt/kareer/domain/member/service/MemberDeletionService.java`:
- Around line 41-59: The current deleteMember flow uses Spring Data derived
deleteAllBy... methods
(phaseActionGuidelineTranslationRepository.deleteAllByGuideline_PhaseAction_Phase_Member_Id,
phaseActionMistakeTranslationRepository.deleteAllByMistake_PhaseAction_Phase_Member_Id,
actionItemTranslationRepository.deleteAllByActionItem_Member_Id,
phaseActionTranslationRepository.deleteAllByPhaseAction_Phase_Member_Id,
phaseTranslationRepository.deleteAllByPhase_Member_Id,
phaseActionGuidelineRepository.deleteAllByPhaseAction_Phase_Member_Id,
phaseActionMistakeRepository.deleteAllByPhaseAction_Phase_Member_Id,
actionItemRepository.deleteAllByMemberId,
phaseActionRepository.deleteAllByPhase_Member_Id,
phaseRepository.deleteAllByMember_Id,
jobPostingBookmarkRepository.deleteAllByMemberId,
memberTermRepository.deleteAllByMemberId,
memberVisaRepository.deleteAllByMemberId) which can trigger N+1 loads; replace
the heavy ones with repository bulk delete methods using `@Modifying` `@Query`
JPQL/SQL that performs DELETE ... WHERE ... = :memberId (e.g. add
bulkDeleteByMemberId variants in the corresponding repositories), annotate those
repository methods with `@Modifying` and `@Transactional` (or call them from the
service transaction), and call the new bulk methods from deleteMember instead of
the derived deleteAllBy... methods to avoid loading entities into memory.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: ae39bc03-79d3-4fd5-87e0-1141db656742
📒 Files selected for processing (7)
src/main/java/org/sopt/kareer/domain/member/repository/MemberTermRepository.javasrc/main/java/org/sopt/kareer/domain/member/service/MemberDeletionService.javasrc/main/java/org/sopt/kareer/domain/roadmap/repository/ActionItemTranslationRepository.javasrc/main/java/org/sopt/kareer/domain/roadmap/repository/PhaseActionGuidelineTranslationRepository.javasrc/main/java/org/sopt/kareer/domain/roadmap/repository/PhaseActionMistakeTranslationRepository.javasrc/main/java/org/sopt/kareer/domain/roadmap/repository/PhaseActionTranslationRepository.javasrc/main/java/org/sopt/kareer/domain/roadmap/repository/PhaseTranslationRepository.java
Related issue 🛠
Work Description 📝
ScreenShots 📷
To Reviewers 📢
Summary by CodeRabbit
Bug Fixes