Back-End

[JAVA] JSTL이란?

Minch13r 2025. 3. 19. 13:43

JSTL(JSP Standard Tag Library)이란?

JSTL은 JSP 페이지에서 자주 사용되는 기능을 태그 형태로 제공하는 라이브러리입니다. JSP 페이지를 더 간결하고 읽기 쉽게 만들어주는 표준 태그 모음이라고 생각하시면 됩니다.

JSTL의 탄생 배경

초기 JSP 페이지에서는 자바 코드를 직접 작성하는 스크립틀릿(<% %>)을 많이 사용했습니다. 하지만 이런 방식은 HTML과 자바 코드가 섞여 가독성이 떨어지고 유지보수가 어려웠습니다. 이러한 문제를 해결하기 위해 JSTL이 등장하게 되었습니다.

JSTL의 주요 태그 라이브러리

JSTL은 용도별로 5가지 태그 라이브러리로 구분됩니다:

1. Core 태그 라이브러리 (접두어: c)

가장 기본적이고 자주 사용되는 태그 모음입니다.

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

 

주요 태그:

  • <c:set>: 변수 설정
  • <c:if>: 조건문
  • <c:choose>, <c:when>, <c:otherwise>: 다중 조건문(if-else if-else와 유사)
  • <c:forEach>: 반복문
  • <c:url>: URL 생성
  • <c:out>: 출력(XSS 방지 기능 포함)

2. 포맷팅 태그 라이브러리 (접두어: fmt)

날짜, 시간, 숫자, 통화 등의 포맷팅을 지원합니다.

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

 

주요 태그:

  • <fmt:formatDate>: 날짜 포맷팅
  • <fmt:formatNumber>: 숫자 포맷팅
  • <fmt:setLocale>: 지역 설정

3. SQL 태그 라이브러리 (접두어: sql)

데이터베이스 작업을 위한 태그입니다.

<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

 

주요 태그:

  • <sql:query>: SQL 쿼리 실행
  • <sql:update>: INSERT, UPDATE, DELETE 쿼리 실행
  • <sql:transaction>: 트랜잭션 처리

4. XML 태그 라이브러리 (접두어: x)

XML 처리를 위한 태그입니다.

<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>

 

주요 태그:

  • <x:parse>: XML 문서 파싱
  • <x:out>: XML 요소 값 출력
  • <x:forEach>: XML 요소 반복 처리

5. 함수 태그 라이브러리 (접두어: fn)

문자열 처리 함수를 제공합니다.

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

 

주요 함수:

  • fn:length(): 컬렉션이나 문자열의 길이 반환
  • fn:substring(): 부분 문자열 추출
  • fn:replace(): 문자열 대체
  • fn:indexOf(): 문자열 검색

JSP와 JSTL의 차이점

JSP(JavaServer Pages)란?

JSP는 자바 기반의 서버 사이드 스크립트 언어로, HTML 내에 자바 코드를 삽입하여 동적인 웹 페이지를 생성할 수 있게 해줍니다. JSP는 서블릿 기술의 확장으로, 컴파일 시 서블릿으로 변환됩니다.

JSP와 JSTL의 주요 차이점:

  1. 목적과 역할:
    • JSP: 자바 코드를 HTML에 직접 삽입하여 동적 웹 페이지를 생성하는 기술
    • JSTL: JSP 페이지 내에서 자주 사용되는 기능을 태그 형태로 제공하는 라이브러리
  2. 문법과 가독성:
    • JSP 스크립틀릿: <% 자바 코드 %> 형태로 자바 코드를 직접 작성
    • JSTL: <c:if>, <c:forEach> 등의 XML 형태의 태그 사용
  3. 유지보수성:
    • JSP 스크립틀릿: HTML과 자바 코드가 섞여 있어 가독성이 떨어지고 유지보수가 어려움
    • JSTL: 태그 기반으로 HTML과 유사한 구조를 가져 가독성이 좋고 유지보수가 용이함
  4. 개발 역할 분담:
    • JSP 스크립틀릿: 자바 지식이 필요하여 디자이너와 개발자 간 협업이 어려움
    • JSTL: HTML과 유사한 태그 구조로 디자이너와 개발자 간 협업이 용이함

JSTL 사용 예시

1. 변수 설정과 출력

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:set var="name" value="홍길동" />
<p>이름: <c:out value="${name}" /></p>

2. 조건문 사용

<c:if test="${age >= 20}">
    <p>성인입니다.</p>
</c:if>

<c:choose>
    <c:when test="${score >= 90}">
        <p>A 등급</p>
    </c:when>
    <c:when test="${score >= 80}">
        <p>B 등급</p>
    </c:when>
    <c:otherwise>
        <p>C 등급</p>
    </c:otherwise>
</c:choose>

3. 반복문 사용

<c:forEach var="i" begin="1" end="5">
    <p>${i}번째 항목</p>
</c:forEach>

<c:forEach var="item" items="${productList}">
    <p>상품명: ${item.name}, 가격: ${item.price}</p>
</c:forEach>

4. 날짜 및 숫자 포맷팅

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<p>
    <fmt:formatDate value="${now}" pattern="yyyy-MM-dd HH:mm:ss" />
</p>

<p>
    가격: <fmt:formatNumber value="${price}" type="currency" currencySymbol="₩" />
</p>

JSP 스크립틀릿과 JSTL 비교 예시

같은 기능을 구현한 두 가지 방식 비교

1. JSP 스크립틀릿 방식:

<table>
    <tr>
        <th>이름</th>
        <th>나이</th>
        <th>상태</th>
    </tr>
    <% 
    List<User> userList = (List<User>)request.getAttribute("userList");
    for(User user : userList) {
    %>
        <tr>
            <td><%= user.getName() %></td>
            <td><%= user.getAge() %></td>
            <td>
                <% if(user.getAge() >= 20) { %>
                    성인
                <% } else { %>
                    미성년자
                <% } %>
            </td>
        </tr>
    <% } %>
</table>

 

2. JSTL 방식:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<table>
    <tr>
        <th>이름</th>
        <th>나이</th>
        <th>상태</th>
    </tr>
    <c:forEach var="user" items="${userList}">
        <tr>
            <td><c:out value="${user.name}" /></td>
            <td><c:out value="${user.age}" /></td>
            <td>
                <c:choose>
                    <c:when test="${user.age >= 20}">성인</c:when>
                    <c:otherwise>미성년자</c:otherwise>
                </c:choose>
            </td>
        </tr>
    </c:forEach>
</table>

JSTL의 장점

  1. 가독성 향상: HTML과 유사한 태그 구조로 코드의 가독성이 좋아집니다.
  2. 유지보수 용이: 자바 코드와 마크업이 분리되어 유지보수가 쉬워집니다.
  3. 보안 강화: <c:out> 태그는 기본적으로 XSS 공격을 방지합니다.
  4. 코드 중복 감소: 자주 사용되는 기능을 태그로 제공하여 코드 중복을 줄입니다.
  5. MVC 패턴 지원: 비즈니스 로직과 프레젠테이션 로직의 분리를 촉진합니다.

JSTL의 단점

  1. 학습 곡선: 처음 사용자에게는 새로운 태그 라이브러리를 학습해야 하는 부담이 있습니다.
  2. 복잡한 로직 처리의 한계: 매우 복잡한 로직은 여전히 자바 코드로 처리하는 것이 효율적일 수 있습니다.
  3. 라이브러리 의존성: 별도의 라이브러리를 추가해야 합니다.

'Back-End' 카테고리의 다른 글

[Spring] 기초 공부  (1) 2025.04.15
JDBC와 JPA  (1) 2025.04.07
[API] 자주 쓰는 API 정리  (4) 2025.03.11
[Kuberbetes] 쿠버네티스의 개념  (0) 2025.03.10
[JSP/Servlet] 웹개발 기초 1  (0) 2025.02.26