오늘 일하다가 레거시 화면에서 @org.apache.commons.lang3.StringUtils@isNotBlank({변수}) 이렇게 써놓은 걸 보고 잠깐 멈칫했어. 예전에 Struts2로 만든 페이지들에서 자주 보던 OGNL 문법인데, 막상 까먹기 쉬운거라 찾아본거랑 경험담임

@org.apache.commons.lang3.StringUtils@isNotBlank({변수})란?
@org.apache.commons.lang3.StringUtils@isNotBlank({변수})는 OGNL 문법이야. @풀패키지.클래스명@정적메서드(인자) 형태로 정적 메서드를 호출해. Struts2의 JSP/태그에서 조건식 쓸 때 흔히 보이는 패턴으로 Apache Commons Lang의 StringUtils.isNotBlank를 뷰 단에서 바로 호출한 것.
isBlank vs isNotBlank 간단 구분
isBlank(null)→trueisBlank("")→trueisBlank(" ")→true(공백만 있어도 blank)isNotBlank(x)는 위의 반대. 즉, 글자가 하나라도 있으면true.
그래서 변수 입력값 검증할 때 @org.apache.commons.lang3.StringUtils@isNotBlank({변수})로 널/빈/공백까지 한 번에 거를 수 있어.
Struts2/OGNL에서 실제로 쓰는 위치
<s:if test="@org.apache.commons.lang3.StringUtils@isNotBlank({변수})"> <s:property value="{변수}"/> </s:if>
{변수}가 비어있어.
Spring/Thymeleaf에서는 어떻게 하는가?
Thymeleaf(SpringEL)에서는 OGNL 문법이 아니고 T(클래스)로 정적 메서드를 불러서 아래처럼 사용
<div th:if="${ T(org.apache.commons.lang3.StringUtils).isNotBlank({변수}) }"> <span th:text="${{변수}}"></span> </div>
개인적으로는 뷰에서 로직을 최소화하는 편을 더 선호해. 컨트롤러나 서비스에서 Model에 이미 검증된 값을 담아주면 템플릿은 표시만 하니까 유지보수도 쉬워지더라.
JSTL/표준 EL로는 대체가 될까?
순수 JSTL만으로는 정적 메서드 호출이 불편해. 대신 간단히 체크하려면 empty를 써서 널/빈문자열을 걸러내고, 공백만 있는 경우까지 잡으려면 fn:trim과 조합하면 돼.
<c:if test="${not empty {변수} and fn:length(fn:trim({변수})) > 0}"> ${{변수}} </c:if>
서버단(자바)에서 미리 처리하는 방식
실제로는 컨트롤러에서 미리 정리해두는 게 제일 깔끔했어. 이렇게 하면 템플릿은 조건 덜어내고 표현에 집중할 수 있음.
String displayYear = StringUtils.isNotBlank({변수}) ? {변수} : null; model.addAttribute("displayYear", displayYear);
<!-- 템플릿 --> <div th:if="${displayYear != null}"> <span th:text="${displayYear}"></span> </div>
빌드 설정(의존성) 확인 포인트
레거시라 버전 섞일 때가 많더라. commons-lang3가 빠져있으면 당연히 StringUtils 못 써. 의존성 점검 필수
<!-- Maven --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.14.0</version> <!-- 예시 --> </dependency>
보안/성능적으로 느낀 점
- 뷰에서 과한 로직 지양: 표현만 하게 두면 테스트가 쉬움.
- OGNL 호출 최소화: 표현식 복잡해지면 디버깅이 귀찮아. 컨트롤러에서 정리 추천.
- 널/공백 체크 일관성: 팀 컨벤션으로
isNotBlank고정하면 코드 리뷰가 편함.
짧은 체크리스트
- 레거시 Struts2라면 @org.apache.commons.lang3.StringUtils@isNotBlank({변수}) 문법가능.
- Thymeleaf면
T(org.apache.commons.lang3.StringUtils).isNotBlank(...)로 변경. - JSTL만 쓰면
fn:trim조합으로 대체. - 가능하면 서버단에서 값 정리 후 뷰는 단순 표시.
- 의존성(commons-lang3) 버전 충돌 없는지 점검.
마무리
결론적으로, @org.apache.commons.lang3.StringUtils@isNotBlank({변수})는 레거시 뷰에서 빠르게 null/blank 체크하기엔 편함. 근데 장기적으로는 템플릿 로직을 줄이고 서버에서 처리하도록 리팩토링하는 게 유지보수에 훨씬 좋음. 요즘 코드리뷰하면서도 이런 부분 위주로 손보는 중이고, 새로 만드는 화면은 Thymeleaf 표준 문법으로 가는 게 확실히 깔끔하긴 하더라.
'공부방 > Java' 카테고리의 다른 글
| 자바에서 소문자+대문자 시작 필드의 getter 방법 (0) | 2025.11.16 |
|---|---|
| j_spring_security_check 사용법 (1) | 2025.11.01 |
| EgovMap not found 오류 및 해결 방법 (0) | 2025.10.05 |
| Lombok 사용법, 어노테이션, 예제 (1) | 2025.09.26 |
| java.io.Serializable (0) | 2025.08.26 |