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

이병훈님의 프로필 이미지

작성한 질문수

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

간단한 주문 조회 V1: 엔티티를 직접 노출

Dto 관련 질문

해결된 질문

작성

·

570

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오) 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예

[질문 내용]
안녕하세요 DTO 관련해서 질문이 있습니다. Entity를 Controller에서 사용하면 안되어 값을 받을 때 DTO로 받고 이를 Entity로 다시 변환 후 서비스로 값을 넘기더라구요.

  1. 우리가 저장을 한다고 할 때, 넘어오는 값이 id, pw, name, email, address 등등 해서 많은 값이 넘어오면 이를 DB에 저장을 해줘야 하잖아요. 그러면 DTO를 Entity와 똑같은 필드를 가진 객체로 만들어 사용하는 건가요?

  2. 그리고 회원가입도 간편가입, 홈페이지 가입 등 반환되는 값이 다르다고 하셨는데 이런 경우는 하나의 DTO에 모든 필드들을 다 집어넣고 로직마다 필요한 값을 빼서 쓰는 게 나은지 아니면 각각의 로직별로 DTO를 다 만드는 게 나은지 알고 싶습니다. 감사합니다

2 질문 ex

홈페이지 가입 필요 필드(name, age, date)

간편가입 (id, pw)

이럴 때 하나의 DTO에 5개 필드를 모두 넣은 DTO를 사용하는게 좋은지, 아니면 홈페이지용, 간편용 DTO를 두개 만드는게 나은지에 대한 질문입니다

답변 1

0

안녕하세요. 이병훈님, 공식 서포터즈 y2gcoder입니다.

  1. 말씀하신 것처럼 저장하는 요청에 대한 DTO가 있다면 저장할 때 엔티티의 모든 값이 필요하다면 엔티티와 같은 필드를 가진 DTO를 생성해줍니다. 반면에 해당 엔티티를 저장할 때 필수값이 id, pw, name, email 이고, address는 저장할 때는 필요없는 필드라면 address만 빼고 DTO를 만들 수도 있습니다.

     

  2. 제 경험으로는 DTO는 용도에 따라 다 따로 만들어주는게 결과적으로 유지보수하기 편했습니다. 예를 들어 저장 요청, 수정 요청이 있고, 해당 요청에 쓰는 DTO를 하나로 사용한다고 해보겠습니다. 처음에는 두 요청에서 사용하는 필드가 똑같아서 하나의 DTO로 사용하고 있었습니다. 그런데 수정요청에 대한 요구사항이 바뀌어 DTO에 대한 수정이 필요하게 되면, 해당 DTO는 저장 요청일 때도 사용하기 때문에 수정 후 저장 요청에 대해서도 여전히 잘 작동하는 지 테스트를 해줘야 합니다. DTO를 각 용도에 따라 따로 사용한다면 수정 요청의 요구사항이 바뀐다면 수정 요청할 때 사용하는 DTO만 체크하시면 됩니다 :)


감사합니다.

이병훈님의 프로필 이미지
이병훈
질문자

답변 감사합니다!

감사합니다 :)