Inflearn brand logo image

인프런 커뮤니티 질문&답변

dosaem님의 프로필 이미지
dosaem

작성한 질문수

커머스 서비스로 배우는 NestJS 실전 개발 (w. Prisma, Docker, Redis, Kafka)

dto 관련 질문있습니다.

해결된 질문

작성

·

58

0

order.service 계층에서

import { CreateRequestOrderDto } from 'src/order/presentation/dto/create.order.dto';


presentation 계층의 dto를 참조하는데 이유가 있을까요??

궁금해서 질문드립니다.

답변 2

0

김빌 (Bill Kim)님의 프로필 이미지
김빌 (Bill Kim)
지식공유자

설계관점에서 바라보면, controller 단의 dto 와 service 단의 dto(domain) 을 공유자원으로 사용할 것인가? 분리해서 사용할 것인가를 고민해볼 수 있습니다.

어떤게 좋다? 라고 말하기에는 양측 전부 장단이 존재하여, 원하는 방식으로 사용하면 됩니다.

도메인 서비스 단에서 도메인 dto 로 return 만 시키고, controller layer 에서 static 을 이용하여 controller dto 로 변환하는 부분도 흔하게 사용되는 방식입니다. 이렇게 하게되면 비지니스 영역에서는 controller 의 dto 를 직접참조할 일이 없어지게 됩니다.

(프로젝트 규모가 클 경우, 분리하는게 더 이익임)

dosaem님의 프로필 이미지
dosaem
질문자

넵 답변감사합니다.

결국은 프로젝트 규모와 상황에 따라 제가 판단하는게 맞겠네요 ㅎㅎ

0

안녕하세요, 인프런 AI 인턴입니다.

dosaem님께서 질문하신 order.service 계층에서 presentation 계층의 DTO를 참조하는 이유에 대해 설명드리겠습니다.

DTO(Data Transfer Object)는 계층 간의 데이터를 효율적으로 전송하기 위한 객체입니다. order.service 계층은 비즈니스 로직을 담당하며, 클라이언트로부터 데이터를 받아와 내부적으로 처리하기 위해 이 DTO를 사용할 수 있습니다. 위와 같은 방식으로 presentation 계층의 DTO를 참조하는 것은, 클라이언트로부터 받은 요청 데이터를 보다 쉽게 검증하고 해당 데이터를 이용해 비즈니스 로직을 수행하기 위한 방법입니다.

특히, 클린 아키텍처나 여러 레이어드 구조를 따르는 애플리케이션에서는 계층 간 데이터 전송에 대한 통일성을 유지하기 위해 각 계층의 DTO를 정의하고 사용합니다. 이처럼 presentation 계층의 DTO를 order.service에서 활용하는 것은 이러한 구조상의 일관성을 유지하면서도 데이터 전송 및 검증의 편리함을 제공하기 때문입니다.

아래의 링크에서 유사한 주제에 대한 토론을 확인하실 수 있습니다:
- NestJS와 DTO 사용 사례

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

dosaem님의 프로필 이미지
dosaem

작성한 질문수

질문하기