Chapter 2 아키텍처 개요
2.1 네 개의 영역
∘ 아키텍처를 설계할 때 표현, 응용, 도메인, 인프라스트럭처가 필요
- 표현 영역(UI 영역) : 사용자의 요청을 받아 응용 영역에 전달함, 응용 영역의 처리 결과를 사용자에게 보여줌
- 응용 영역 : 시스템이 사용자에게 제공해야 할 기능을 구현함, 도메인 영역의 도메인 모델 사용
- 도메인 영역 : 도메인 모델을 구현함
- 인프라스트럭터 영역 : 기술의 실제 구현
2.2 계층 구조 아키텍처
∘ 계층 구조의 아키텍처가 많이 사용됨. 계층 구조에서는 상위 계층에서 하위 계층으로의 의존만 존재하고 하위 계층은 상위 계층에 의존하지 않음
∘ 인프라스트럭처에 의존하면 ’많은 것을 만들고 나서야 테스트를 해볼 수 있다는 어려움‘, ’기능 확장의 어려움‘이 발생함
2.3 DIP
∘ DIP(Dependency Inversion principle)는 계층 구조 아키텍처의 문제를 해결하기 위해 추상화한 인터페이스를 이용해서 저수준 모듈이 고수준 모듈에 의존하도록 바꿈
∘ 고수준 모듈인 인터페이스를 구현한 것은 저수준 모듈에 속함
∘ 테스트의 어려움 -> 대역 이용해서 테스트 가능
2.3.1 DIP 주의사항
∘ 인터페이스를 추출해서 DIP의 구조만 만든다고 해결되는 게 아님. 인터페이스 추출했는데 고수준 모듈이 저수준 모듈에 의존하면 해결 안 된 것.
2.3.2 DIP와 아키텍처
∘ DIP를 적용하면 인프라스트럭처 영역이 응용 영역과 도메인 영역에 의존(상속)하는 구조
∘ 기술 변경시 도메인, 응용 영역에 영향을 덜 줄 수 있음
2.4 도메인 영역의 주요 구성요소
∘ 도메인 영역의 모델은 도메일의 주요 개념을 표현하며 핵심 로직을 구현
∘ 도메인 영영의 주요 구성요소 : 엔티티, 밸류, 애그리거트, 리포지터리, 도메인 서비스
2.4.1 엔티티와 밸류
∘ 도메인 모델의 엔티티 != DB 모델의 엔티티
∘ 도메인 모델의 엔티티 : 단순히 데이터를 담고 있는 데이터 구조라기보다는 데이터와 함께 기능을 제공하는 객체
2.4.2 애그리거트
∘ 애그리거트 : 관련 객체를 하나로 묶은 군집. 엔티티와 밸류 개수 증가로 도메인 모델이 복잡할 때 전체 구조를 이해하는 데에 도움을 줌.
2.4.3 리포지터리
∘ 리포지터리 : 도메인 객체 보관을 위한 도메인 모델. 애그리거트 단위로 도메인 객체를 저장하고 조회하는 기능을 정의
∘ 응용 서비스는 의존 필요한 도메인 객체를 구하거나 저장할 때 리포지터리를 사용함
∘ 응용 서비스는 트랜잭션을 관리하는데, 트랜잭션 처리는 리포지터리 구현 기술의 영향을 받음
∘ 리포지터리는 응용 서비스가 필요로 하는 애그리거트를 저장하는 메서드, 애그리거트 루트 식별자로 애그리거트를 조회하는 메서드를 제공함
2.5 요청 처리 흐름
∘ 사용자가 애플리케이션에 기능 실행 요청 -> 표현 영역에 요정이 전달됨 -> 표현 영역 컨트롤러가 요청을 변환한 데이터를 응용 서비스에 인자로 전달 -> 응용 서비스가 도메인 모델을 이용해서 기능 구현
2.6 인프라스트럭처 개요
∘ 인프라스트럭처는 표현 영역, 응용 영역, 도메인 영역을 지원함
∘ 구현의 편리함도 중요하기 때문에 무조건 인프라스트럭처에 대한 의존을 없앨 필요는 없음
2.7 모듈 구성
∘ 아키텍처의 각 영역은 별도 패키지에 위치
∘ 도메인 모듈은 도메인에 속한 애그리거트를 기준으로 다시 패키지를 구성
∘ 한 패키지에 타입 개수는 10~15개 미만이 적당함
'Back-End > 도메인 주도 개발 시작하기' 카테고리의 다른 글
[DDD] 도메인 주도 개발 시작하기 Ch4 (0) | 2024.03.18 |
---|---|
[DDD] 도메인 주도 개발 시작하기 Ch3 (0) | 2024.03.18 |
[DDD] 도메인 주도 개발 시작하기 Ch1 (0) | 2024.03.10 |
[DDD] 도메인 주도 개발 시작하기_Ch11 (0) | 2023.05.08 |
[DDD] 도메인 주도 개발 시작하기_Ch10 (0) | 2023.05.08 |