헥사고날 아키텍처와 도메인 주도 설계(DDD)를 사용할 때, DTO(Data Transfer Object)는 주로 컨트롤러에서 사용됩니다. 그 주요 역할은 외부 클라이언트와의 데이터 교환을 다루는 것입니다. 다음은 이 방식이 어떻게 구현되는지에 대한 요약입니다.
DTO의 사용
- 컨트롤러에서의 사용:
- 입력 데이터 수신: 클라이언트로부터 요청이 들어올 때, 컨트롤러는 데이터를 DTO 형식으로 수신합니다. 이 과정에서 데이터의 유효성을 검증하고, 도메인 모델에 필요한 형태로 변환합니다【81†source】【85†source】.
- 서비스 레이어로의 전달:
- 컨트롤러에서 변환된 도메인 객체를 서비스 레이어에 전달합니다. 서비스 레이어는 이 도메인 객체를 사용하여 비즈니스 로직을 수행합니다【84†source】.
- 서비스 레이어에서의 처리:
- 서비스 레이어는 도메인 객체를 통해 비즈니스 로직을 처리하며, 외부 시스템과의 상호작용이나 데이터베이스 작업을 위해 어댑터와 통신합니다【82†source】【83†source】.
- 컨트롤러로 반환:
- 비즈니스 로직 처리 후, 서비스 레이어는 도메인 객체를 컨트롤러로 반환합니다. 컨트롤러는 이 도메인 객체를 DTO로 변환하여 클라이언트에게 응답합니다【85†source】.
결론
- DTO는 컨트롤러에서만 주로 사용되며, 클라이언트와의 데이터 교환을 다룹니다.
- 서비스 레이어는 도메인 객체만 사용하여 비즈니스 로직을 수행합니다. 이는 도메인 모델이 외부 데이터 형식의 변화에 영향을 받지 않도록 하며, 비즈니스 로직을 명확하게 유지합니다【81†source】【84†source】.
이 구조는 아키텍처의 명확한 책임 분리와 유지보수성을 강화하는데 도움이 됩니다. 대부분의 헥사고날 아키텍처 구현에서는 이와 같은 접근 방식을 채택하여, 도메인 로직과 외부 데이터 교환을 분리합니다【81†source】【85†source】.