JSP

JSP에서 변수 선언하는 방법과 차이점

초코너무조코 2025. 2. 13. 17:10
728x90

JSP에서 변수 선언하는 방법과 차이점

JSP(JavaServer Pages)는 Java 코드를 HTML과 함께 작성할 수 있는 기술입니다. JSP에서 변수를 선언하는 방식에는 여러 가지가 있으며, 각각의 방식에 따라 변수의 생명주기와 접근 범위가 달라집니다. 이번 글에서는 JSP에서 변수를 선언하는 주요 방법과 그 차이점을 정리해보겠습니다.

1. <%@ %> 지시어 (Directive Tag)

<%@ %> 태그는 JSP 페이지의 설정을 지정하는 역할을 합니다. 가장 많이 사용되는 지시어는 page, include, taglib 등이 있습니다.

page 지시어

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
  • language="java": JSP에서 사용할 언어를 지정합니다. 기본값은 Java입니다.
  • contentType="text/html; charset=UTF-8": 응답하는 문서 타입과 문자 인코딩을 설정합니다.
  • pageEncoding="UTF-8": JSP 파일의 인코딩 방식을 지정합니다.
    아래는 page 지시어의 주요 속성과 설명, 기본값을 정리한 표입니다.

  • 속성명 설명 기본값
    language JSP에서 사용할 프로그래밍 언어 지정 (보통 java 사용) java
    extends JSP가 상속받을 클래스를 지정 없음
    import JSP에서 사용할 Java 패키지(클래스) 임포트 없음
    session 세션을 사용할지 여부 (true: 사용, false: 사용 안 함) true
    buffer 출력 버퍼 크기 지정 (none 또는 숫자kb) 8kb
    autoFlush 버퍼가 가득 찼을 때 자동으로 출력할지 여부 (true: 자동 출력, false: 예외 발생) true
    isThreadSafe JSP 페이지의 멀티스레드 처리 여부 (true: 멀티스레드 허용, false: 동기화) true
    info JSP 페이지에 대한 설명 (getServletInfo()로 조회 가능) 없음
    errorPage 현재 JSP에서 에러 발생 시 이동할 페이지 지정 없음
    isErrorPage 현재 JSP가 오류 페이지인지 여부 (true: 오류 페이지로 설정) false
    contentType 응답의 MIME 타입과 문자 인코딩 지정 (ex: "text/html; charset=UTF-8") 없음
    pageEncoding JSP 파일의 문자 인코딩 지정 (ex: "UTF-8") ISO-8859-1
    isELIgnored JSP에서 EL(Expression Language) 사용 여부 (true: EL 무시, false: EL 사용) false (JSP 2.0부터)

include 지시어

다른 JSP 파일을 포함할 때 사용합니다.

<%@ include file="header.jsp" %>

taglib 지시어

JSP 태그 라이브러리를 사용할 때 선언합니다.

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

2. <%! %> 선언문 (Declaration Tag)

<%! %> 태그를 사용하면 클래스 멤버 변수로 선언됩니다. 즉, JSP 페이지가 서블릿으로 변환될 때 해당 변수가 서블릿의 멤버 변수로 포함됩니다. 따라서 페이지 내에서 여러 요청이 오더라도 해당 변수는 유지됩니다.

예제

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%!
    String str1 = "JSP";
    String str2 = "안녕하세요.";
%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>JSP 변수 선언</title>
</head>
<body>
    <h1>처음 만들어봅니다. <%= str1 %></h1>
    <p>
        <% out.println(str2 + str1 + " 입니다. 파이팅 합시다 ^^ "); %>
    </p>
</body>
</html>

특징

  • 선언된 변수는 클래스의 멤버 변수로 저장됩니다.
  • 여러 요청이 와도 값이 유지될 수 있습니다.
  • JSP 페이지가 서블릿으로 변환될 때, 해당 변수는 인스턴스 변수로 생성됩니다.

3. <% %> 스크립트릿 (Scriptlet Tag)

<% %> 태그 내부에서 변수를 선언하면 메서드 내의 지역 변수가 됩니다. 이는 JSP가 변환된 서블릿의 _jspService() 메서드 내부에 포함되므로, 요청이 들어올 때마다 새로 생성됩니다.

예제

<%
    String message = "JSP에서 지역 변수입니다.";
%>
<p><%= message %></p>

특징

  • 지역 변수이므로 요청이 끝나면 사라집니다.
  • 페이지 요청 시마다 새로 생성됩니다.
  • 멀티스레드 환경에서도 안전하게 사용할 수 있습니다.

4. <%= %> 표현식 (Expression Tag)

<%= %> 태그는 변수를 출력할 때 사용됩니다. 단순히 값을 출력하는 용도로 쓰이며, out.println()을 사용한 것과 같은 효과를 가집니다.

예제

<%
    String greeting = "Hello, JSP!";
%>
<p><%= greeting %></p>

특징

  • 변수를 HTML 내에서 직접 출력할 때 사용합니다.
  • 자동으로 out.print()로 변환됩니다.
  • 연산 결과나 문자열도 출력할 수 있습니다.

5. 선언 방식 비교

선언 방식 사용 태그 변수의 범위  특징
지시어 <%@ %> JSP 페이지 설정 JSP 페이지 전체에 영향을 줌
클래스 멤버 변수 <%! %> JSP 페이지 전체 요청이 여러 번 와도 값이 유지됨
지역 변수 <% %> 현재 요청 (메서드 내) 요청이 끝나면 사라짐
출력 <%= %> - 값을 출력하는 용도로 사용

6. 언제 어떤 변수를 사용해야 할까?

  • <%@ %> 지시어: JSP 페이지의 전체적인 설정을 지정할 때 사용합니다.
  • 클래스 멤버 변수 (<%! %>): 특정 JSP 페이지에서 계속 유지되는 변수가 필요할 때 사용하지만, 멀티스레드 환경에서는 주의해야 합니다.
  • 지역 변수 (<% %>): 요청이 올 때마다 새로운 값이 필요할 경우 사용합니다. 대부분의 경우 이 방법이 안전합니다.
  • 출력 태그 (<%= %>): 변수를 화면에 출력할 때 사용합니다.

결론

JSP에서 변수를 선언하는 방법은 여러 가지가 있으며, 각 방식마다 변수가 유지되는 범위와 생명주기가 다릅니다. 대부분의 경우 <% %> 스크립트릿 내에서 변수를 선언하여 사용하며, 특별한 경우가 아니라면 <%! %> 멤버 변수 선언은 지양하는 것이 좋습니다. 또한 <%@ %> 지시어를 활용하면 JSP 페이지의 환경을 보다 명확하게 설정할 수 있습니다.

728x90