
💡DTO 에 대한 정의와 주요 어노테이션
📘 계층 간 데이터 교환을 위해 사용하는 순수 데이터 객체
DTO 의 사용 목적
주요 사용되는 DTO 어노테이션
| 어노테이션 | 설명 | 위치 |
|---|---|---|
@Getter, @Setter | Lombok - 필드에 대한 getter/setter 자동 생성 | 클래스 위 |
@NoArgsConstructor | Lombok - 기본 생성자 생성 | 클래스 위 |
@AllArgsConstructor | Lombok - 모든 필드 생성자 생성 | 클래스 위 |
@Builder | Lombok - 빌더 패턴 생성 | 클래스 위 또는 생성자 |
@Data | Lombok - @Getter, @Setter, @ToString, @EqualsAndHashCode 포함 | 클래스 위 |
날짜/시간 데이터 변환
//Form 데이터나 요청 파라미터 변환 시
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime time;
//JSON 바디의 날짜 변환 시
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime time;
📘 DTO에 제약조건을 지정하여, 요청 데이터가 유효한지 자동으로 검사하는 기능
주요 사용되는 유효성 검사 어노테이션
| 어노테이션 | 설명 |
|---|---|
@NotNull | null이면 안 됨 |
@NotBlank | null, 빈 문자열, 공백 불가 (문자열에 주로 사용) |
@Size(min, max) | 문자열, 배열, 컬렉션 크기 제한 |
@Email | 이메일 형식 검증 |
@Min, @Max | 숫자의 최소/최대값 |
@Pattern | 정규식 패턴 검사 |
DTO 사용 예시
@Valid 로 받을 때 사용된다//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 "회원가입 성공";
}
}