Backend/JSP

[JSP] JSP(Java Server Pages)에 관한 고찰(feat. 용어 정리)

코코무 2024. 1. 30. 17:57

안녕하세요, 오늘은 JSP를 진하게 알아가는 시간을 가져보도록 하겠습니다.

부디 이 포스팅을 계기로 JSP와 가까운 사이가 되기를 바래봅니다.

 

 

 

 

 

JSP란?

 Java Server Pages(이하 JSP)는 동적인 웹 페이지를 개발하기 위한 웹 프로그래밍 기술입니다. 자바언어를 사용하여 서버 측에서 웹 페이지들을 생성해 웹 브라우저로 전송합니다.

자바를 서버 개발 언어로 자리 잡게 해준 고마운 친구입니다.

 

 본격적으로 JSP에 들어가기 전에 기본 용어에 대한 개념을 간단하되 명확히 짚고 넘어가도록 하겠습니다.

 

서버(Server)와 웹 서버(Web Server)

 

 사전적 의미로는 '서비스(Service)'를 제공하는 사람이라는 뜻입니다.

 

그러나 현대에 이르러 인터넷 네트워크 환경에서 다른 컴퓨터에게 다양한 기능, 데이터, 서비스(요청 값)를 제공하는 컴퓨터나 소프트웨어 전반이라는 광범위한 의미를 가지게 되었습니다.

쉽게 말해 웹에서 서비스를 제공하는 컴퓨터 시스템(제공자)입니다.

 

서버의 예로는 쇼핑몰 서버, 게임 서버, 메일 서버 등이 있습니다.

 

웹 컨테이너(Web Container)

 

웹 서버가 전송해준 요청을 기초로 동적인 페이지를 생성하여 웹 서버로 돌려줍니다.

(동적 페이지란 사용자마다 다른 결과로 응답해주는 페이지를 말합니다(non-static))

 

 

웹 페이지(Web Page)

 

 World Wide Web(이하: www) 상에 있는 개개의 문서를 말합니다.

책과 달리, 두 개 이상의 웹 페이지들을 서로 하이퍼링크로 연결시킬 수 있습니다.

대부분의 웹 페이지는 웹 서버에 저장되며 HTML, CSS, JS, 그림, 플래시와 같은 동영상으로 구성되어 있습니다. 이러한 웹 페이지들은 HTTP를 통해 전송하거나 받아옵니다.

인터넷 사용자들은 컴퓨터의 웹 브라우저를 통해 웹 페이지들을 읽습니다. 또 의미가 같은 웹 페이지들의 모임을 웹사이트라고 합니다.

 

 

웹 브라우저(Web Brouser)

 

인터넷 브라우저 또는 웹 탐색기라고도 하는 웹 브라우저는 웹 서버에서 이동하며 쌍방향으로 통신하고 HTML 문서나 파일을 출력하는 그래픽 사용자 인터페이스 기반의 응용 소프트웨어입니다.

주요 웹 브라우저로는 구글 크롬, 인터넷 익스플로러, 마이크로소프트 엣지, 사파리 등이 있습니다.

 

 

 

WAS(Web Application Server)

 

웹 애플리케이션과 서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 프레임워크입니다.

컴퓨터에서 운영체제(윈도우, 리눅스 등)와 비슷한 역할을 하며 톰캣, 웹 로직, 웹스피어 등이 있습니다.

 

HTTP / HTTPS 

 

www에서 웹 서버와 사용자 사이의 통신을 위한 프로토콜입니다.

(프로토콜이란 네트워크를 통해 컴퓨터들이 주고 받는 정보의 규정된 약속입니다(공통언어: 표준화).

 

포트

 

http://IP주소:포트번호(서버 안쪽으로 들어가는 내선번호) > wf.msc(방화벽에서 내선번호를 열어 외부에서 접속할 수 있게 설정)

 


 

이 개념들을 가지고 다시 JSP를 정리해보면,

인터넷 네트워크 환경에서 다양한 기능, 데이터, 서비스를 제공하는 서버에서 WWW에 있는 개개의 문서들을 생성하여 브라우저로 전송하는 것이 JSP라고 할 수 있습니다.

 

 

<%  ... %>로 둘러싸인 스크립트 영역이 있으며 실행 시에 javax(Tomcat ver 10.0이상은 '자카르타').servlet.http.HttpServlet 클래스를 상속 받은 Java 소스 코드로 변환한 다음 컴파일 되어 실행됩니다. 

 

이 JSP 파일을 Servlet 클래스로 변환하고 실행시켜 주는 역할을 하는 프로그램을 서블릿 컨테이너(Servlet Container)라고 부르는데 대표적으로 Tomcat이 있습니다. 하나의 JSP 페이지가 하나의 Java 클래스이기 때문에 모든 Java 라이브러리를 끌어다 쓸 수 있습니다.

 

 

JSP의 동작

 

그렇다면 JSP의 자세한 동작 과정을 알아보도록 하겠습니다.

 

대략적으로는 JSP가 실행되면 자바 서블릿(Servlet)으로 변환되며 웹 애플리케이션 서버에서 동작됩니다.

그러면서 필요한 기능을 수행하고 그렇게 생성된 데이터를 웹페이지와 함께 클라이언트로 응답합니다.

 

1. 브라우저가 웹 서버에게 JSP에 대한 요청 정보를 전달한다.

2. 브라우저가 요청한 JSP가 최초로 요청했을 경우에만 JSP로 작성된 코드가 서블릿 코드로 변환된다(java 파일 생성).

3. 서블릿 코드를 컴파일해서 실행 가능한 bytecode로 변환시킨다(class 파일 생성).

4. 서블릿이 실행되어 요청을 처리하고 응답 정보(HTML 형태)를 생성한다.

 

 

JSP 파일의 기본 구조

JSP의 주된 목적은 HTML 파일을 생성하는 것입니다.

- 지시어: JSP 페이지를 자바(서블릿) 코드로 변환하는데 필요한 정보를 JSP엔진에게 알려줍니다. <%@ 지시어 %>

- 선언부: 스크립틀릿이나 표현식에서 사용할 멤버 변수나 메서드를 선언합니다. <%! 선언부 %>

- 표현식: 실행 결과로 하나의 값이 남은 문장입니다. <%= 변수 %>

- 스크립틀릿: JSP 페이지가 요청을 받을 때 실행되어야 할 자바 코드를 작성하는 영역입니다. <% 자바코드 %>

 

 

1. 지시어(Directive) → 지시자, 디렉티브

JSP 페이지를 자바(서블릿) 코드로 변환하는데 필요한 정보를 JSP엔진에게 알려주는 코드로

주로 스크립트 언어나 인코딩 방식 등을 설정합니다(이클립스로 자동생성 시 대부분 들어갑니다).

 

 1) page 지시어: JSP 페이지에 대한 정보 설정

- 문서의 타입, 에러페이지, MIME 타입과 같은 정보를 설정

- Info: 페이지에 대한 설명을 입력

- Language: 스크립팅 언어를 지정(기본값: java)

- contentType: 생성할 MIME(멀티미디어, 확장자) 타입을 지정

- pageEncoding: charset과 같이 인코딩을 지정(기본값: ISO-8859-1 -> UTF-8로 변경)

- import: 페이지에서 사용할 자바 패키지와 클래스 지정

- session: 세션 사용 여부를 지정(기본값: true)

- buffer: 출력 버퍼(임시메모리)의 크기 지정(none: 사용 안 함, 기본 8KB)

- autoFlush: 출력 버퍼가 모두 차면 자동으로 비울지 결정(기본값: true)

- trimDirective Whitespaces: 지시어 선언으로 인한 공백을 제거(기본값: false)

- errorPage: 해당 페이지에서 에러가 발생했을 때 에러 발생 여부를 보여줄 페이지를 지정

- isErrorPage: 해당 페이지가 에러를 처리할 지 여부를 지정(기본값: false)

 

 2) include 지시어: 외부 파일을 현재 JSP 페이지에 포함시킴

 3) taglib 지시어: 표현언어에서 사용할 자바 클래스나 JSTL을 선언

https://pre-walkingdeveloper.tistory.com/108

 

2. 스크립틀릿(Scriptlet)

JSP 페이지 내에서 자바 코드를 직접 삽입할 수 있는 영역입니다.

<% %> 태그를 사용하여 스크립틀릿을 작성할 수 있으며, 이러한 코드는 JSP 페이지가 서블릿으로 변환될 때 그대로 자바 코드로 포함됩니다. 스크립틀릿은 주로 데이터 처리, 제어문 실행, 변수 선언 및 초기화에 사용됩니다.

<% 
	// 자바 코드 작성 
    int number = 10; 
    String message = "Hello, JSP!"; 
%>

스크립틀릿 내에서 선언된 변수는 페이지 내 다른 스크립틀릿이나 표현식에서도 접근할 수 있습니다.

 

3. 표현식(Expression)

표현식은 JSP 페이지 내에서 자바 표현식을 계산하고 그 결과를 출력하는 데 사용됩니다. <%= %> 태그를 사용하여 표현식을 작성할 수 있으며, 표현식의 결과는 자동으로 페이지에 출력됩니다.

<%= "The value of number is: " + number %>

위 예시에서는 number 변수의 값을 문자열과 결합하여 출력합니다.

 

4. 선언문(Declaration)

선언문은 JSP 페이지 내에서 메서드나 변수를 선언하는 데 사용됩니다. <%! %> 태그를 사용하여 선언문을 작성할 수 있으며, 선언된 메서드나 변수는 JSP 페이지가 서블릿으로 변환될 때 클래스의 멤버로 포함됩니다.

<%! 
	// 메서드 선언 
    public String getWelcomeMessage() { 
    	return "Welcome to JSP!"; 
    } 
    
    // 변수 선언 
    private int counter = 0; 
%>
 

5. 주석(Comment)

JSP 주석은 JSP 코드 내에서 주석을 작성하는 데 사용됩니다. JSP 주석은 HTML 주석과 자바 주석으로 구분됩니다.

<%-- JSP 주석: 이는 클라이언트에게 전송되지 않습니다 --%> 
<!-- HTML 주석: 이는 클라이언트에게 전송됩니다 --> 
<% 
	// 자바 주석: 이는 서블릿 코드 내에서만 사용됩니다 
%>
 

6. 표현 언어(Expression Language, EL)

표현 언어(EL)는 JSP에서 자바 객체의 속성이나 컬렉션 요소에 접근하는 간결한 방법을 제공합니다. ${} 구문을 사용하여 EL 표현식을 작성할 수 있습니다. EL은 JSP 2.0에서 도입되었으며, 주로 JSP 페이지 내에서 데이터 바인딩 및 출력에 사용됩니다.

${user.name} 
${user.age}

위 예시에서는 user 객체의 name 및 age 속성에 접근하여 출력합니다.

https://pre-walkingdeveloper.tistory.com/107

 

7. 액션 태그(Action Tag)

액션 태그는 JSP 페이지 내에서 JSP 엔진이 수행해야 할 작업을 지정하는 데 사용됩니다. 주로 자바빈(JavaBean)과의 상호작용, 포워딩, 포함 작업을 수행하는 데 사용됩니다.

<jsp:useBean id="user" class="com.example.User" scope="session" /> 
<jsp:setProperty name="user" property="name" value="John Doe" /> 
<jsp:getProperty name="user" property="name" />

위 예시에서는 com.example.User 클래스를 사용하여 user라는 자바빈을 생성하고, 해당 자바빈의 name 속성을 설정하고 출력합니다.

 

✋여기서 잠깐, jstl과 액션 태그가 유사해 보이는데 어떤 점이 다른지 궁금해서 알아보고 넘어가겠습니다.

 

액션 태그와 JSTL은 모두 JSP(JavaServer Pages)에서 사용되는 태그 라이브러리이지만, 목적과 사용 방식에 있어서 차이점이 있습니다.

 

액션 태그(Action Tags)

액션 태그는 JSP 표준 태그 라이브러리의 일부로, 주로 자바빈(JavaBean)과의 상호작용, 페이지 포워딩 및 포함 작업 등을 수행하기 위해 사용됩니다. 액션 태그는 JSP 사양의 일부이며, 자바 객체와 JSP 간의 상호작용을 돕기 위해 설계되었습니다.

 

주요 액션 태그

  1. jsp:useBean: 자바빈을 선언하고 사용할 수 있게 합니다.
  2. jsp:setProperty: 자바빈의 속성을 설정합니다.
  3. jsp:getProperty: 자바빈의 속성 값을 가져옵니다.
  4. jsp:include: 다른 JSP 파일을 현재 페이지에 포함시킵니다.
  5. jsp:forward: 요청을 다른 페이지로 포워딩합니다.
  6. jsp:param: 요청 매개변수를 설정합니다.
<jsp:useBean id="user" class="com.example.User" scope="session" /> 
<jsp:setProperty name="user" property="name" value="John Doe" /> 
<jsp:getProperty name="user" property="name" /> 
<jsp:include page="header.jsp" /> 
<jsp:forward page="nextPage.jsp" />

 

JSTL(JavaServer Pages Standard Tag Library)

JSTL은 JSP에서 공통적으로 사용되는 작업을 쉽게 수행할 수 있도록 돕는 표준 태그 라이브러리입니다. JSTL은 다양한 기능을 제공하며, 조건부 로직, 반복, 국제화, XML 처리, SQL 작업 등을 포함합니다. JSTL은 JSP의 표현력을 높이고, JSP 코드에서 자바 코드를 최소화하도록 돕습니다.

 

주요 JSTL 라이브러리

  1. 코어 태그 라이브러리: 조건부 처리, 반복, 변수 지원, URL 관리 등의 기능을 제공합니다.
  2. 포맷팅 태그 라이브러리: 숫자, 날짜, 메시지 포맷팅 기능을 제공합니다.
  3. XML 태그 라이브러리: XML 데이터 처리 및 변환을 위한 태그를 제공합니다.
  4. SQL 태그 라이브러리: 데이터베이스 접근 및 조작을 위한 태그를 제공합니다.
  5. 함수 태그 라이브러리: 문자열 처리 등 자주 사용되는 함수들을 제공합니다.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> 
<c:if test="${user.loggedIn}"> 
	<p>Welcome, ${user.name}!</p> 
</c:if> 
<ul> 
    <c:forEach var="item" items="${itemList}"> 
        <li>${item.name}</li> 
    </c:forEach> 
</ul> 
<fmt:formatNumber value="${product.price}" type="currency" />

 

차이점 요약

  1. 목적:
    • 액션 태그: 주로 자바빈과의 상호작용, 페이지 포워딩, 포함 작업 등 JSP 페이지의 제어 흐름을 다루기 위해 사용됩니다.
    • JSTL: 조건부 로직, 반복, 포맷팅, 데이터베이스 접근 등 JSP 페이지에서의 공통 작업을 간결하게 처리하기 위해 사용됩니다.
  2. 사용 방식:
    • 액션 태그: <jsp:useBean>, <jsp:setProperty>, <jsp:getProperty>, <jsp:include>, <jsp:forward>와 같은 JSP 표준 태그를 사용합니다.
    • JSTL: <c:if>, <c:forEach>, <fmt:formatNumber> 등 다양한 기능을 제공하는 태그를 사용합니다.
  3. 표현력:
    • 액션 태그: 주로 JSP 페이지의 구조와 제어 흐름을 관리하는 데 중점을 둡니다.
    • JSTL: 다양한 데이터 처리와 표현 기능을 제공하여 JSP 코드의 복잡성을 줄이고 가독성을 높입니다.

액션 태그와 JSTL은 각각의 장점을 살려 적절히 사용함으로써 효율적이고 유지보수하기 쉬운 JSP 페이지를 작성할 수 있습니다.


 

 

JSP의 장점?

이클립스를 사용하면 짧은 코드로 웹 페이지를 생성할 수 있습니다.

기본적인 예외는 자동으로 처리되며 여러 개의 확장 라이브러리를 사용할 수 있습니다.

또한 스레드(thread) 기반으로 실행되어 시스템 자원을 절약해줍니다.

 

JSP의 사용현황

JSP는 기업용 자바 기술의 집합체인 Java EE의 핵심 요소이며, 대한민국 정부 표준 프레임워크의 근간입니다.

정부나 공기업 주도 사업 등 대규모 기업용 시스템 구축에 주로 사용됩니다.

클라우드 시대에 활용되는 GCP, AWS 등에서도 활용 폭이 넓어졌습니다.

 

 

서블릿과 JSP의 주요 차이

서블릿 JSP
자바 코드 안에서 전체 HTML 페이지를 생성한다 HTML 코드 안에서 필요한 부분만 자바 코드를 스크립트 형태로 추가한다.
변수 선언 및 초기화가 반드시 선행되어야 한다. 자주 쓰이는 기능을 내장 객체로 제공하여 즉시 사용할 수 있다.
컨트롤러를 만들 때 사용한다. 처리결과를 보여주는 뷰(view)를 만들 때 사용한다.