Java/Spring

[Spring] 7. 유효성 검사

Sigfriede 2023. 6. 29. 18:15

  유효성 검사(validation)란 입력 내용이 요건에 만족하는지 그 타당성을 확인하는 입력 체크를 말합니다. 크게 두 개로 나뉘는데, 단일 항목 검사와 상관 항목 검사가 있습니다.

  단일 항목 검사란 입력 항목 하나에 대해 설정하는 입력 체크 기능입니다. Form 클래스 등의 필드에 어노테이션을 부여해서 사용합니다.

  상관 항목 검사란 여러 필드에 대해 혼합해서 체크하는 것을 말합니다. 상관 항목 검사를 수행하는 방법에는 두 가지가 있습니다. Bean Validation을 사용하는 방법과 스프링 프레임워크에서 제공하는 Validator 인터페이스를 구현하는 방법입니다.

 Validator 인터페이스를 구현하기 위해서는 커스텀 유효성 검사기를 주입하고 WebDataBinder 인터페이스의 addValidators 메서드로 커스텀 유효성 검사기를 등록하여 스프링 MVC에서 이용할 수 있도록 합니다.

  Validator는 스프링에서 범용적으로 사용할 수 있는 오브젝트 검증기를 정의할 수 있는 API입니다. @Controller로 HTTP 요청을 @ModelAttribute 모델에 바인딩 할 때 주로 사용하며, 비즈니스 로직에서 검증 로직을 분리하고 싶을 때에도 사용할 수 있습니다.

  Validator를 이용해 검증한 결과, 아무 문제가 없다면 메소드를 정상 종료합니다. 만약 오류가 발견되면 Errors 인터페이스를 통해 특정 필드나 모델 오브젝트에 대해 오류정보를 등록할 수 있습니다. Errors 인터페이스를 통해서 등록된 오류는 최종적으로 BindingResult에 담겨 컨트롤러에 전달됩니다. 검증 결과를 보고 컨트롤러는 그에 맞는 처리를 하고 뷰를 선택합니다. 일반적으로 폼을 처리하는 컨트롤러 메소드라면 바인딩 또는 검증 과정에서 오류가 하나라도 발견되면 다시 폼을 띄워서 에러 메시지를 보여주고 재입력을 요구합니다.

 

  스프링 부트를 이용한 개발에서 유효성 검사에 대응하는 메시지는 ValidationMessages. properties로, 그 외의 메시지는 messages. properties에 작성합니다.

  ValidationMessage.properties에서 단일 항목 검사 어노테이션과 메시지에 대응하기 위해서는 어노테이션의 FQCN(Fully Qualified Class Name).message가 메시지를 취득하기 위한 키가 됩니다. messages.properties는 '키 = 값' 형태로 정의합니다. 에러 메시지는 ValidationMessages.properties에서 가져오고, 제목과 버튼명은 messages.properties에서 가져옵니다. 검증에서 에러가 발생하지 않으면 값을 요청 파라미터와 같은 필드에 저장하고, 에러가 발생하면 메시지를 취득합니다.

 

  입력 체크를 해야하는 이유는 올바르지 않은 값이 입력되지 않았을 때 시스템 에러가 발생하기 때문입니다. 따라서 입력 체크를 이용하여 사용자의 입력을 제한해서 에러를 방지하고, 사용자가 올바른 값을 입력하도록 유도하여 원하는 결과를 얻을 수 있도록 해야 합니다.

 

  ※ "스프링 프레임워크 첫걸음"이라는 책을 참고하여 쓴 게시글로, 책의 내용을 완전히 담지 않되 공부한 부분을 위주로 정리하여 작성하고자 했습니다. 따라서 글에는 책에서 다루지 않은 내용도 포함되어 있으며 문제가 되거나 부정확한 부분이 있다면 알려주시면 감사하겠습니다.

  ※ 책은 게시글보다 정확한 내용을 담고 있으며 코드, 그림, 예제를 이용하여 개념을 자세히 설명합니다.