Spring 기초 정리 - DTO

Zyoon·2025년 5월 15일

Spring 기초정리

목록 보기
5/18
post-thumbnail

💡DTO 에 대한 정의와 주요 어노테이션


DTO

📘 계층 간 데이터 교환을 위해 사용하는 순수 데이터 객체


DTO 의 사용 목적

  • 컨트롤러 ↔ 서비스, 서비스 ↔ 클라이언트, 엔티티 ↔ 클라이언트 간 데이터 전달 전용
  • 비즈니스 로직 없음 (get/set 만 있음)
  • 클라이언트에 노출하고 싶지 않은 Entity의 필드를 감추거나 변환하기 위해 사용

주요 사용되는 DTO 어노테이션

어노테이션설명위치
@Getter, @SetterLombok - 필드에 대한 getter/setter 자동 생성클래스 위
@NoArgsConstructorLombok - 기본 생성자 생성클래스 위
@AllArgsConstructorLombok - 모든 필드 생성자 생성클래스 위
@BuilderLombok - 빌더 패턴 생성클래스 위 또는 생성자
@DataLombok - @Getter, @Setter, @ToString, @EqualsAndHashCode 포함클래스 위

날짜/시간 데이터 변환

  • 날짜/시간 값을 문자열로 보낼 때, 그 문자열을 LocalDataTime 형식으로 변환시 포맷을 지정
//Form 데이터나 요청 파라미터 변환 시
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime time;

//JSON 바디의 날짜 변환 시
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime time;

유효성검사 (Validation)

📘 DTO에 제약조건을 지정하여, 요청 데이터가 유효한지 자동으로 검사하는 기능


주요 사용되는 유효성 검사 어노테이션

어노테이션설명
@NotNullnull이면 안 됨
@NotBlanknull, 빈 문자열, 공백 불가 (문자열에 주로 사용)
@Size(min, max)문자열, 배열, 컬렉션 크기 제한
@Email이메일 형식 검증
@Min, @Max숫자의 최소/최대값
@Pattern정규식 패턴 검사

DTO 사용 예시

  • 유효성 검사는 DTO의 클래스 필드 위에 넣어준다
  • 검사를 실행하는 시점은 Contoroller 에서 @Valid 로 받을 때 사용된다
  • 실패하게 되면 자동으로 400오류 와 메세지를 반환하게 된다.
//DTO 클래스
@Data
public class UserRequestDto {

    @NotBlank(message = "아이디는 필수입니다.")
    private String username;

    @Size(min = 6, message = "비밀번호는 6자 이상이어야 합니다.")
    private String password;

    @Email(message = "이메일 형식이 아닙니다.")
    private String email;

    @Min(value = 18, message = "18세 이상만 가입 가능합니다.")
    private int age;
}

//Controller 클래스
@RestController
@RequestMapping("/api/users")
public class UserController {

    @PostMapping("/register")
    public String register(@Valid @RequestBody UserRequestDto dto) {
        return "회원가입 성공";
    }
}
profile
기어 올라가는 개발

0개의 댓글