Study/도메인 주도 개발 시작하기

chapter 01. 도메인 모델 패턴-1

hongeeii 2024. 2. 13. 22:47
728x90
반응형

아키텍처

네 개의 영역

표현, 응용, 도메인, 인프라스트럭처는 아키텍처를 설계할 때 출현하는 전형적인 네 가지 영역이다.
스크린샷 2024-02-09 오후 3 08 41

표현(presentation)영역은 사용자의 요청을 받아 응용(application) 영역에 전달하고 응용 영역의 처리 결과를 다시 사용자에게 보여주는 역할을 한다.
표현 영역의 사용자는 웹 브라우저를 사용하는 사람일 수도 있고, REST API를 호출하는 외부 시스템일 수도 있다.

표현 영역은 HTTP 요청을 응용 영역이 필요로 하는 형식으로 변환하여 전송한다.
표현 영역을 통해 사용자의 요청을 전달받는 응용 영역은 시스템이 사용자에게 제공해야 할 기능을 구현하는데 '주문 등록', '주문 취소', '상품 상세 조회'와 같은 기능 구현을 예로 들 수 있다.


응용 영역은 기능을 구현하기 위해 도메인 영역의 도메인 모델을 사용한다. 응용 서비스는 로직을 직접 수행하기보다는 도메인 모델에 로직 수행을 위임한다.
스크린샷 2024-02-09 오후 3 12 52

도메인 영역은 도메인 모델을 구현한다.
1장에서 봤던 Order, OrderLine, ShippingInfo와 같은 도메인 모델이 이 영역에 위치한다.
도메인 모델은 도메인의 핵심 로직을 구현한다.
주문 도메인은 '배송지 변경', '결제 완료', '주문 총액 계산'과 같은 핵심 로직을 도메인 모델에서 구현한다.


스크린샷 2024-02-09 오후 3 14 12

인프라스트럭처 영역은 구현 기술에 대한 것을 다룬다.
이 영역은 RDBMS 연동을 처리하고 메시징 큐에 메시지를 전송하거나 수신하는 기능을 구현하고, 몽고DB나 레디스와의 데이터 연동을 처리한다.
이 영역은 SMTP를 이용한 메일 발송 기능을 구현하거나 REST API를 호출하는 것도 처리한다.
인프라스트럭처 영역은 논리적인 개념을 표현한다기보다는 실제 구현을 다룬다.


도메인 영역, 응용 영역, 표현 영역은 구현 기술을 사용한 코드를 직접 만들지 않는다. 대신 인프라스트럭처 영역에서 제공하는 기능을 사용해서 필요한 기능을 개발한다. 예를 들어 응용 영역에서 DB에 보관된 데이터가 필요하면 인프라스트럭처 영역의 DB모듈을 사용하여 데이터를 읽어온다.

계층 구조 아키텍처

스크린샷 2024-02-09 오후 3 24 06

계층 구조는 그 특성상 상위 계층에서 하위 계층으로의 의존만 존재하고 하위 계층은 상위 계층에 의존하지 않는다.
하지만 구현의 편리함을 위해 계층 구조를 유연하게 적용하기도 한다.

스크린샷 2024-02-09 오후 3 25 50
class DroolsRuleEngine {
 // 계산
}

class CalculateService (
  private val ruleEngine: DroolsRuleEngine
){
  fun calculate(){
    // 전처리
    ruleEngine.execute()
    // 후처리
  }
}

표현, 응용, 도메인 계층이 상세한 구현 기술을 다루는 인프라스트럭처 계층에 종속된다.
그로 인해 문제점 발생한다.

  • 응용 계층만 테스트 하기 어렵다
    • 인프라스트럭처 클래스와 관련 설정 파일을 모두 만든 이후에 테스트 가능
  • 구현 방식을 변경하기 어렵다.
    • 이 상황에서 DroolsRuleEngine이 아닌 다른 구현 기술을 사용하려면 코드의 많은 부분을 고쳐야 한다.

=> 이 문제의 해소방법은 DIP에 있다.

728x90
반응형