JSP에서 Java 코드를 사용하지 않는 방법: 최신 JSP 2 기술 활용
JSP에서 <% %>
형태의 스크립틀릿(scriptlet)을 사용하는 것은 이제 구식으로 간주됩니다. JSP 2 이후로 스크립틀릿 없이 더 현대적이고 유지보수 가능한 코드를 작성하는 방법이 제안되었습니다. 이 글에서는 스크립틀릿을 대체하는 주요 기법과 이를 사용하는 이유를 소개합니다.
1. 스크립틀릿 사용의 문제점
스크립틀릿은 다음과 같은 이유로 비효율적입니다:
- 재사용성 부족: 동일한 코드를 여러 JSP 파일에서 반복 작성해야 합니다.
- 유지보수성 저하: 코드와 HTML이 혼합되어 읽기 어렵고 수정하기 번거롭습니다.
- 디버깅 및 테스트 어려움: 예외 발생 시 빈 화면만 표시되며, 단위 테스트가 불가능합니다.
- MVC 패턴 위반: 비즈니스 로직과 프레젠테이션 로직이 섞입니다.
2. 스크립틀릿 대안: Expression Language (EL)와 JSTL
**Expression Language (EL)**과 **JSTL (JavaServer Pages Standard Tag Library)**는 JSP에서 스크립틀릿을 완전히 대체할 수 있습니다.
예제: 데이터 출력
스크립틀릿:
<%= request.getParameter("name") %>
EL 사용:
${param.name}
3. JSTL 사용 예제
JSTL은 JSP에서 반복문, 조건문, 데이터 출력 등의 작업을 간단히 수행할 수 있는 태그를 제공합니다.
반복문
스크립틀릿:
<%
for (Product product : products) {
%>
<tr>
<td><%= product.getName() %></td>
<td><%= product.getPrice() %></td>
</tr>
<%
}
%>
JSTL:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<table>
<c:forEach var="product" items="${products}">
<tr>
<td>${product.name}</td>
<td>${product.price}</td>
</tr>
</c:forEach>
</table>
조건문
스크립틀릿:
<%
if (user != null) {
out.print("로그인 되었습니다.");
}
%>
JSTL:
<c:if test="${not empty user}">
로그인 되었습니다.
</c:if>
4. Java 코드와 JSP의 분리
JSP는 프레젠테이션 로직만을 처리해야 하며, 비즈니스 로직은 서블릿, 서비스 클래스 또는 유틸리티 클래스로 이동해야 합니다.
서블릿 예제
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Product> products = productService.getAllProducts();
request.setAttribute("products", products);
request.getRequestDispatcher("/WEB-INF/products.jsp").forward(request, response);
}
5. EL 함수 정의
EL로 사용자 정의 함수를 생성하여 복잡한 작업을 단순화할 수 있습니다.
사용자 정의 함수 예제
- 함수 정의:
public class StringFunctions {
public static String capitalize(String input) {
return input == null ? "" : input.substring(0, 1).toUpperCase() + input.substring(1);
}
}
- TLD 파일 등록:
<function>
<name>capitalize</name>
<function-class>com.example.StringFunctions</function-class>
<function-signature>java.lang.String capitalize(java.lang.String)</function-signature>
</function>
- JSP에서 사용:
<%@ taglib uri="/WEB-INF/tags/functions.tld" prefix="fn" %>
${fn:capitalize(param.name)}
6. 웹 애플리케이션 설정: 스크립틀릿 사용 방지
스크립틀릿 사용을 강제로 차단하려면 web.xml
에 다음을 추가하세요:
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<scripting-invalid>true</scripting-invalid>
</jsp-property-group>
</jsp-config>
결론
JSP 2 이후, EL과 JSTL을 사용하여 스크립틀릿을 완전히 대체할 수 있습니다. 이렇게 하면 코드 유지보수성과 가독성이 크게 향상되고, MVC 패턴에 더 잘 부합하는 구조를 갖출 수 있습니다. EL과 JSTL은 최신 JSP 개발의 필수 도구로 자리 잡았습니다.