계층화 구조 ( Layered Architcture)
presentation, application, domain, infrastructure 계층을 사용하여 폴더를 기능별로 분리하는 것
이점
- 각 계층의 책임을 명확하게 분리 → 각 시스템이 어떻게 동작하는지 이해하기 쉽다.
- 각 계층간의 의존도가 적다 → 변경 사항이 다른 계층에 미치는 영향을 최소화할 수 있다.
각 계층의 역할
Presentation Layer
- 사용자(웹 브라우저)로 부터 요청(Request)을 받아 application layer 에 전달하고 application layer에서 처리된 결과를 받아 사용자에게 응답(Response)
- 외부로부터의 요청을 받고, 적절한 응답을 구성
- 사용자 인터페이스와 상호작용하는 부분으로, 컨트롤러를 포함
Application Layer
- 도메인 레이어를 사용하여 사용자의 요청을 처리하고 응답을 구성
- 애플리케이션 로직(흐름 제어, 트랜잭션 관리 등)을 담당
- DTO(Data Transfer Objects), 인터페이스 정의, 서비스 구현 등을 포함
Domain Layer
- 애플리케이션의 비즈니스 로직과 도메인 모델을 포함
- 엔티티(Entity)와 값 객체(Value Object)를 사용해 핵심 비즈니스 데이터를 모델링하고 도메인 서비스, 도메인 이벤트 등을 포함
- 비즈니스 규칙과 불변성을 유지
- 다른 계층(application, infrastructure)과 독립적으로 설계
Infrastructure Layer
- 데이터베이스, 파일 시스템, 네트워크 서비스 등의 외부 시스템과의 통신을 담당
- 구현기술에 대해 다루는 영역 : 레포지토리 구현, 인프라 스트럭쳐 서비스를 포함
* 인프라 스트럭처 서비스 :
외부 API 통합 : 소셜 미디어 API, 지불 게이트웨이, 지리적 위치 서비스 등 외부 시스템과의 연동
메세징 서비스 : 이메일 발송, SMS 발송 등
데이터베이스 엑세스 : ORM 설정, 데이터 베이스 연결
참고자료
'아키텍처 > 프로젝트 구조' 카테고리의 다른 글
Infrastructure Layer(인프라스트럭처) (0) | 2024.12.22 |
---|---|
[ Nest.js] 폴더 구조에 대한 세가지 관점 (0) | 2024.12.06 |