스프링 MVC 2편 - 검증(1)

hyuk·2024년 1월 30일
0
post-thumbnail

📌 검증 요구사항

보통 검증에 대표적인 예로 로그인과 회원가입을 예로 들 수 있다.

  • 특정 필드의 타입 오류

  • 특정 필드의 공백

  • 특정 필드의 범위 오류
    EX ) 상품의 수량은 5개 이상, 최소 주문금액은 10,000원 이상 등

이 외에도 개발하고자 하는 애플리케이션에 맞는 검증을 확인해야 한다.

이러한 검증 비즈니스 로직은 컨트롤러의 역할 중 하나이다.

클라이언트 검증, 서버 검증

  • 클라이언트에서의 검증은 보안에 취약
  • 서버에서만의 검증은 고객 사용성의 부족

둘이 적절히 섞은 검증을 사용하여, 최종적으로 서버 검증은 필수


📌 BindingResult

검증하고자 하는 부분에서 오류가 발생하였을 경우에 오류 정보를 저장해야 한다.

그렇다면 오류 정보를 어떻게 관리하고, 처리할까? 바로 스프링에서 제공하는 BindingResult !

BindingResult는 스프링이 제공하여 검증 오류를 보관하는 객체로, @ModelAttribute에 데이터 바인딩할 때 오류가 발생해도 컨트롤러는 호출된다.

BindingResult에 검증 오류를 적용하는 방법

  1. 타겟 객체에 바인딩이 실패 시, 스프링이 FieldError 생성해서 BindingResult에 넣음

  2. 개발자가 직접 정의하여 사용

  3. Validator 사용

BindingResult 메서드

BindingResult가 제공하는 rejectValue(), reject() 메소드를 알아보자.

1) rejectValue() :

 void rejectValue(@Nullable String field, String errorCode,
				  @Nullable Object[] errorArgs, @Nullable String defaultMessage);
  • field : 오류 필드명
  • errorCode : 오류 코드( messageResolver 오류 코드 )
  • errorArgs : 오류 메시지에서 {0}을 치환하기 위한 값
  • defaultMessage : 오류 메시지를 찾을 수 없을 때 사용하는 기본 메시지

2) reject() :

void reject(String errorCode, @Nullable Object[] errorArgs,	
			@Nullable String defaultMessage)
  • 위와 동일

위 메서드를 활용하면 FieldError, ObjectError를 직접 생성하지 않고도 검증 오류를 다룰 수 있게 된다.

BindingResult br 파라미터 위치는 @ModelAttribute A a 다음에 와야 한다.


📌 오류 코드 메시지 처리

스프링의 경우, MessageCodesResolver 기능을 제공한다. 이 기능은 rejectValue() , reject() 메서드 내부에서 메시지 활용을 위해 사용되는 기능으로 다음과 같은 규칙으로 메시지를 관리할 수 있다.

1) 객체 오류 메시지 처리 규칙

1 : code + "." + object name
2 : code

2) 필드 오류 메시지 처리 규칙

1 : code + "." + object name + "." + field
2 : code + "." + field
3 : code + "." + field type
4 : code

범용성 있는 메시지 - 우선순위가 낮은 메시지
중요한 메시지 - 우선순위가 높은 메시지


📌 정리

  1. rejectValue() / reject() 호출

  2. MessageCodesResolver를 사용해서 검증 오류 코드로 메시지 코드들을 생성

  3. new FieldError() / new ObjectError()를 생성하면서 메시지 코드들을 보관

  4. th:erros에서 메시지 코드들로 메시지를 순서대로 메시지에서 찾고, 노출


📌 본 포스트는 스프링 MVC 2편 - 백엔드 웹 개발 핵심 기술 통해 학습한 내용을 요약 및 정리한 것입니다.

profile
차곡차곡쌓아가는학습노트

0개의 댓글