배치 작업과 JPA 연관관계 문제 해결 및 개선

생성일
2025/01/31 06:45
BE
날짜
2024/12/23
담당자

문제 상황

모집 기한이 지난 모집글이 자동으로 취소되지 않거나 삭제되지 않는 문제 발생.

원인

엔티티 연관관계 설정 문제
Study 엔티티에서 @OneToOne을 사용해 StudyPost와 단방향으로 연관을 맺고 있었으나, 관계를 다대일(@ManyToOne)로 변경해야 하는 상황이었음.
StudyPost 엔티티에서 연관된 StudySignupStudy 데이터를 처리하기 위한 설정(@OneToMany)이 없었음.
Cascade 설정 누락 및 배치 로직 오류
연관 데이터 삭제를 처리하는 과정에서 CascadeType.REMOVEorphanRemoval = true 설정이 누락되어 있었음.
배치 작업 실행 시 연관된 데이터가 삭제되지 않아 작업이 중단되거나 일부 로직이 실행되지 않음.
BatchConfig 및 실행 환경 문제
배치 작업이 애플리케이션 시작 시 제대로 실행되지 않았고, 수동 실행을 위한 매커니즘이 부족했음.

해결

엔티티 연관관계 수정
Study 엔티티
@OneToOne 관계를 제거하고, @ManyToOne(fetch = FetchType.LAZY)로 수정하여 StudyPost와 다대일 관계를 설정.
StudyPost 엔티티
StudySignupStudy 엔티티와 연관된 데이터 삭제를 처리하기 위해 @OneToMany 관계 추가.
CascadeType.REMOVEorphanRemoval = true를 사용하여 연관 데이터를 자동으로 삭제.
애플리케이션 시작 시 배치 작업 실행 환경의 필요성을 알게됨.
수동 실행 클래스(BatchManualExecutor)를 작성함으로써 배치 작업을 테스트하거나 실행할 수 있는 유연성을 확보할 수 있었음.
애플리케이션 시작 시 배치 작업의 실행 여부와 관련된 로깅이 문제 해결에 큰 도움이 됨을 확인.