오늘 이슈가 Error creating bean with name 'LocalValidatorFactoryBean#0' — Unable to create a Configuration 라는 이름값 그대로였어.
결론은 Bean Validation 구현체(Hibernate Validator)가 없거나, javax ↔ jakarta 전환이 꼬였을 때 딱 등장하더라.
아래는 내가 일하면서 느낀 점을 토대로, Error creating bean with name 'LocalValidatorFactoryBean#0' — Unable to create a Configuration 문제를 정리한 해결 루트다.
증상: LocalValidatorFactoryBean 초기화 실패
컨텍스트 초기화에서 org.springframework.validation.beanvalidation.LocalValidatorFactoryBean 생성이 실패하고,
메시지로 “Unable to create a Configuration, because no Bean Validation provider could be found”가 뜨면 구현체 미탑재 또는 버전 미스매치야.
가장 빠른 해결: spring-boot-starter-validation 추가
Spring Boot 프로젝트면 spring-boot-starter-validation 추가.
Error creating bean with name 'LocalValidatorFactoryBean#0' — Unable to create a Configuration 케이스 대부분이 여기서 해결.
<!-- Maven --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
// Gradle (Kotlin DSL) implementation("org.springframework.boot:spring-boot-starter-validation")
javax → jakarta 전환 체크 (Boot 3.x)
Boot 3.x/Spring 6로 마이그레이션했다면 javax.validation.* 대신 jakarta.validation.*를 써야 됨.
import 하나라도 javax가 남아 있으면 동일 증상(Unable to create a Configuration)이 반복될 수 있다.
부트 미사용/얇은 세팅: Hibernate Validator 직접 추가
순수 Spring 또는 스타터 최소 사용이라면 직접 의존성을 추가하면 된다. 자바 17+ 기준, Jakarta Validation 3.x + Hibernate Validator 9.x 조합이 무난하다.
<dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> </dependency> <dependency> <!-- 순수 JVM 실행에서 메시지 포맷팅 필요 시 --> <groupId>org.glassfish</groupId> <artifactId>jakarta.el</artifactId> </dependency>
테스트에서만 실패? testRuntime / 멀티모듈 클래스패스 점검
로컬 실행은 정상인데 JUnit에서만 Error creating bean with name 'LocalValidatorFactoryBean#0' — Unable to create a Configuration가 난다면, 테스트 스코프에서 검증 구현체가 누락됐을 확률이 높다. 멀티모듈이면 BOM/스코프를 다시 맞춰줘야됨.
메서드 검증 활성화: @Validated + jakarta 애노테이션
메서드 레벨 검증은 클래스에 @Validated가 붙고, 파라미터/반환에 jakarta.validation 애노테이션이 있어야 동작한다.
구현체가 없으면 이 단계에서도 동일 증상이 발생하니 선행 의존성부터 확실히 해야된다.
간단 체크리스트 (실제로 점검해 본 순서)
- Boot 프로젝트? →
spring-boot-starter-validation추가 - Boot 3.x? → import 전부
jakarta.validation.*로 통일 - Non-Boot? →
hibernate-validator+ 필요 시jakarta.el - 테스트만 실패? → test 스코프/멀티모듈 클래스패스 재확인
- 메서드 검증? →
@Validated+ jakarta 애노테이션 확인
샘플: DTO · 컨트롤러 · 예외 응답
import jakarta.validation.constraints.*;
public record SignUpReq(
@NotBlank String username,
@Email String email,
@Size(min = 8) String password
) {}
@RestController @RequiredArgsConstructor @Validated class UserApi {
@PostMapping("/users")
public ResponseEntity<?> create(@Valid @RequestBody SignUpReq req) {
return ResponseEntity.ok().build();
}
}
내가 겪은 원인
공용 모듈에 javax.validation 어노테이션이 남아 있었고, 신규 서비스만 Boot 3.x로 올라간 상태.
결국 Error creating bean with name 'LocalValidatorFactoryBean#0' — Unable to create a Configuration가 계속 떠서,
jakarta로 전량 전환 + spring-boot-starter-validation 추가 후 바로 해결됨. 다음부턴 마이그레이션 체크리스트에 “검증 패키지 전환”을 꼭 넣어야 할듯.
공식 문서로 마무리 검증
설정 끝났으면 공식 문서로 빠르게 교차 확인하자. 버튼은 내가 즐겨 쓰는 북마크야.
요약
Error creating bean with name 'LocalValidatorFactoryBean#0' — Unable to create a Configuration 오류가 발생하면,
1) 부트면 spring-boot-starter-validation 추가,
2) Boot 3.x면 jakarta.validation.*로 통일,
3) Non-Boot면 hibernate-validator(+ 필요 시 jakarta.el) 추가, 4) 테스트 스코프/멀티모듈 클래스패스 점검.
이 순서로 가면 보통 바로 해결됨.