DTO는 class + Lombok으로 만들까요, record로 만들까요? #44
Replies: 3 comments
-
나의 기준현재 저는 요청 DTO에서는 class + Lombok, 응답 DTO에서는 record를 주로 사용하는 것을 추구합니다. 1. 응답 DTO를 record로 사용하는 이유
2. 요청 DTO를 class Lombok으로 사용하는 이유
|
Beta Was this translation helpful? Give feedback.
-
|
이전 디스커션인 Record 클래스와 명시적 타이핑에서도 언급되었던 내용인데요, 데이터가 중요한 시대로 넘어오면서 데이터 자체를 명확히 표현하기 위해 등장한 개념이 Record 타입이라고 생각합니다. 그래서 저는 요청/응답 DTO를 데이터 자체를 표현하는 의도이기에, Record를 사용하여 표현하는 것을 선호합니다. 결국 요청 응답은 외부의 영향을 받으면 안되는 오직 데이터 자체를 표현해야 합니다. 그래서 외부에 상속되어 수정되거나 불변성이 깨지면 안되는 순수 데이터의 성격을 가져야 합니다. 결국 이를 잘 표현해주기 위해 record가 등장하였고, 이런 컨포넌트들 사이에서 데이터 전송에서 사용할 객체를 표현하기 위해 등장한 개념이 Record이기 때문에 사용에 자연스럽다고 생각합니다. 추가적인 장점으로 보일러 플레이트코드를 줄여준다는 장점도 있으며, 역직렬화 시점에도 record의 canonical constructor를 사용해 생성시점에 모든 값이 결정되는 구조라는 측면에서도 불변성을 보장해주기 용이할 것 같습니다! |
Beta Was this translation helpful? Give feedback.
-
|
저는 요청/응답 DTO를 만들 때 record 사용을 선호하는 편입니다. 1. record를 DTO로 사용하면 어떤 장점과 단점이 있다고 생각하시나요?record는 하지만 단점은 유연성이 떨어진다는 점입니다. 2. Jackson이 JSON을 객체로 역직렬화할 때, 기본 생성자/setter/생성자/record canonical constructor 중 어떤 방식을 사용하는지 이해하고 계신가요?이번 기회에 한번 찾아보게되었습니다! 3. Spring의 @RequestBody 추상화가 편리한 만큼, 내부 변환 과정을 몰랐을 때 어떤 문제가 생길 수 있을까요?
|
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Spring에서 요청 DTO를 만들 때 보통 Lombok을 사용해 class로 작성하거나, Java record로 작성할 수 있습니다.
두 방식 모두 JSON 요청을 @RequestBody로 받을 수 있지만, 객체가 생성되는 방식과 표현하는 의도는 다르다고 생각합니다.
Lombok class는 기존 class에 생성자, getter, setter 같은 코드를 자동 생성해주는 방식이고, record는 자바 언어 차원에서 값을 담기 위한 불변 객체를 표현하는 방식입니다.
즉 Lombok은 기존 class의 보일러플레이트를 줄이는 도구이고, record는 데이터 전달 객체라는 의도를 타입 선언 자체에 드러내는 문법에 가깝다고 볼 수 있습니다.
다만 record는 기본적으로 불변이고 상속이 제한되며, 필드명이 JSON 프로퍼티 이름과 더 직접적으로 연결됩니다.
반대로 Lombok class는 생성자, setter, 기본 생성자 등을 조합할 수 있어 더 유연하지만, 어떤 어노테이션을 붙였는지에 따라 Jackson 역직렬화 방식이 달라질 수 있습니다.
이와 관련해서 여러분의 생각이 궁금합니다.
Beta Was this translation helpful? Give feedback.
All reactions