본문 바로가기

BackEnd/spring

도메인 구현과 DIP

반응형

구현 기술에 대한 의존 없이 도메인을 순수하게 유지하려면 스프링 데이타 JPA의. Repository 인터페이스를 상속받지 않도록 해야하며
인터페이스를 도메인에 두고 구현한 클래스를 아래 그림과 같이 인프라에 위치 시켜야 한다.

특정 기술에 의존하지 않는 순수한 도메인 모델을 추구하는 구조

DIP를 적용하는 주된 이유는 저수준 구현이 변경되더라도 고수준이 영향을 받지 않도록 하기 위함이다.
하지만 리포지터리와 도메인 모델의 구현 기술은 거의 바뀌지 않는다.
저자는 JPA로 구현한 리포지터리 구현기술을 마이바티스나 다른기술로 변경한적이 없고, RDMS를 사용하다 몽고DB로 변경한 적도 없다고 한다.

이렇게 변경이 거의 없는 상황에 변경을 미리 대비하는것은 과하다고 생각한다.
그래서 저자는 에그리커트, 리포지터리등 도메인 모델을 구현할때 타협을 했다.

JPA 전용 에너테이션을 사용하긴 했지만 도메인 모델을 단위 테스트 하는데 문제는 없다
리파지토리도 마찬가지다 스프링 데이타 JPA가 제공하는 Repository 인터페이스를 상속하고 있지만 리퍼지터리 자체는
인터페이스이고 테스트 가능성을 해지지 않는다.

DIP를 완벽하게 지키면 좋겠지만 개발 편의성과 실용성을 가져가면서 구조적인 유연함은 어느 정도 유지 한다.
복잡도를 높이지 않으면서 기술에 따른 구현 제약이 낮다면 합리적인 선택이다


참고 서적 : 도메인 주도 개발 시작하기(2022 재출간판) P 171~172

반응형