Layered Architecture의 목적
관심사의 분리. 각 계층간의 관심사를 분리하기 위함이다.
기술과 로직이 분리가 안돼있다면 유지관리가 힘들다.
핵심원칙
- 같은 계층, 아래 계층 요소에만 의존한다. (상위계층에 의존하지 않는다)
Layer 종류
- User Interface Layer
- Application Layer
- Domain Layer
- Infrastructure Layer
User Interface Layer(사용자 인터페이스 계층 or 표현 계층)
사용자에게 정보를 보여주고, 사용자의 명령을 해석한다.
유일하게 사용자가 접근 가능한 계층이다.
Application Layer(응용 계층)
소프트웨어가 수행할 작업을 정의하고, 도메인이 문제를 해결하게 한다.
업무규칙, 지식은 포함되지 않는다. 도메인에 작업을 위임한다.
업무상황을 반영하는 상태는 없지만, 사용자나 진행상황을 반영하는 상태는 가질 수 있다.
Domain Layer(도메인 계층 or 모델 계층)
업무개념, 업무상황 정보, 규칙을 표현하는 일을 책임진다.
업무상황을 반영하는 상태를 제어 또는 사용한다.
상태저장은 Infrastructure에 위임한다.
Infrastructure Layer
상위계층을 지원하는 기술적 기능을 제공한다.
어플리케이션에 대한 메시지 전송, 도메인 영속화, ui에 위젯을 그리는 등 작업을 한다.
Spring에서 사용하는 Layer와 비교
Spring framework에서 흔히 사용하는 layer와 비교하면 아래와 같다.
- Controller == User Interface
- Service == Application
- Domain == Domain
- Repository(DAO) == Infrastructure
Controller Layer는 사용자가 유일하게 접근 가능한 layer이다. 사용자의 명령을 해석해서 Service layer에 전달한다.
Service Layer는 소프트웨어가 수행할 작업을 정의하고 도메인이 문제를 해결하도록 돕는다. 도메인의 작업이 완료되면
Domain Layer는 도메인 로직, 업무 로직을 담당한다.
Repository Layer는 데이터베이스에 접근하고 상태를 저장, 불러오는 역할을 한다.
참조
'Design' 카테고리의 다른 글
객체지향 5대 원칙 SOLID (0) | 2021.05.15 |
---|---|
Entity, VO, DTO (0) | 2021.02.01 |