DDD Start 2장

2018, Dec 11    

아키텍처 개요


네 개의 영역

1장에서 언급된 바와 같이 아키텍처를 설계할때 ‘표현(UI, presentaion)’, ‘응용(application)’, ‘도메인(domain)’, ‘인프라스트럭처(infrastrueture)’의 네 개의 계층으로 나누는 것이 전형적인 패턴이다.

게층 구조는 그 특성상 상위 계층에서 하위 계층으로의 의존만 존재하고 하위 계층은 상위 계층에 의존하지 않는다.
예를 들어, 표현 계층은 응용 계층에 의존하고 응용 계층은 도메인 계층에 의존하지만, 반대로 인프라 계층이 도메인에
의존하거나 도메인이 응용 계층에 의존하지는 않는다.

특히 presentation, application 계층에서 상세한 구현 기술을 다루는 인프라스트럭처 계층에 종속된다는 점을 주목할 필요가 있다.

  • 응용서비스 계층에서 인프라 계층에 직접적으로 종속되어 있는 경우 아래와 같은 문제가 있다.
    • 해당 서비스 자체에 대한 테스트가 어렵다.
    • 사용하는 인프라 대상에 따라 서비스가 매우 의존적이 된다.(예를 들어 json파일에서 데이터를 가져 오는 객체를 사용하였다가 rdb로 데이터 형식이 변경되면 그 객체를 사용하는 응용 서비스의 코드에 미치는 영향이 크다.)

DIP(dependency inversion priciple)

  • 고수준 모듈 : 고수준 모듈은 의미 있는 단일 기능을 제공하는 모듈이다.
    예를 들어, 할인 가격을 계산하는 것과 같은 서비스는 고수준 모듈이다. !(/blog/assets/img/pattern/ddd-dp.png)
  • 고수준 모듈은 기능을 수행하기 위해 저수준 모듈을 사용해야 하는데, 고수준 모듈이 저수준 모듈을 사용하면 위에서 언급했던 구현변경과 테스트의 어려움이 있다.