구름톤 유니브 스터디

[구름톤 유니브] Spring 커뮤니티 게시판 validation을 이용한 유효성 검사를 구현

랑 이 2025. 3. 30. 16:23
반응형

유효성 검사를 통해 사용자가 요청을 보냈을 때 올바른 값인지 확인하여 시스템을 안정적으로 관리할 수 있습니다

 

올바르지 않은 값을 서버에 보냈을때 서버는 유효성 검사를 통해서 로직을 실행하기 전값을 검증하여 에러 메시지를 응답하는 구조로 만들어 더욱 효율적으로 처리할 수 있다는 장점이 있습니다

Validation

Spring Boot에서는 Validation 의존성을 통해 유효성 검사 기능을 사용할 수 있습니다

데이터의 유효성 검사를 위한 어노테이션을 제공합니다

 

Spring Boot Validation 적용 방법

implementation("org.springframework.boot:spring-boot-starter-validation")

 

해당 의존성을 Spring Boot 프로젝트의 build.gradle에 추가해줍니다

 

유효성 검증에 사용되는 어노테이션

// 문자열 검증
@Null                   // null만 허용
@NotNull                // null을 허용하지 않음 ""," "는 허용
@NotEmpty               // null, "" 또는 [] 빈값을 허용하지 않음
@NotBlank               // null, ""," " 모두 허용하지 않믕
@Size(min = ?,max = ?)  // 최소 길이, 최대 길이 제한

// 숫자 검증
@Positive               // 값을 양수만 허용
@PositiveOrZero         // 값을 양수와 0만 허용
@Negative               // 값을 음수만 허용
@NegativeOrZero         // 값을 음수와 0만 허용
@Min(value = ?)         // 값의 최솟값 제한
@Max(value = ?)         // 값의 최댓값 제한

// 정규식 검증
@Email                  // 이메일 형식만 허용
@Pattern(regexp="?")    // 직접 작성한 정규식에 맞는 문자열만 허용

// 날짜 검증
@Future                 // 현재보다 미래 
@Past                   // 현재보다 과거

// 조건 검증
@AssertFalse            // false 여부 (null은 체크하지 않음)
@AssertTrue             // true 여부 (null은 체크하지 않음)

PostRequestDto

package com.domain.openboard.dto;

import com.domain.openboard.domain.Post;
import jakarta.validation.constraints.*;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@NoArgsConstructor // 기본 생성자
@AllArgsConstructor// 모든 필드 값을 파라미터로 받는 생성자
@Getter
public class PostRequestDto {

    @NotBlank(message = "제목은 필수입니다.")
    @Size(max = 200,message = "제목은 200자 이하로 작성해주세요.")
    private String title;

    @NotBlank(message = "내용은 필수입니다.")
    private String content;

    @NotBlank(message = "작성자는 필수입니다.")
    @Size(max = 20,message = "작성자는 20자 이하로 작성해주세요.")
    private String name;

    @NotBlank(message = "비밀번호는 필수입니다.")
    @Size(min = 6,max = 20,message = "비밀번호는 6자 이상 20자 이하로 작성해주세요.")
    private String password;

    public Post toEntity(String hashedPassword) { // 생성자를 통해 객체 생성
        return Post.builder()
                .title(title)
                .content(content)
                .name(name)
                .password(hashedPassword)
                .build();
    }
}

저는 게시글을 작성할 때 사용되는 Dto에 적용시켰습니다

  • 제목은 필수로 작성 (200자 이하)
  • 내용은 필수로 작성
  • 작성자는 필수로 작성(20자 이하)
  • 비밀번호는 필수로 작성(6자 ~ 20자 이내)
// 게시글 작성 API
    @PostMapping("/posts")
    public ResponseEntity<PostResponseDto> addPost(@RequestBody @Valid PostRequestDto dto){
        Post post = postService.save(dto);
        return ResponseEntity.status(HttpStatus.CREATED)
                .body(new PostResponseDto(post));
    }

DTO에 유효성 검사의 어노테이션을 작성하여 적용했다면 이를 사용하는 컨트롤러 메서드의 DTO 파라미터@Vali를 작성해야 유효성 검사가 실행되기 때문에 반드시 작성해야 합니다

 

이제 예외 처리를 한 곳에서 관리할 수 있도록 전역 예외 처리 클래스를 만들고, 유효성 검사 실패에 대한 응답도 처리하도록 구현하겠습니다

 

반응형