Onion Architecture 란?
Onion Architecture는 제어의 역전 원칙을 기반으로 도메인 및 서비스 계층을 애플리케이션의 중심에 배치하고, 인프라스트럭쳐를 외부에 배치하는 아키텍처입니다.
Onion Architecture는 기존의 3 계층 아키텍쳐와 같이 데이터 계층에 의존하지 않고 실제 도메인 모델에 의존합니다.
기존의 3계층 아키텍처는 모든 계층이 Data Access 레이어 위에 존재해 해당 레이어에 변경사항이 발생하면 모든 레이어에 변경이 발생하는 단점이 있습니다. 반면, Onion Architecture에서는 데이터베이스 유형에 따라 달라지지 않는 저수준의 객체 모델만이 존재하며, 데이터베이스의 실제 유형과 데이터 저장 방법은 Infrastructure 계층에서 결정됩니다.
구성 요소들
Domain Model
- 가장 중심에 있는 레이어이며, 다른 레이어에 의존할 수 없습니다.
- 엔티티가 위치합니다.
Domain Services
- 모델 레이어에 정의된 규약의 구현이 위치합니다.
Application Services
- Infrastructure 레이어와 Domain Service 레이어의 브리지 역할을 합니다.
- 비즈니스 기능을 완성시키기 위한 레이어입니다.
- Domain Service 레이어에 의존해 정의된 규약을 지켜야 합니다.
Infrastructure / API
- 데이터베이스, 메시징, 알림, UI 등 도메인과 관련 없는 레이어입니다.
장점
- 유지보수가 용이합니다.
- 다른 레이어의 영향을 받지 않는 유닛 테스트를 작성할 수 있습니다.
- 외부 레이어가 인터페이스를 통해 내부 레이어와 통신하므로 느슨한 결합이 가능합니다.
- 내부의 레이어는 외부 레이어에 의존하지 않습니다.
반응형
'🏗️ ARCHITECTURE' 카테고리의 다른 글
Facade Pattern과 API Composition (0) | 2022.03.13 |
---|---|
[도메인 주도 설계] 2부 : 모델 주도 설계의 기본 요소 (0) | 2022.03.06 |
[도메인 주도 설계] 1부 : 동작하는 도메인 모델 만들기 (0) | 2022.02.01 |
[12 Factor App] 마이크로서비스 개발 전 읽어보세요 (0) | 2021.06.07 |
[나의 MSA 구축 일기] 처음 MSA를 구축해보며 겪었던 시행착오들 (4) | 2021.02.21 |