아키텍처 개요
아키텍처
- 표현 계층 : 사용자와 소프트웨어의 인터페이스를 담당하는 계층이다. 사용자의 요청을 받고 응용 계층에 전달하는 역할을 한다. 웹 브라우저로부터 http 요청과 응답을 주고받는다.
- 응용 계층 : 표현 계층에서 전달받은 요청을 처리하는 계층이다. 도메인 계층의 기능을 사용하여 요청을 처리한다.
- 도메인 계층 : 도메인의 개념과 규칙을 구현하는 계층이다. 도메인 모델을 기반으로 엔티티, 벨류, 애그리거트, 리포지터리 등을 구현하다.
- 인프라스트럭처 계층 : 데이터베이스, 메시지 시스템 등과 같은 외부 시스템과 연결하는 계층이다. 도메인 계층에서 필요한 데이터를 제공한다.
DIP
DIP는 Dependency Inversion Principle의 약자로, 의존성 역전 원칙을 의미한다. DIP는 다음과 같이 정의할 수 있다.
고차원 모듈은 저차원 모듈에 의존하지 말고, 추상화에 의존하라.
DIP를 적용하면 다음과 같은 장점을 얻을 수 있다.
- 계층 간의 의존성이 줄어든다. 각 계층은 추상화된 인터페이스에만 의존하기 때문에, 계층간의 의존성이 줄어든다.
- 계층을 독립적으로 개발하고 유지 보수할 수 있다. 각 계층은 하나의 관심사에만 집중할 수 있기 때문에, 계층을 독립적으로 개발하고 유지 보수 할 수 있다.
- 도메인 계층은 추상화된 인터페이스를 제공하기 때문에, 도메인의 변화에 쉽게 대응할 수 있다.
도메인 영역의 주요 구성요소
- 엔티티 : 고유 식별자를 갖는 객체로 자신의 라이프 사이클을 갖는다.
- 밸류 : 고유 식별자를 갖지 않는 객체로 주로 개념적으로 하나인 값을 표현할 때 사용된다.
- 에그리거트 : 연관된 엔티티와 밸류 객체를 개념적으로 하나로 묶은 것이다.
- 리포지토리 : 도메인 모델의 영속성을 처리한다.
- 도메인 서비스 : 특정 엔티티에 속하지 않은 도메인 로직을 제공한다.