스마트웹앱콘텐츠전문가/JAVA

Java에서 배열 요소까지 검증하려면? 유효성 어노테이션 완전 분석

9D4U 2025. 4. 9. 17:21
728x90
반응형

Java에서 유효성 검증(Validation)은 웹 애플리케이션의 데이터 무결성을 유지하는 핵심적인 기능입니다. 특히, Spring Boot와 같은 프레임워크에서는 javax.validation 패키지 기반의 어노테이션을 사용하여 객체 필드의 유효성을 손쉽게 검사할 수 있습니다. 하지만 유효성 어노테이션 중 하나인 @NotBlank를 배열 타입(String[])에 적용하려 할 때 문제에 부딪히는 경우가 많습니다.

 

 

 

 

img

 

 

@NotBlank는 배열에 사용할 수 있을까?

 

결론부터 말하자면 @NotBlank는 String 타입에만 적용 가능합니다. 이 어노테이션은 null이 아니고, 공백(" ")이 아닌 문자열인지 검사하는 데 사용되며, 배열이나 리스트 타입에는 동작하지 않습니다.

예를 들어, 아래와 같은 코드는 유효성 검사를 수행하지 못합니다:

 

@NotBlank(message = "필수 입력값입니다.")
private String[] distCd; // ❌ 유효성 검증 안됨!

 

이처럼 배열에 직접 @NotBlank를 붙이더라도 검증기가 이를 인식하지 않기 때문에, 실제 애플리케이션에서 값이 없어도 통과되는 문제가 발생할 수 있습니다.

 

 

 

 

 


배열(String[])에 대한 올바른 유효성 검사 방법

 

배열 자체의 유효성을 검사하려면 다음과 같은 어노테이션을 사용하는 것이 올바른 접근입니다:

 

1. @NotEmpty

배열이 null이 아니고, 길이가 0보다 큰지 확인합니다.

@NotEmpty(message = "배열 값은 필수입니다.")
private String[] distCd;

 

2. @Size(min = 1)

배열의 최소 또는 최대 길이를 지정해 유효성을 검사할 수 있습니다.

@Size(min = 1, message = "하나 이상의 값을 입력해야 합니다.")
private String[] distCd;

✅ 참고: @NotEmpty는 내부적으로 @Size(min = 1)과 비슷한 기능을 제공하지만, 명시적으로 @Size를 사용하면 범위를 더욱 세밀하게 제어할 수 있습니다.

 

 

 

 

 

 


배열 내부 요소까지 검사하고 싶다면?

 

String[] 배열은 요소 단위 검증을 지원하지 않습니다. 배열 내부 값 하나하나가 공백 문자열인지까지 검사하려면 List<@NotBlank String>와 @Valid 조합을 사용해야 합니다.

 

예:

@Valid
@NotEmpty(message = "리스트는 비어 있을 수 없습니다.")
private List<@NotBlank(message = "값은 공백일 수 없습니다.") String> distCd;

 

이렇게 구성하면 다음과 같은 유효성 검사가 가능합니다:

  • 리스트가 null이거나 비어있으면 에러
  • 각 요소가 null이거나 빈 문자열이면 에러

⚠️ 단, 이 기능은 Hibernate Validator 6 이상에서만 정상 작동합니다.

 

 

 

 


커스텀 유효성 검증으로 배열 요소까지 체크하기

 

만약 List<String>이 아닌 String[] 그대로 유지하면서도 각 요소의 공백 여부까지 검증하고 싶다면, 커스텀 Validator를 만들어 적용할 수 있습니다.

예를 들어 @NoBlankInArray 같은 어노테이션을 직접 정의하고, 내부 요소마다 StringUtils.isBlank() 등을 사용해 검사하는 방식입니다. 이는 유효성 로직이 복잡하거나 프로젝트에서 공통적으로 사용하는 규칙이 있을 경우 유용하게 활용됩니다.

 

 

 

 

반응형

 


요약: 타입별 유효성 어노테이션 추천

 

타입 유효성 어노테이션 설명

String @NotBlank null, "", " " 모두 허용 안 됨
String[] @NotEmpty, @Size(min = 1) 배열 비어 있으면 에러
List<String> @Valid + List<@NotBlank String> 리스트와 각 요소 공백 여부 모두 검사 가능

 

 

 

 

 


 

 

 

 

Java의 유효성 검증에서 타입에 맞는 어노테이션 선택은 매우 중요합니다. 특히 @NotBlank와 같이 문자열 전용 어노테이션을 배열이나 컬렉션에 잘못 사용하는 경우 유효성 검사가 무력화될 수 있습니다. 이 글에서 소개한 @NotEmpty, @Size, @Valid 등의 조합을 상황에 맞게 적용하면 보다 견고한 백엔드 유효성 검증 구조를 구축할 수 있습니다.

배열 요소까지 철저히 검증하고 싶다면 커스텀 유효성 검증기를 도입해보는 것도 좋은 선택입니다.

728x90