////
Search

2장 - 아키텍처 개요

Created
2022/09/03 11:27
Tags

2.1 네 개의 영역

표현, 응용, 도메인, 인프라스트럭처는 아키텍처를 설계할 때 출현하는 전형적인 네 가지 영역이다
웹 애플리케이션에서 표현 영역의 사용자는 웹 브라우저를 사용하는 사람일 수도 있고, REST API를 호출하는 외부 시스템일 수 있다.
표현 영역 = 사용자의 요청을 전달 받는 응용 영역은 시스템이 사용자에게 제공해야 할 기능을 구현
응용 서비스는 로직을 직접 수행하기보다는 도메인 모델에 로직 수행을 위임한다.
주문 도메인은 핵심 로직을 도메인 모델에서 구현한다.
인프라스트럭처 영역은 구현 기술에 대한 것을 다룬다.
인프라스트럭처 영역은 논리적 개념을 표현하기보다는 실제 구현을 다룬다.
도메인/응용/표현 영역은 구현 기술을 사용한 코드를 직접 만들지 않는다. 대신 인프라스트럭처 영역에서 제공하는 기능을 사용해 필요한 기능을 개발한다.

2.2 계층 구조의 아키텍처

계층 구조는 그 특성상 상위 계층에서 하위 계층으로의 의존만 존재하고 하위 계층을 상위 계층에 의존하지 않는다.
계층 구조를 엄격하게 적용하면? 상위 계층은 바로 아래 계층에만 의존을 가져야 함
현리함을 위해 계층 구조를 유연하게 적용하기도 함
계층 구조에 따른 도메인과 응용 계층은 룰 엔진과 DB 연동을 위해 인프라스트럭처 모듈에 의존한다.
단, 표현/응용/도메인 계층이 상세한 구현 기술을 다루는 인프라스트럭처 계층에 종속된다.
인프라스트럭처에 의존하면 ‘테스트의 어려움과’, ‘기능확장의 어려움’ 이라는 두 가지 문제가 발생한다.

2.3 DIP

고수준 모듈은 의미 있는 단일 기능을 제공하는 모듈로 CalculateDiscountService는 가격 할인 계산이라는 기능을 구현한다.
고수준 모듈의 기능을 구현하기 위해 여러 하위 기능이 필요하다.
가격 할인 계산 기능을 구현하려면 고객 정보를 구해야 하고 룰을 실행해야 하는데 이 두 기능이 하위 기능이다.
저수준 모듈은 하위 기능을 실제로 구현한 것이다.
DIP는 저수준 모듈이 고수준 모듈에 의존하도록 바꾼다.
DIP를 이루게 하기 위해서는 추상화한 인터페이스를 이용해야 한다.

DIP와 아키텍처

인프라스트럭처 영역은 구현 기술을 다루는 저수준 모듈이고 응용 영역과 도메인 영역은 고수준 모듈이기 때문에 DIP를 적용하면 위와 같이 인프라스트럭처 영역이 응용 영역과 도메인 영역에 의존하는 구조가 된다.
인프라스트럭처에 위치한 클래스가 도메인이나 응용 영역에 정의한 인터페이스를 상속받아 구현하는 구조가 되므로 도메인과 응용 영역에 대한 영향을 주지 않거나 최소화 하며 구현 기술을 변경하는 것이 가능하다.

2.4 도메인 영역의 주요 구성요소

엔티티
고유의 식별자를 갖는 객체로 자신의 라이프 사이클을 갖는다.
밸류
고유의 식별자를 갖지 않는 객체로 주로 개념적으로 하나인 값을 표현할 때 사용된다.
애그트리거스
연관된 엔티티와 밸류 객체를 개념적으로 하나로 묶은 것이다.
리포지터리
도메인 모델의 영속성을 처리한다.
도메인 서비스
특정 엔티티에 속하지 않은 도메인 로직을 제공한다.
엔티티와 밸류
도메인 모델의 엔티티는 단순히 데이터를 담고 있는 데이터 구조라기보다는 데이터와 함께 기능을 제공하는 객체이다.
도메인 관점에서 기능을 구현하고 기능 구현을 캡슐화해서 데이터가 임의로 변경되는 것을 막는다.