본문 바로가기
공부방/오류

Error creating bean with name 'LocalValidatorFactoryBean#0' — Unable to create a Configuration 해결

by SmartCow 2025. 11. 7.

오늘 이슈가 Error creating bean with name 'LocalValidatorFactoryBean#0' — Unable to create a Configuration 라는 이름값 그대로였어.
결론은 Bean Validation 구현체(Hibernate Validator)가 없거나, javaxjakarta 전환이 꼬였을 때 딱 등장하더라.
아래는 내가 일하면서 느낀 점을 토대로, Error creating bean with name 'LocalValidatorFactoryBean#0' — Unable to create a Configuration 문제를 정리한 해결 루트다.

Bean Validation provider not found 에러 개요

증상: 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/스코프를 다시 맞춰줘야됨.

JUnit testRuntime classpath 점검

메서드 검증 활성화: @Validated + jakarta 애노테이션

메서드 레벨 검증은 클래스에 @Validated가 붙고, 파라미터/반환에 jakarta.validation 애노테이션이 있어야 동작한다.
구현체가 없으면 이 단계에서도 동일 증상이 발생하니 선행 의존성부터 확실히 해야된다.

간단 체크리스트 (실제로 점검해 본 순서)

  1. Boot 프로젝트?spring-boot-starter-validation 추가
  2. Boot 3.x? → import 전부 jakarta.validation.*로 통일
  3. Non-Boot?hibernate-validator + 필요 시 jakarta.el
  4. 테스트만 실패? → test 스코프/멀티모듈 클래스패스 재확인
  5. 메서드 검증?@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 추가 후 바로 해결됨. 다음부턴 마이그레이션 체크리스트에 “검증 패키지 전환”을 꼭 넣어야 할듯.

javax에서 jakarta로 전환 체크리스트

공식 문서로 마무리 검증

설정 끝났으면 공식 문서로 빠르게 교차 확인하자. 버튼은 내가 즐겨 쓰는 북마크야.

요약

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) 테스트 스코프/멀티모듈 클래스패스 점검.
이 순서로 가면 보통 바로 해결됨.