← 개발일지

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 제거