Project) Bean 순환 참조를 피하기 위한 설계 방안.

Wonjun Lee·2025년 8월 8일

서비스 클래스 간의 순환 참조.

최근 수행 중인 프로젝트에서 QnaService와 CourseService 간의 순환 참조를 해결한 사례를 남겨봄.

문제.

QnaService에서 CourseService를 통해 Course 엔티티를 쿼리하고, 이 코스가 종료된 코스인지를 검토하는 로직이 있었음.

CourseService에서도 QnaService를 통해 등록된 Qna를 제거해야 했는데, 이 때문에 서로 상대방의 빈을 주입받으려해 생성 시점이 엉키는 문제가 발생함.

해결

Query용 서비스와 Management용 서비스를 분할하여 해결함.
Query 서비스에서는 오직 쿼리만 담당하고, Management 서비스에서 삽입, 삭제, 갱신 등 업데이트 연산을 제공하여 책임을 나눔.

이를 통해 조작 과정 중 조회 기능이 필요해도 다른 도메인의 서비스를 부담없이 주입받을 수 있었음.

물론 궁극적인 해결책은 아니나 괜찮은 패턴 같아서 적어둠.

profile
Samsung Electronics. SW Engineering.

0개의 댓글