Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags more
Archives
Today
Total
관리 메뉴

요리사에서 IT개발자로

스파르타 부트캠프 SpringBoot @Validation란 본문

Spring

스파르타 부트캠프 SpringBoot @Validation란

H.S-Backend 2024. 5. 31. 21:10

Validation 

올바르지 않은 데이터를 걸러내고 보안을 유지하기 위해

데이터검증 (validation)은 여러 계층에 걸쳐서 적용된다.

 

Client의 데이터는 조작이 쉽고

모든 데이터가 정상적인 방식으로 들어오는 것도 아니기에

 

Client Side 뿐만 아니라
Server Side 에서도

데이터 유효성을 검사 해야 할 필요가 있는데

Spring Boot 프로젝트에서 @validated를 이용해서 유효성을 검증할 수 있다.

 


스프링의 기본적인 validation인  Bean Validation은

 

클래스 "필드"에 특정 어노테이션을 적용시키고
 필드가 갖는 제약 조건을 정의하는 구조로 이루어진 검사이다.

 

validator가 비즈니스적 로직에 대한 검증이 아닌,

그 클래스로

생성된 객체 자체의 필드에 대한 유효성 여부를 검증한다.


@Valid, @Validated차이

 

@Valid

Java에서 지원해주는 어노테이션

@Validated

Spring에서 지원해주는 어노테이션

 

@Validated는
@Valid 기능을 포함하고

유효성을 검토할 그룹을 지정할  수 있는 기능을 추가로 갖고있다.


Spring Boot 2.3 이후 부터는 

validation 의존성을 따로 추가해줘야한다.

implementation 'org.springframework.boot:spring-boot-starter-validation'

 

Controller에서 유효성 검사를 적용할 API의 Request 객체 앞에

@Validated 어노테이션을 가해준다.

@PostMapping("/todos")
public TodoResponseDto createTodo(@Validated @RequestBody TodoRequestDto todoRequestDto) {
    return todoService.createTodo(todoRequestDto);
}

 

 

TodoRequestDto를 핸들링할 객체을 정의할 때

Validation 어노테이션을 통해서필요한 유효성 검사를 적용한다.

@Getter
@NoArgsConstructor
public class TodoRequestDto {
    
    @NotBlank(message = "제목이 입력되지 않았습니다.")
    private String title;
    @NotBlank(message = "내용이 입력되지 않았습니다.")
    private String content;
    @NotBlank(message = "작성자가 입력되지 않았습니다.")
    private String writer;
    @NotBlank(message = "비밀번호가 입력되지 않았습니다.")
    private String password;
    

 

유효성 검사에 적용할 수 있는 에너테이션

@Null  // null만 혀용합니다.
@NotNull  // null을 허용하지 않습니다. "", " "는 허용합니다.
@NotEmpty  // null, ""을 허용하지 않습니다. " "는 허용합니다.
@NotBlank  // null, "", " " 모두 허용하지 않습니다.

@Email  // 이메일 형식을 검사합니다. 다만 ""의 경우를 통과 시킵니다
@Pattern(regexp = )  // 정규식을 검사할 때 사용됩니다.
@Size(min=, max=)  // 길이를 제한할 때 사용됩니다.

@Max(value = )  // value 이하의 값을 받을 때 사용됩니다.
@Min(value = )  // value 이상의 값을 받을 때 사용됩니다.

@Positive  // 값을 양수로 제한합니다.
@PositiveOrZero  // 값을 양수와 0만 가능하도록 제한합니다.

@Negative  // 값을 음수로 제한합니다.
@NegativeOrZero  // 값을 음수와 0만 가능하도록 제한합니다.

@Future  // 현재보다 미래
@Past  // 현재보다 과거

@AssertFalse  // false 여부, null은 체크하지 않습니다.
@AssertTrue  // true 여부, null은 체크하지 않습니다.

Exception Handling

위에서 적용한 것 처럼

에러를 처리하는 객체를 따로 생성하여

가공하는 것 외에

 

@ExceptionHandler 어노테이션을 이용해서 예외처리도 가능하다.

@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(IllegalArgumentException.class)
public String exception (Exception e){
    return e.getMessage();
}

 

 

참고

https://velog.io/@_koiil/SpringBoot-Spring-Validation%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%9C%A0%ED%9A%A8%EC%84%B1-%EA%B2%80%EC%A6%9D

 

[SpringBoot] Spring Validation을 이용한 유효성 검증

springboot에 validation을 적용해boja

velog.io

 

https://hyeran-story.tistory.com/81

 

Spring Validation Annotation 총정리

 @Valid를 통해 데이터의 유효성 검사를 수행할 수 있는 javax.validation와 org.hibernate.validation 패키지가 제공하는 Validation Annotation들을 총 정리한 글입니다. 맨 아래에 사용 예시와 테스트 코드가 있

hyeran-story.tistory.com

반응형