inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

DTO 변환 시 우아한형제들은 어떻게 처리하시나요?

해결된 질문

6608

bk

작성한 질문수 5

8

샘플에서 DTO는 생략하셔서 아쉽습니다.

DTO 변환으로 modelmapper나 mapstruct 정도 쓰는것같습니다.
물론 mapper 없이도 하시는것 같던데요.

우아한형제들은 mapper에 대한 고견이 어떠신지 매우 궁금합니다!~

spring JPA java spring-boot 웹앱

답변 1

15

김영한

안녕하세요. bk님

우아한형제들의 의견이라기 보다는 제가 실무에서 다양하게 경험한 개인적인 의견을 드리겠습니다^^

저도 주위 개발자 분들과 이것가지고 옥신각신? 하는데요. ㅎㅎ

결국 코드량을 줄여준다는 장점이 있지요.

그럼 제가 생각하는 단점을 쭉 늘어보겠습니다.

1. 모델이 단순하면 상관이 없는데, 매핑해야 하는 모델이 복잡하거나 서로 차이가 많이 나면... 머리속으로 생각을 좀 많이 해야 합니다. 이게 어느정도 복잡해지면 생각하시는 시간 때문에 비용이 더 들어가더라구요.

2. 직접 수동으로 할 때는 컴파일 시점에 오류를 잡을 수 있는데, 이건 실행을 해봐야 오류를 찾을 수 있습니다.

3. ModelMapper는 동시성 성능 이슈가 있습니다. 수천 TPS의 리엑티브 모델에서는 이 부분이 명확하게 병목으로 나왔습니다. 물론 수천 TPS가 안되는 상황에서는 상관이 없습니다. (MapStruct는 모르겠네요)

결국 장단점이 있는데요. 저는 사용을 안합니다. ㅎㅎ(사용하다가 사용을 안하게 되었으니, 언젠가는 바뀔지도 모르겠습니다.)

복잡한 실무에서 엔티티를 DTO로 변경하는게 이상적으로 딱딱 맞아 떨어지는 경우만 있는 것도 아니고, 수동으로 작업하면 결국 컴파일 시점에 오류를 잡을 수 있다는 장점도 있구요. 그리고 무엇보다! 수동으로 해도 손까락만 약간 힘들지 몇분 안걸립니다. ㅋㅋ

주위에 개발 잘하시는 분들 중에 정말 선호하는 분들도 있고, 정말 싫어 하는 분들도 있습니다. ㅎㅎ

그리고! 아쉬워하셨던 엔티티와 DTO 사용과 관련된 부분은 조만간 오픈하는 활용편2탄에서 깊이있게 다룰 예정입니다. 기대해주세요^^

감사합니다.

sdk 설정 오류

0

53

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

142

2

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

0

51

1

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

0

71

1

기본 생성자

0

60

1

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

0

103

1

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

0

165

4

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

0

116

1

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

0

120

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

72

1

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

0

82

1

dirty checking 질문드립니다.

0

83

1

동시성 관련 질문입니다

0

75

1