src/
└── main/
├── kotlin/
│ └── com/
│ └── example/
│ └── projectname/
│ ├── application/ 어플리케이션
│ │ ├── service/ 유스케이스, 서비스 비즈니스 로직 구현체
│ │ │ └── SomeService.kt
│ │ └── port/
│ │ ├── in/ 유스케이스, 서비스 비즈니스 로직 추상화
│ │ │ └── SomeUseCase.kt
| | | └── dto/
| | | └── dto/ (request, response)
│ │ └── out/ 외부 시스템, 인프라 계층 추상화
│ │ └── SomeFeature.kt
│ ├── domain/ 도메인
│ │ ├── model/
│ │ │ └── SomeEntity.kt, SomeVo.kt
│ │ ├── repository/ 레포 추상화
│ │ │ └── SomeRepository.kt
│ │ └── service/ 도메인 전용 서비스 구현체
│ │ └── SomeDomainService.kt
│ ├── infrastructure/
│ │ ├── configuration/
│ │ │ └── SomeConfiguration.kt
│ │ ├── repository/ 레포 구현체
│ │ │ └── SomeJpaRepository.kt
│ │ └── adapter/ 외부 인프라 통신 어댑터 (연결)
│ │ └── SomeRepositoryImpl.kt
│ └── presentation/
│ ├── controller/
│ │ └── SomeController.kt
│ ├── dto/
│ │ ├── request/
│ │ │ └── SomeRequestDto.kt
│ │ └── response/
│ │ └── SomeResponseDto.kt
│ └── mapper/ 입력 및 반환 값 매핑
│ └── SomeMapper.kt
└── resources/
├── application.yml
└── static/
application: 서비스와 포트 정의가 포함된 계층
in: 유스케이스 인터페이스
out : 외부 시스템 인터페이스(db, redis)model: 엔티티, 밸류 오브젝트, 도메인 이벤트 등 도메인 객체를 정의.repository: 도메인 레벨의 리포지토리 인터페이스를 정의.service: 도메인 서비스를 정의, 필요에 따라 추상화 계층 분리 가능.configuration: 빈 설정과 같은 구성 관련 클래스를 정의.repository: 외부 인프라 서비스 접근 관련 구현체를 포함. (예: JPA 리포지토리).adapter: 외부 인프라 시스템과의 통신을 담당하는 어댑터를 포함합니다. (예: 카프카, ES)controller: REST 컨트롤러 또는 웹 컨트롤러를 정의합니다.dto: 요청 및 응답 DTO를 정의합니다.
request: 클라이언트로부터 들어오는 요청 데이터를 담는 DTO.response: 클라이언트로 나가는 응답 데이터를 담는 DTO.mapper: DTO와 도메인 모델 간의 변환 로직을 정의합니다./api/documents에 POST 요청을 보내면 DocumentController가 이를 처리합니다.DocumentController는 요청을 CreateDocumentUseCase 인터페이스를 통해 애플리케이션 레이어로 전달합니다.DocumentService는 요청을 처리하기 위해 DocumentDomainService를 호출하여 도메인 로직을 검증합니다.DocumentRepository를 통해 문서를 저장합니다.DocumentDomainService는 비즈니스 로직을 구현합니다.DocumentRepository는 도메인 모델을 영속화하기 위한 인터페이스입니다.DocumentRepositoryImpl은 JPA를 사용하여 데이터베이스와 상호작용합니다.DocumentController는 애플리케이션 서비스에서 반환된 DTO를 클라이언트에 응답합니다.