openjdk version "21.0.12" 2026-07-21

code=483920, recipient=Recipient[email=alice@example.com, code=483920] 를 넣고 렌더한다.
* 표시가 프로덕션이 부르는 오버로드다.

[실패한 자리에 변수가 놓인 식]
[[${code.substring(99)}]]
  호출자 모드없음 없음 · 모드있음* 있음 · 로그 있음 · 마스킹 뒤 있음
[[${code.noSuchMethod()}]]
  호출자 모드없음 없음 · 모드있음* 있음 · 로그 있음 · 마스킹 뒤 있음
[[${recipient.noSuchMethod()}]]
  호출자 모드없음 없음 · 모드있음* 있음 · 로그 있음 · 마스킹 뒤 있음
[[${recipient.email.substring(99)}]]
  호출자 모드없음 없음 · 모드있음* 있음 · 로그 있음 · 마스킹 뒤 있음
[[${#numbers.formatDecimal(code, 1, 2)}]]
  호출자 모드없음 없음 · 모드있음* 있음 · 로그 있음 · 마스킹 뒤 있음
[[${code[recipient]}]]
  호출자 모드없음 없음 · 모드있음* 있음 · 로그 있음 · 마스킹 뒤 있음
[[${recipient * 2}]]
  호출자 모드없음 없음 · 모드있음* 있음 · 로그 있음 · 마스킹 뒤 있음

[실패한 자리에 변수가 없는 식]
[[${#strings.substring(code, 99, 200)}]]
  호출자 모드없음 없음 · 모드있음* 없음 · 로그 없음 · 마스킹 뒤 없음
[[${code.noSuchProperty}]]
  호출자 모드없음 없음 · 모드있음* 없음 · 로그 없음 · 마스킹 뒤 없음
[[${code.length() / 0}]]
  호출자 모드없음 없음 · 모드있음* 없음 · 로그 없음 · 마스킹 뒤 없음
[[${code}]]  (이 줄만 변수를 하나도 주지 않는다)
  호출자 모드없음 없음 · 모드있음* 없음 · 로그 없음 · 마스킹 뒤 없음

[OGNL 이나 JDK 가 만든 절]
  [[${code.substring(99)}]]      MethodFailedException: Method "substring" failed for object 483920
  [[${code.noSuchMethod()}]]     MethodFailedException: Method "noSuchMethod" failed for object 483920
  [[${recipient.noSuchMethod()}]] MethodFailedException: Method "noSuchMethod" failed for object Recipient[email=alice@example.com, code=483920]
  [[${recipient.email.substring(99)}]] MethodFailedException: Method "substring" failed for object alice@example.com
  [[${#numbers.formatDecimal(code, 1, 2)}]] IllegalArgumentException: Unable to convert type java.lang.String of 483920 to type of java.lang.Number
  [[${code[recipient]}]]         NoSuchPropertyException: java.lang.String.Recipient[email=alice@example.com, code=483920]
  [[${recipient * 2}]]           NumberFormatException: For input string: "Recipient[email=alice@example.com, code=483920]"
  [[${#strings.substring(code, 99, 200)}]] MethodFailedException: Method "substring" failed for object org.thymeleaf.expression.Strings@<주소>
  [[${code.noSuchProperty}]]     NoSuchPropertyException: java.lang.String.noSuchProperty
  [[${code.length() / 0}]]       ArithmeticException: / by zero
