성장 경험/트러블 슈팅

[트러블 슈팅] 다른 도메인을 직접 접근한 문제

Tarake 2025. 6. 18. 22:26

문제 상황

서비스 계층 클래스에서 다른 도메인 레포지토리 계층을 주입받아 사용했는데, 코드 리펙토링을 하는 과정에서 다음과 같은 문제가 발생하였습니다.

  • 각 도메인 간 책임이 분명하지 않음
  • 코드의 결합도가 높아져 확장성이 떨어짐
  • 코드 리펙토링 과정에서 코드 작성 원칙을 보며 해당 문제점을 인지

 

원인 분석

서비스 계층에서 도메인의 레포지토리를 직접 호출하는 방식은 계층 간 역할 분리 원칙을 위반

서비스는 오직 자신의 도메인에 대한 레포지토리만 직접 접근해야 하며, 다른 도메인의 데이터가 필요하면 해당 도메인의 서비스 계층을 통해 간접 접근해야 한다.

 

해결 방법

기존 코드

public class TestService {
    private final SessionRepository sessionRepository;
}

수정된 코드

public class TestService {
    private final SessionService sessionService;
}

 

회고 및 배운 점

  • 각 계층은 자신의 책임 범위 내에서만 동작하도록 설계해야 유지 보수가 쉽다는 점
  • 서비스 계층 → 서비스 계층으로 의존하도록 설계하면 각 도메인의 책임이 명확해지고 테스트와 리펙토링이 쉬워진다는 점
  • 직접 접근 간접 위임이 더 나은 구조를 만든다는 점