패키지 구조

com.example.user ┣ domain ┃ ┣ model ┃ ┃ ┣ User.java ┃ ┃ ┣ UserRole.java ┃ ┃ ┗ ... ┃ ┣ service ┃ ┃ ┗ UserDomainService.java ┃ ┗ repository (Domain에서의 인터페이스, Port에 가깝지만 Domain 레이어 내부에서 정의되는 경우도 있음) ┃ ┗ UserRepository.java ┣ application ┃ ┣ port ┃ ┃ ┣ in ┃ ┃ ┃ ┗ UserUseCase.java ┃ ┃ ┗ out ┃ ┃ ┗ UserPersistencePort.java ┃ ┣ service ┃ ┃ ┗ UserApplicationService.java ┃ ┗ dto ┃ ┗ UserDto.java ┣ adapter ┃ ┣ in ┃ ┃ ┗ web (Controller, HTTP/API 등 사용자/외부가 들어오는 '입력' 어댑터) ┃ ┃ ┗ UserController.java ┃ ┗ out ┃ ┣ persistence (DB, JPA, MyBatis, etc. 구체적인 구현체) ┃ ┃ ┗ UserJpaRepository.java ┃ ┗ external (다른 시스템/API 연동용 어댑터) ┃ ┗ FeignClient.java ┗ config (스프링 설정, 빈 등록, 환경 설정 등) ┗ JpaConfig.java


각 패키지의 역할?

1. domain 패키지

2. application 패키지

3. adapter 패키지