
"도메인 로직을 외부 의존성으로부터 격리하여
더 유연하고 테스트 가능한 애플리케이션을 만든다!"
@Service
public class UserService {
private final UserRepository userRepository; // JPA Repository
private final EmailClient emailClient; // 외부 Email API
...
}
| 구조 | 특징 | 문제점 |
|---|---|---|
| 🏗️ Layered | Controller → Service → Repository | 외부 의존성(DB, 외부 API)에 강하게 묶임 |
| 🔷 Hexagonal | Domain 중심, Ports & Adapters | 외부 교체 용이, 테스트 용이 |
📦 user Bounded Context (User 도메인 전체 경계)
┣ 📂 adapter Adapter Layer (외부 세계와 연결 지점)
┃ ┣ 📂 in Inbound Adapter (들어오는 요청 처리)
┃ ┃ ┗ 📂 web REST API Controller, Request/Response DTO
┃ ┗ 📂 out Outbound Adapter (외부 자원 연동)
┃ ┗ 📂 persistence JPA Entity, Repository, Mapper (DB 연동)
┣ 📂 application Application Layer (유즈케이스 중심)
┃ ┣ 📂 port Port (도메인 ↔ Adapter 느슨한 연결/계약)
┃ ┃ ┣ 📂 in Inbound Port (UseCase 인터페이스)
┃ ┃ ┗ 📂 out Outbound Port (Persistence 인터페이스)
┃ ┗ 📂 service Application Service (유즈케이스 구현체)
┗ 📂 domain Domain Layer (핵심 비즈니스 모델/로직)