[ 3주차 과제 ] 이커머스 Clean + Layered Architecture 설계
2025. 4. 5. 18:55ㆍ향해99 8기
Jpa을 잘 모르는 입장에서는 쉽지 않았다...
Layered Architecture 설계에 맞게 구성이 되었는지 각 레이어별로 dto 생성를 어떻게 하는지 고민을 많이한 3주차
1. interface : Request, Response
interfaces/ 컨트롤러
2. application = Criteria, Result : 파사드(상위 모듈) - 비즈니스 유즈케이스
application/ 서비스의 파사드 역할을 하겠다
3. domain = Command, Domain(DomainInfo) : 서비스(하위 모듈) - 단위 기능
domain/ 도메인 서비스와 도메인 객체를 넣겠다
4. infra = XXX, Domain
infra/
각 레이어를 구분하고 DIP를 적용하여, 상위 모듈이 하위 모듈을 의존하지 않도록 추상화
domain.toEnitiy() -> entity
DIP를 했기 때문에
어플리케이션 -> 도메인 계층 <- 인프라 계층
import infrastructure.entity
class Domain {
toEntity() {
return new Entity (this);
}
}
com.ecommerce
│
├── interface // Interface Layer (Request, Response)
│ ├── point
│ │ ├── PointController.java // 포인트 관련 API 처리
│ │ ├── PointRequest.java // 포인트 충전 요청 데이터 (Request DTO)
│ │ └── PointResponse.java // 포인트 충전 응답 데이터 (Response DTO)
│
├── application // Application Layer (Command, Result)
│ ├── point
│ │ ├── facade // 파사드: 여러 서비스 조합
│ │ │ ├── PointFacade.java // 포인트 관련 서비스 조합
│ │ │ ├── PointCriteria.java // 포인트 충전 조건 (Criteria)
│ │ │ └── PointResult.java // 포인트 충전 리절트 (Result)
│
├── domain // Domain Layer (Command, Domain)
│ ├── model // 도메인 모델 (JPA 엔티티)
│ │ ├── Point.java // 포인트 엔티티
│ │ └── PointHistory.java // 포인트 이력 엔티티
│ └── service // 도메인 서비스 (비즈니스 로직)
│ └── PointService.java // 포인트 관련 비즈니스 로직 처리
│
└── infra // Infra Layer (JPA, 외부 시스템, 외부 API)
├── repository // JPA 레파지스토리 (DB와 상호작용)
│ ├── PointRepository.java // 포인트 엔티티 관련 레파지스토리
│ └── PointHistoryRepository.java // 포인트 이력 레파지스토리
└── external // 외부 시스템과의 연동
└── ExternalPaymentGatewayAdapter.java // 외부 결제 시스템 연동'향해99 8기' 카테고리의 다른 글
| [ 6주차 과제 ] 대용량 트래픽&데이터 처리 - 정리 (0) | 2025.04.29 |
|---|---|
| [ 5주차 과제 ] 데이터베이스 심화 (비관적 락 동시성 테스트 문제 및 해결) (0) | 2025.04.19 |
| [ 2주차 과제 ] API명세, API에러 상황 정리, API에러 상황 정의 (0) | 2025.04.03 |
| [ 2주차 과제 ] 시퀀스 다이어그램, ERD (0) | 2025.04.01 |
| [ 2주차 과제 ] 스프린트 계획, 이커머스 요구사항 분석 (0) | 2025.03.29 |