inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

DTO 사용에대해 궁금합니다.

3594

KwangMin Lee

작성한 질문수 7

4

안녕하세요 영한님.

항상 좋은강의 보면서 이미 완강을 하였지만 궁금한점이 이 강의내용에 해당되는것 같아 질문을 남깁니다.

컨트롤러에서 (API) 개발을 할때 Entity를 바로 접근하지 말고  DTO를 권장하셔서

DTO를 사용하던 찰나에 문제가 생겼습니다.

Entity에 Setter를 사용하는건 지양한다고 하셔서 생성자로 값을 넣어주고 있는데

DTO에서도 값을 생성자로 넣어줘야 하나요?

백을 먼저 개발하고 프론트를 개발하기위해 타임리프로 하고 있는데

DTO 를 생성자로 만들어 놓으니 값을 계속 못받아와서요.

한참 헤매다가 설마 하고 LOMBOK @Setter 로 하니 값이 넘어오더라고요.

DTO는 Setter로 하여도 문제가 없을까요? 제 생각에도 DTO는 단순 값을 전달 받는 Form(?)이라고 생각되어

Entity에서의 Setter를 지양해야하는 문제에 와는 달리 큰 영향은 없을 것 같아서요.

감사합니다.!

spring JPA java spring-boot 웹앱

답변 2

16

김영한

안녕하세요. KwangMin Lee님

Entity는 비즈니스 로직이 있고, 실제 데이터도 변경되기 때문에, Setter를 최대한 사용하지 않는 편이 좋습니다.

반면에 DTO는 목적 자체가 어떤 로직이 있다기 보다는, 단순히 데이터를 전달하는 것이기 때문에 Getter, Setter를 자유롭게 사용하셔도 됩니다^^

감사합니다.

3

제이콥

늦었지만 혹시 구글 검색을 통해 들어오신 분들을 위해 추가적으로 답변드립니다.

DTO와 같은 모델에 setter가 없는 경우 다음과 같이 데이터 바인딩을 합니다. 결론부터 말씀드리면, 기본 생성자를 제거해야 합니다.

아래 글은 제가 작성한 블로그의 내용을 좀 발췌했습니다.


... 다음과 같은 방법 중 하나로 인스턴스화됩니다.

- @ModelAttribute 메소드에 의해 추가되었을 수 있는 모델을 탐색한다.
- 만약 model attribute가 클레스 레벨에 @SessionAttribute 어노테이션이 붙었는지 Http Session을 통해 탐색한다
- model의 속성 이름과 path variable, request parameter와 같은 request 값이 매치되는 경우 컨버터를 얻는다.
- 기본 생성자를 통해 인스턴스화한다.
- 서블릿 request 파라미터들의 이름과 가장 일치하는 인자가 있는, 적절한 생성자를 통해(primary constructor) 인스턴스화된다. 인자의 이름은 JavaBeans의 @ConstructorProperties 또는 바이트코드의 런타임 시 존재하는(runtime-retained) 파라미터의 이름을 통해 결정된다.


만약 컨트롤러에서 DTO가 데이터바인딩이 되지 않을 경우, DTO에 기본 생성자 및 관련 어노테이션이 있는지 확인하셔야 합니다. 만약 있다면 제거해주세요.

sdk 설정 오류

0

51

2

오탈자 - @Transactional

0

56

1

src/test/resources 테스트 경로 문제

0

50

1

상품 등록후 H2 db 출력 순서 바꿀 수 있나요?

0

64

1

MemberRepositoryTest 실행오류

0

81

1

boot 4.x >>> trasasction rolled back log & p6spy(영한님, 수업 자료 업데이트 해주시면 감사하겠습니다!!)

1

183

2

강의 마지막 QueryDSL 사용 부분 질문있습니다

1

139

2

클라이언트에서 isbn과 author 수정 요청을 한 경우에 대해 질문드립니다.

0

51

1

도메인 모델 패턴 vs 트랜잭션 스크립트 패턴

0

71

1

기본 생성자

0

60

1

h2 DB 연결시 jdbc url 변경 이유가 궁금합니다.

0

101

1

멤버서비스테스트 부분에서 막힙니다.

0

164

4

실무에서도 EntityManager를 이용해서 많이 작업하는 편일까요?

0

116

1

초반에 h2 다운로드 과정 꼭 필요한가요?

0

119

2

자신 필드에도 get으로 접근하는 이유가 있을까요?

0

114

1

24분 27초 연관관계 편의 메서드 위치

0

113

1

단건 주문만 가능하게 한건 의도한 부분이신가요?

0

109

2

빌드 툴, Gradle

0

59

1

h2연결은 된 것 같은데 엔티티 테이블까지 작성 후 확인해보아도 테이블이 안보입니다

0

77

2

Repository에서 EntityManager 주입 방식 차이

0

90

1

롬복과 사용자 정의 setter 메서드

0

71

1

주문 목록 조회 fetch join 질문드립니다

0

81

1

dirty checking 질문드립니다.

0

83

1

동시성 관련 질문입니다

0

74

1