본문 바로가기
  • Let's study
BackEnd/Spring

[Spring] Java Record란? DTO를 간결하게 만드는 방법

by 코딩고수이고파 2026. 8. 11.

Spring Boot에서 데이터를 전달하기 위한 DTO를 만들다 보면 비슷한 코드가 반복되는 경우가 많다.

특히 필드의 값을 변경하지 않고 데이터를 전달하기 위한 용도라면 Java의 record를 활용할 수 있다.

1. Record란?

record는 데이터를 간단하게 표현하기 위한 클래스이다.

일반적인 DTO는 다음과 같이 작성할 수 있다.

@AllArgsConstructor
@Getter
public class CommentModifyForm {

    @NotBlank(message = "댓글 내용을 입력해주세요.")
    @Size(min = 2, max = 100, message = "댓글 내용은 2글자 이상 100글자 이하로 입력해주세요.")
    private String content;
}

이를 record로 작성하면 훨씬 간결해진다.

public record CommentModifyForm(

    @NotBlank(message = "댓글 내용을 입력해주세요.")
    @Size(min = 2, max = 100, message = "댓글 내용은 2글자 이상 100글자 이하로 입력해주세요.")
    String content

) {}

record를 사용하면 생성자와 접근 메서드 등을 직접 작성하지 않아도 된다.

2. 값을 가져오는 방식

일반적인 클래스에서는 getter를 사용한다.

form.getContent();

하지만 record에서는 필드명과 동일한 메서드를 사용한다.

form.content();

따라서 컨트롤러에서도 다음과 같이 사용할 수 있다.

@PostMapping("/comments")
public String write(CommentModifyForm form) {

    String content = form.content();

    // ...
}

3. Record는 왜 사용하는가?

record는 데이터를 담아서 전달하는 객체를 간결하게 표현하기 좋다.

특히 다음과 같은 경우에 활용하기 좋다.

  • 요청 데이터를 전달하는 DTO
  • 응답 데이터를 전달하는 DTO
  • 변경할 필요가 없는 데이터
  • 단순한 데이터 전달 객체

반대로 데이터를 계속 변경해야 하거나 복잡한 비즈니스 로직이 필요한 객체라면 일반 클래스를 사용하는 것이 더 적합할 수 있다.

4. Record의 특징

record는 기본적으로 불변 데이터를 표현하기 위한 목적으로 설계되었다.

public record CommentModifyForm(String content) {
}

생성 후에는 content 값을 직접 변경하는 setter를 제공하지 않는다.

따라서 다음과 같은 코드도 사용할 수 없다.

form.setContent("수정된 댓글");

필요한 값을 생성할 때 전달한다.

CommentModifyForm form = new CommentModifyForm("댓글 내용");

댓글