그알것 — 그럼에도 알아야 할 것들
홈질문커뮤니티
로그인
그알것 — 그럼에도 알아야 할 것들

Service

  • 홈
  • 소개
  • 질문
  • 커뮤니티

My

  • 내 워크스페이스
  • 저장한 질문
  • 작성한 답변

Policy

  • 이용약관
  • 개인정보처리방침
  • 문의

© 2026 그알것 · What Still Matters

질문 목록Java
Java

Record를 DTO로 쓰는 이유가 뭔가요?

실무3/5
설계3/5
인간3/5
기초1/5

면접관의 질문 의도

Record의 "보일러플레이트 감소" 정도만 외워 왔는지, 아니면 불변·계층 경계·VO/엔티티와의 차이까지 같이 풀 수 있는지를 가른다.

큐레이션 답변

학습 자료

Record는 필드가 final로 묶인 불변 객체에 생성자·접근자·equals/hashCode/toString을 컴파일러가 자동으로 만들어 준다. 그래서 "데이터만 옮긴다"는 DTO의 의도를 한 줄로 표현하고, 가변 setter에서 오는 사고(중간에 누가 값을 바꿔 둔 객체가 멀티스레드에서 꼬이는 류)를 원천적으로 막는다. 다만 상속 불가, 명시적 생성자 제약, JPA 엔티티처럼 가변·기본 생성자가 필요한 자리에는 안 어울리고, 외부 직렬화·역직렬화 라이브러리와의 호환은 별도 확인이 필요하다. 핵심은 "무조건 Record"가 아니라 "불변 데이터 객체 자리에 자연스럽게 맞는 도구"라는 점이다.

좋은 답변 구조

  1. 01Record가 final 필드 + 자동 생성 메서드 + 불변이라는 핵심 골격부터 정리한다
  2. 02DTO에 어울리는 이유(의도 명시, 멀티스레드 안전성, 보일러플레이트 감소)를 짚는다
  3. 03Record가 어울리지 않는 자리(JPA 엔티티, 가변 상태가 필요한 객체)를 한계로 함께 든다
  4. 04역직렬화·검증·생성자 커스터마이즈 같은 실무 디테일로 마무리한다

자주 실수하는 포인트

Record를 "Lombok 대체재"로만 설명하고 불변·계층 의도 이야기는 빠뜨린다
JPA 엔티티 자리에 Record를 쓰자고 단정해 가변·기본 생성자 요구를 놓친다
Record면 자동으로 모든 직렬화 라이브러리와 호환된다고 단정한다
VO(Value Object)와 DTO를 같은 의미로 섞어 쓰면서 Record로 모두 해결된다고 답한다

실무 맥락

  • REST 컨트롤러의 요청·응답 모델을 Record로 두고 서비스 계층 사이를 옮겨 다니는 자바 프로젝트
  • 외부 API 응답을 매핑해 받는 클라이언트 모듈에서 불변 객체로 받아 두는 패턴
  • JPA 엔티티는 클래스로 유지하면서 컨트롤러/서비스 계층 DTO만 Record로 통일하는 코드베이스

본인 경험에 녹이는 힌트

Lombok @Data로 만든 DTO에서 setter가 의도치 않게 호출돼 사고가 났던 경험이 있다면 "불변 DTO" 선택의 근거로 풀어낼 수 있다

JSON 역직렬화 라이브러리에서 Record 호환을 맞추며 시행착오를 겪은 경험이 있다면 도입 시 체크 포인트 사례로 보여 줄 수 있다

엔티티는 클래스, DTO는 Record로 계층을 명확히 나눈 경험이 있다면 "계층마다 다른 도구"라는 관점으로 일반화할 수 있다

커뮤니티 인기 답변

전체 0개

아직 공개된 답변이 없어요. 첫 공개 답변을 남겨보세요.

관련 꼬리 질문

Q1Record와 일반 클래스 DTO는 어떤 기준으로 나눠 쓰나요
Q2JPA 엔티티 자리에 Record를 쓰지 못하는 이유는 무엇인가요
Q3Record DTO에 검증(Validation) 로직은 어떻게 넣나요
아직 답을 쓰지 않았어요.
큐레이션 답변과 다른 사람 답변을 보고, 자기 언어로 답을 정리해보면 학습 효과가 가장 큽니다.
목차
  • 01면접관의 질문 의도
  • 02큐레이션 답변
  • 03좋은 답변 구조
  • 04자주 실수하는 포인트
  • 05실무 맥락
  • 06본인 경험에 녹이는 힌트
  • 07커뮤니티 인기 답변준비중
  • 08관련 꼬리 질문