feat: Spring Batch 기반 연관 엔티티 삭제 및 하드 딜리트 기능 추가(#64)#69
Merged
chaiminwoo0223 merged 1 commit intodevelopfrom Sep 17, 2025
Merged
feat: Spring Batch 기반 연관 엔티티 삭제 및 하드 딜리트 기능 추가(#64)#69chaiminwoo0223 merged 1 commit intodevelopfrom
chaiminwoo0223 merged 1 commit intodevelopfrom
Conversation
c491d09 to
d4b9a42
Compare
97fb7f2 to
60ebf5e
Compare
Contributor
Author
hisonghy
reviewed
Sep 15, 2025
Contributor
hisonghy
left a comment
There was a problem hiding this comment.
정말 고생많으셨습니다.
작업 내용보면서 코드 리뷰 작성해두었습니다. 확인 부탁드려요!
src/main/java/com/ject/studytrip/member/application/service/MemberService.java
Show resolved
Hide resolved
src/main/java/com/ject/studytrip/member/infra/querydsl/MemberQueryRepositoryAdapter.java
Outdated
Show resolved
Hide resolved
src/main/java/com/ject/studytrip/cleanup/application/facade/HardDeleteFacade.java
Show resolved
Hide resolved
src/main/java/com/ject/studytrip/cleanup/application/executor/HardDeleteExecutor.java
Show resolved
Hide resolved
hisonghy
approved these changes
Sep 17, 2025
Contributor
hisonghy
left a comment
There was a problem hiding this comment.
고생많으셨습니다!
커밋 정리 후 병합부탁드려요~
아 그리고 아직 확인 못하신 코드 리뷰 2개 확인부탁드려요!
src/main/java/com/ject/studytrip/member/infra/querydsl/MemberQueryRepositoryAdapter.java
Outdated
Show resolved
Hide resolved
* feat: PomodoroQueryRepository, PomodoroQueryRepositoryAdapter 구현 * feat: DailyGoalQueryRepository, DailyGoalQueryRepositoryAdapter 구현 * feat: HardDeleteExecutor, HardDeleteFacade 구현 * feat: MemberQueryRepository에 deleteAllByDeletedAtIsNotNull 메서드 추가 * feat: TripQueryRepository에 deleteAllByDeletedAtIsNotNull, deleteAllByDeletedMemberOwner 메서드 추가 * feat: StampQueryRepository에 deleteAllByDeletedAtIsNotNull, deleteAllByDeletedTripOwner 메서드 추가 * feat: MissionQueryRepository에 deleteAllByDeletedAtIsNotNull, deleteAllByDeletedStampOwner 메서드 추가 * feat: DailyMissionQueryRepository에 deleteAllByDeletedAtIsNotNull 메서드 추가 * feat: DailyMissionQueryRepository에 deleteAllByDeletedMissionOwner 메서드 추가 * feat: DailyMissionQueryRepository에 deleteAllByDeletedDailyGoalOwner 메서드 추가 * feat: StudyLogDailyMissionQueryRepository에 deleteAllByDeletedAtIsNotNull 메서드 추가 * feat: StudyLogDailyMissionQueryRepository에 deleteAllByDeletedDailyMissionOwner 메서드 추가 * feat: StudyLogDailyMissionQueryRepository에 deleteAllByDeletedStudyLogOwner 메서드 추가 * feat: StudyLogQueryRepository에 deleteAllByDeletedAtIsNotNull 메서드 추가 * feat: StudyLogQueryRepository에 deleteAllByDeletedMemberOwner, deleteAllByDeletedDailyGoalOwner 메서드 추가 * feat: MemberService에 hardDeleteMembers 메서드 추가 * feat: TripService에 hardDeleteTrips, hardDeleteTripsOwnedByDeletedMember 메서드 추가 * feat: StampService에 hardDeleteStamps, hardDeleteStampsOwnedByDeletedTrip 메서드 추가 * feat: MissionService에 hardDeleteMissions, hardDeleteMissionsOwnedByDeletedStamp 메서드 추가 * feat: DailyMissionService에 hardDeleteDailyMissions 메서드 추가 * feat: DailyMissionService에 hardDeleteDailyMissionsOwnedByDeletedMission 메서드 추가 * feat: DailyMissionService에 hardDeleteDailyMissionsOwnedByDeletedDailyGoal 메서드 추가 * feat: StudyLogDailyMissionService에 hardDeleteStudyLogDailyMissions 메서드 추가 * feat: StudyLogDailyMissionService에 hardDeleteStudyLogDailyMissionsOwnedByDeletedDailyMission 메서드 추가 * feat: StudyLogDailyMissionService에 hardDeleteStudyLogDailyMissionsOwnedByDeletedStudyLog 메서드 추가 * feat: StudyLogService에 hardDeleteStudyLogs 메서드 추가 * feat: StudyLogService에 hardDeleteStudyLogsOwnedByDeletedMember 메서드 추가 * feat: StudyLogService에 hardDeleteStudyLogsOwnedByDeletedDailyGoal 메서드 추가 * feat: PomodoroService에 hardDeletePomodoros, hardDeletePomodorosOwnedByDeletedDailyGoal 메서드 추가 * feat: DailyGoalService에 hardDeleteDailyGoals, hardDeleteDailyGoalsOwnedByDeletedTrip 메서드 추가 * chore: BatchJobConfig 추가 * chore: applicaiton-flyway.yml 구현 * chore: application.yml에 flyway 프로필 설정 추가 * chore: local, test, dev, prod 프로필 환경에서 flyway 설정 제거 * chore: application-batch.yml 추가 * chore: application-datasource.yml에 * chore: V2__create_batch_meta_tables.sql 추가 * chore: SchedulerConfig에 hardDeleteJob 스케줄링 추가 * test: MemberServiceTest에 HardDeleteMembers 단위 테스트 추가 * test: TripServiceTest에 HardDeleteTrips, HardDeleteTripsOwnedByDeletedMember 단위 테스트 추가 * test: StampServiceTest에 HardDeleteStamps, HardDeleteStampsOwnedByDeletedTrip 단위 테스트 추가 * test: MissionServiceTest에 HardDeleteMissions, HardDeleteMissionsOwnedByDeletedStamp 단위 테스트 추가 * test: DailyMissionServiceTest에 HardDeleteDailyMissions 단위 테스트 추가 * test: DailyMissionServiceTest에 HardDeleteDailyMissionsOwnedByDeletedMission 단위 테스트 추가 * test: DailyMissionServiceTest에 HardDeleteDailyMissionsOwnedByDeletedDailyGoal 단위 테스트 추가 * test: StudyLogDailyMissionServiceTest에 HardDeleteStudyLogDailyMissions 단위 테스트 추가 * test: StudyLogDailyMissionServiceTest에 HardDeleteStudyLogDailyMissionsOwnedByDeletedDailyMission 단위 테스트 추가 * test: StudyLogDailyMissionServiceTest에 HardDeleteStudyLogDailyMissionsOwnedByDeletedStudyLog 단위 테스트 추가 * test: StudyLogServiceTest에 HardDeleteStudyLogs 단위 테스트 추가 * test: StudyLogServiceTest에 HardDeleteStudyLogsOwnedByDeletedMember 단위 테스트 추가 * test: StudyLogServiceTest에 HardDeleteStudyLogsOwnedByDeletedDailyGoal 단위 테스트 추가 * test: PomodoroServiceTest에 HardDeletePomodoros, HardDeletePomodorosOwnedByDeletedDailyGoal 단위 테스트 추가 * test: DailyGoalServiceTest에 HardDeleteDailyGoals, HardDeleteDailyGoalsOwnedByDeletedTrip 단위 테스트 추가
3e62f3e to
89a012f
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

📌 작업 내용 및 특이사항
✅ 하드 딜리트 배치 동작
매일 04시에 소프트 삭제된 데이터와 상위 리소스가 삭제된 종속 데이터를 완전 삭제deletedAt IS NOT NULLOR 소유 관계의 상위 엔티티가 삭제된 경우HardDeleteSummary)✅ 하드 딜리트 배치 설정
application-batch.yml추가V2__create_batch_meta_tables.sql추가(배치 메타테이블 생성)✅ 하드 딜리트 구성 요소
BatchJobConfig:hardDeleteJob,hardDeleteStep,hardDeleteTasklet정의SchedulerConfig:매일 04시에 hardDeleteJob 실행✅ 하드 딜리트 기능
com.ject.studytrip.cleanup 패키지에 하드 딜리트 기능 구현HardDeleteExecutor: 자식→부모 원칙, 페이즈 기반 삭제 순서·경계 관리HardDeleteFacade: 배치 진입점, 삭제 실행✅ QueryDSL 삭제 리포지토리 구현
PomodoroQueryRepository,PomodoroQueryRepositoryAdapter구현DailyGoalQueryRepository,DailyGoalQueryRepositoryAdapter구현✅ 리포지토리 메서드 추가
MemberQueryRepository:deleteAllByDeletedAtIsNotNull메서드 추가TripQueryRepository:deleteAllByDeletedAtIsNotNull,deleteAllByDeletedMemberOwner메서드 추가StampQueryRepository:deleteAllByDeletedAtIsNotNull,deleteAllByDeletedTripOwner메서드 추가MissionQueryRepository:deleteAllByDeletedAtIsNotNull,deleteAllByDeletedStampOwner메서드 추가DailyMissionQueryRepository:deleteAllByDeletedAtIsNotNull,deleteAllByDeletedMissionOwner,deleteAllByDeletedDailyGoalOwner메서드 추가StudyLogDailyMissionQueryRepository:deleteAllByDeletedAtIsNotNull,deleteAllByDeletedDailyMissionOwner,deleteAllByDeletedStudyLogOwner메서드 추가StudyLogQueryRepository:deleteAllByDeletedAtIsNotNull,deleteAllByDeletedMemberOwner,deleteAllByDeletedDailyGoalOwner메서드 추가✅ 서비스 메서드 추가
MemberService:hardDeleteMembers메서드 추가TripService:hardDeleteTrips,hardDeleteTripsOwnedByDeletedMember메서드 추가StampService:hardDeleteStamps,hardDeleteStampsOwnedByDeletedTrip메서드 추가MissionService:hardDeleteMissions,hardDeleteMissionsOwnedByDeletedStamp메서드 추가DailyMissionService:hardDeleteDailyMissions,hardDeleteDailyMissionsOwnedByDeletedMission,hardDeleteDailyMissionsOwnedByDeletedDailyGoal메서드 추가StudyLogDailyMissionService:hardDeleteStudyLogDailyMissions,hardDeleteStudyLogDailyMissionsOwnedByDeletedDailyMission,hardDeleteStudyLogDailyMissionsOwnedByDeletedStudyLog메서드 추가hardDeleteStudyLogs,hardDeleteStudyLogsOwnedByDeletedMember,hardDeleteStudyLogsOwnedByDeletedDailyGoal메서드 추가PomodoroService:hardDeletePomodoros,hardDeletePomodorosOwnedByDeletedDailyGoal메서드 추가DailyGoalService:hardDeleteDailyGoals,hardDeleteDailyGoalsOwnedByDeletedTrip메서드 추가✅ 단위 테스트 추가
MemberServiceTest:HardDeleteMembers단위 테스트 추가TripServiceTest:HardDeleteTrips,HardDeleteTripsOwnedByDeletedMember단위 테스트 추가StampServiceTest:HardDeleteStamps,HardDeleteStampsOwnedByDeletedTrip단위 테스트 추가MissionServiceTest:HardDeleteMissions,HardDeleteMissionsOwnedByDeletedStamp단위 테스트 추가DailyMissionServiceTest:HardDeleteDailyMissions,HardDeleteDailyMissionsOwnedByDeletedMission,HardDeleteDailyMissionsOwnedByDeletedDailyGoal단위 테스트 추가StudyLogDailyMissionServiceTest:HardDeleteStudyLogDailyMissions,HardDeleteStudyLogDailyMissionsOwnedByDeletedDailyMission,HardDeleteStudyLogDailyMissionsOwnedByDeletedStudyLog단위 테스트 추가StudyLogServiceTest:HardDeleteStudyLogs,HardDeleteStudyLogsOwnedByDeletedMember,HardDeleteStudyLogsOwnedByDeletedDailyGoal단위 테스트 추가PomodoroServiceTest:HardDeletePomodoros,HardDeletePomodorosOwnedByDeletedDailyGoal단위 테스트 추가DailyGoalServiceTest:HardDeleteDailyGoals,HardDeleteDailyGoalsOwnedByDeletedTrip단위 테스트 추가🌱 관련 이슈
🔍 참고사항(선택)
application-flyway.yml을 추가하여,local,test,dev,prod프로필 환경에서 flyway 설정 제거📚 기타(선택)