[architecture Series Ddd] 04.05.layeredarchitecture
February 24, 2025
계층화된 아키텍쳐
- 가장 널리 사용되는 아키텍쳐 패턴 중 하나다.
- 소프트웨어 시스템을 각각 고유한 책임이 있는 별개의 계층으로 나누고 구조적이고 조직적으로 설계하는 방법을 제시한다.
계층형 아키텍쳐의 레이어
- PresentationLayer
- 외부 시스템과 상호작용을 담당한다.
- 사용자 입력, 시각적 표현 및 사용자 인터페이스 구성 요소를 처리한다.
- 주로 정보를 제시하고 사용자 작업을 캡쳐하는 데 중점을 둔다.
- ApplicationLayer
- Presentation, domain 사이 중개자 역할
- 사용자의 작업의 실행을 조정하고 위임
- 이 계층은 사용자 입력을 의미 있는 명령 또는 쿼리로 변환하고 도메인 레이어에서 적절한 작업을 호출하는 역할을 한다.
- DomainLayer
- 핵심 비즈니스 로직을 나타내며, 도메인에 대한 지식을 캡슐화한다.
- 엔티티, 값 객체, 비즈니스 규칙 및 도메인별 로직이 포함된다.
- 기술에 구애 받지 않고 외부 종속성으로부터 독립적이어야 한다.
- PersistenceLayer
- 지속성 레이어는 관계형 데이터베이스, 문서 저장소 또는 기타 데이터 저장소와 같은 지속성 메커니즘에서 데이터를 저장하고 검색하는 역할을 담당
- InfraLayer
- 다른 계층을 지원하기 위한 기술적 기능을 제공
- 데이터 스토리지, 외부 서비스 및 통신 프로토콜을 처리한다.
이점
- 모듈화 :
- 관심사를 계층으로 명확하게 분리
- 시스템이 더욱 모듈화되는 효과가 생기고 더욱 이해하기 쉬워진다.
- 독립적으로 각 계층을 개발, 테스트 및 유지 관리할 수 있어 전체 시스템 확장성과 유지 보수 용이
- 도메인 로직의 분리
- 외부 종속성으로부터 분리되어 도메인별 로직과 비즈니스 규칙에만 집중할 수 있다.
- 도메인 코드의 테스트 가능성과 재사용성을 향상시킨다.
- 유연성
- 계층 간의 인터페이스가 그대로 유지되는 한 다른 계층에 영향을 주지 않고 한 계층을 변경할 수 있다.
- 기술적 세부 사항의 추상화
- 하위 레이어는 시스템의 기술적 측면을 처리하여 상위 레이어에서 복잡성을 추상화한다.
가이드라인
계층 간 커뮤니케이션
- 레이어 간의 커뮤니케이션은 항상 상위 레이어에서 하위 레이어로 단일 방향으로 이뤄져야 한다.
- 관심사를 적절히 분리하고 하위 계층에서 상위 계층으로 종속성을 도입하는 것을 방지할 수 있다.
관심사 분리
- 레이어는 명확하고 뚜렷한 책임이 있어야 한다.
- 비즈니스 로직은 도메인 레이어 내에 유지해야 한다.
종속성 흐름
- 상위에서 하위로 흐르도록 구성하는 것이 좋다.
- 상위가 하위에 종속되어서는 안된다.
- 의존성 주입 또는 서비스 로케이터 패턴을 사용하여 계층 간의 의존성을 관리하는 것이 좋다.