inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Practical Testing: 실용적인 테스트 가이드

Presentation Layer 테스트 (2)

controller, service dto 분리에대해 질문드립니다.

933

falsystack

작성한 질문수 10

0

포스, 키오스크, 이외 다른 주문 엔드포인트로부터 주문이 들어왔을때 똑같은 서비스를 사용할 경우 그 서비스에서 사용하는 서비스dto로 변환해주어야 하기 때문에 컨트롤러 dto와 서비스dto를 분리해주는게 좋다로 이해했는데 맞을까요?

spring tdd jpa mockito 소프트웨어-테스트 junit5

답변 2

3

박우빈

안녕하세요, faisystack 님! :)

네, 맞습니다. 우리의 사고 흐름에 따라 컨트롤러부터 개발하다보면 자연스럽게 컨트롤러에서 사용했던 DTO를 서비스에 사용하게 되는데, 이럴 경우 서비스 입장에서는 특정 컨트롤러에 종속된 DTO를 외부로부터 받게 됩니다.
그렇게 되면 말씀하신 것처럼 다른 채널(컨트롤러)에서는 해당 서비스를 사용할 때 애초에 관심사가 없는 다른 컨트롤러의 스펙에 맞추어 DTO를 사용해야만 합니다.
서비스 입장에서는 범용적인 스펙(DTO)을 갖추지 못하게 되는 것이죠.

자주 일어나는 일은 아니겠으나, 레이어별 관심사의 분리, 프로젝트의 확장성을 고려하여 지켜서 개발하면 좋은 설계 방법이라고 생각합니다. ㅎㅎ

감사합니다. :)

0

인프런 AI 인턴

안녕하세요 falsystack 님, 인프런 AI 인턴이에요.
controller와 service 사이에 dto를 분리하는 것은 일반적으로 좋은 설계 방법입니다. controller는 클라이언트로부터 요청을 받고, service는 비즈니스 로직을 처리하며, dto는 데이터 전송 객체로 사용됩니다.

controller로부터 받은 요청을 service로 전달할 때, 데이터를 변환하는 과정이 필요한 경우가 있습니다. 서비스에서 사용하는 서비스dto로 데이터를 변환하여 처리하면, 코드의 재사용성과 유지 보수성을 향상시킬 수 있습니다. 또한, 서비스dto를 사용함으로써 요청 데이터와 서비스 로직 간의 분리를 깔끔하게 유지할 수 있습니다.

하지만, 프로젝트의 복잡성과 요구사항에 따라서 단순한 경우에는 컨트롤러 dto와 서비스 dto를 분리할 필요가 없을 수도 있습니다. 따라서 상황에 맞게 잘 판단하시면 됩니다. 감사합니다!

private 상수 테스트 관련 질문

0

83

1

void는 어떻게 테스트하나요..? void로 애초에 코딩하면 안되나요??

0

126

2

커버리지는 어떻게 활용하시는지 궁금합니다.

0

161

2

테스트 문서화 질문입니다

0

105

2

단위테스트 질문이 있습니다

0

96

2

컨트롤러는 모킹을 한 이유가 궁금합니다.

0

103

2

ERD 가장자리에 있는 도메인 테스트 질문

0

89

2

DTO 검증 필드에 대한 테스트 코드 작성은 어디까지?

0

135

2

OrderCreateRequest DTO에 대해서 궁금한점

0

102

2

고전파의 테스트 대역 사용 대상, 공유 의존성

0

156

2

계층 관련 질문이 있습니다.

0

139

3

'코틀린'에서는 빌더를 따로 쓰지 않는데, 이 때는 어떻게 test fixture를 만드시는지 궁금합니다

1

124

2

혹시 update 로직은 어떻게 테스트하나요? (@Setter?)

0

134

2

단위테스트와 통합테스트의 경계가 궁금합니다.

0

228

2

Service+Repository 통합테스트 관련 질문입니다.

0

150

2

OrderControllerDocsTest 작성 해봤는데요. 날짜 형식이 이상하게 나와요

0

185

2

test 용 .yml

0

90

2

throws Exception

0

80

2

카페키오스크 클래스 문의 ,,

0

89

2

Rest docs 문서용 테스트코드를 따로 작성해야 되나요?

0

174

2

테스트 코드에서 필요한 생성자

0

138

1

tearDown 순서

0

116

2

@Builder 생성자 private

0

136

2

@DisplayName gradle / intellJ

0

93

2