Thymeleaf null boolean 오류 해결 방법 (SpEL 에러)
문제 상황 (Thymeleaf null boolean 오류)
Thymeleaf 템플릿 렌더링 중 다음과 같은 에러가 발생할 수 있습니다.
cannot convert from null to boolean
이 문제는 특히 특정 사용자나 테스트 계정에서만 발생하는 경우가 많습니다.
실행 환경
- Spring Boot
- Thymeleaf
- Spring Expression Language (SpEL)
근본 원인 (Root Cause)
문제의 핵심은 SpEL의 논리 연산 방식입니다.
다음과 같은 코드가 있다고 가정합니다.
th:value="${cmpyNo == null or isWonmaster ? '' : cmpyNo}"
여기서 isWonmaster가 null이면 다음과 같이 평가됩니다.
true OR null
SpEL은 null을 boolean으로 자동 변환하지 않기 때문에 예외가 발생합니다.
해결 방법 (Solution)
1. View에서 null-safe 처리
가장 간단한 해결 방법입니다.
th:value="${cmpyNo == null or isWonmaster == true ? '' : cmpyNo}"
또는
th:value="${cmpyNo == null or (isWonmaster ?: false) ? '' : cmpyNo}"
2. Controller에서 null 제거 (권장)
근본적인 해결 방법은 View가 아니라 Controller에서 처리하는 것입니다.
model.addAttribute("isWonmaster",
Boolean.TRUE.equals(user.getIsWonmaster()));
이렇게 하면 View에서는 단순하게 사용할 수 있습니다.
th:value="${cmpyNo == null or isWonmaster ? '' : cmpyNo}"
왜 특정 상황에서만 터질까?
이 오류는 값이 null일 때만 발생합니다.
|값|결과| |---|---| |true|정상| |false|정상| |null|오류 발생|
즉, 테스트 계정이나 신규 데이터에서만 발생하는 전형적인 문제입니다.
실무에서 반드시 지켜야 할 규칙
Thymeleaf Boolean 처리 규칙
- Boolean은 항상 null 가능
- SpEL은 null을 허용하지 않음
- 논리 연산 전에 반드시 boolean으로 변환
추천 패턴:
isFlag == true
isFlag ?: false
정리 (Takeaway)
- Thymeleaf 문제가 아니라 SpEL의 설계 문제
- Boolean wrapper는 항상 null 가능성을 고려해야 함
- 가장 좋은 해결 방법은 Controller에서 null 제거