도메인 주도 개발 정리 2.

Mong·2023년 7월 3일

DDD

목록 보기
2/3

2.1 네 개의 영역

  • 애플리케이션의 아키텍쳐는 '표현', '응용', '도메인', '인프라스트럭쳐' 4가지의 영역으로 구성된다.
  • 표현 영역은 사용자의 요청을 해석해서 응용 영역에 전달하고 응용 영역의 처리 결과를 사용자에게 응답한다.
  • 응용 영역은 도메인 모델을 이용하여 기능을 구현한다.
  • 도메인 영역은 도메인 모델을 구현한다. 도메인 모델은 도메인의 핵심 로직을 구현한다.
  • 인프라스트럭쳐 영역은 구현 기술을 다룬다.

핵심로직은 응용영역에서 직접 수행하지 않고 도메인 모델에서 구현한 기능을 호출한다

2.2 계층 구조 아키텍처

  • 표현 -> 응용 -> 도메인 -> 인프라스트럭처
  • 계층 구조 특성상 상위 계층은 하위 계층에 의존하는 구조이며, 구현의 편리함으로 인해서 그 구조가 유현하게 적용될 때가 있다.
  • 어느 한 영역에 의존하는 경우, 코드의 변경이 발생할 때 많은 부분을 고쳐야하고 비용이 발생한다.(기능 확장성 떨어짐. 테스트 코드 짜기 어려워짐)

2.3 DIP(중요)

  • 고수준 모듈은 의미있는 단일 기능만을 제공하는 모듈이다.
  • 저수준 모듈은 고수준 모듈의 기능을 구현하기 위한 목적의 하위 기능으로 구성된 모듈이다.
  • 위와 같은 개념으로 고수준 모듈이 제대로 동작하기 위해서는 저수준 모듈을 사용해야 하므로 구현의 변경과 테스트가 어려워지는 문제가 발생한다.
  • DIP를 활용하여 저수준 모듈이 고수준 모듈에 의존하도록 한다.(추상화된 인터페이스 방식 사용)
  • 고수준 모듈에서는 추상화한 인터페이스에 의존하도록 한다.
  • 고수준 모듈에서 의존하는 인터페이스는 고수준 모듈에 속한다.(고수준 모듈이 그저 고수준 모듈을 사용)
  • 실제 구현될 고수준의 하위 기능은 의존하는 인터페이스를 상속받아 세부 기능을 구현하므로 저수준 모듈에 속한다.
  • 상속은 의존의 다른 형태이므로, 저수준 모듈이 고수준 모듈에 의존한다는 결론이 나온다.(-> DIP)
  • DIP(Dependency Inversion Principle, 의존 역전 원칙)
  • 구현 기술(상속 받은 하위 기능 구현된 저수준 모듈)을 변경하더라도 인터페이스를 의존하므로 고수준 모듈은 변경이 필요없다.
  • 이로 인해 테스트도 용이.
  • DIP라는 의존 역전으로 단순히 인터페이스와 구현 클래스를 분리하는 의미로 사용하면 안된다. 하위 기능을 추상화한 인터페이스는 고수준 모듈 관점에서 도출하는 것이 중요하다. 추상화한 인터페이스가 고수준 모듈이 아닌 저수준 모듈이 되지 않도록 조심해야 한다.
  • 인프라스트럭쳐 영역은 구현 기술을 다루는 저수준 모듈이고 응용 영역과 도메인 영역은 고수준 모듈이다.

참고 : 도메인 주도 개발 시작하기(최범균님 지음)

0개의 댓글