1. JSP란 무엇인가?
JSP는 자바 기반의 웹 애플리케이션에서 주로 사용자에게 보여지는 화면(View)을 만들기 위해 사용되는 서버 측 기술입니다. 기본적인 HTML, CSS, JavaScript 코드에 더해 <% ... %>나 <%= ... %> 같은 JSP 태그를 사용하여 자바 코드를 삽입할 수 있습니다. 이를 통해 웹 서버에서 동적으로 데이터를 처리하고 그 결과를 HTML 형태로 클라이언트(웹 브라우저)에 전송할 수 있습니다.
주요 특징
- HTML 기반으로 작성하여 뷰(View) 제작이 직관적이다.
- 자바 라이브러리를 그대로 활용해 비즈니스 로직을 수행할 수 있다.
- 웹 컨테이너(예: Tomcat)에서 JSP를 서블릿(Servlet)으로 변환 후 실행한다.
2. JSP와 Servlet의 관계
결론부터 말하면, JSP는 결국 Servlet으로 변환되어 실행됩니다.
JSP 파일을 서버에 요청하면, 웹 컨테이너(예: 톰캣)가 이 JSP 파일을 Servlet 소스 코드(.java)로 변환하고 컴파일하여 최종적으로 실행 가능한 클래스 파일(.class)로 만듭니다. 이 과정은 딱 한 번만 일어나며, 이후에는 변환된 Servlet이 요청을 처리합니다.
따라서 개발자 입장에서는 "JSP는 Servlet과 비슷한 역할을 하지만, 화면을 구성하는 데 더 편리한 도구"라고 이해하시면 됩니다.
3. JSP의 장점
JSP의 가장 큰 역할은 클라이언트에게 보여줄 화면(View)을 만드는 것입니다.
- HTML 기반의 작성 용이성: 순수한 자바 코드로 HTML을 만드는 Servlet과 달리, JSP는 HTML 안에 자바 코드를 삽입하는 방식이라 화면 디자인과 데이터 처리를 동시에 효율적으로 할 수 있습니다.
- 동적 페이지 생성: 사용자의 요청이나 DB 데이터에 따라 페이지의 내용이 달라지는 동적인 웹 페이지를 쉽게 만들 수 있습니다. 예를 들어, 사용자의 이름을 받아 "안녕하세요, [사용자 이름]님!"이라고 표시하는 것처럼요.
일반적인 웹 애플리케이션 개발에서는 MVC(Model-View-Controller) 패턴을 따르는데요, 이때 Servlet은 비즈니스 로직을 처리하는 Controller 역할을, JSP는 사용자에게 보여주는 View 역할을 주로 담당합니다. 이렇게 역할을 분담하면 코드가 훨씬 깔끔하고 유지보수하기 쉬워집니다.
4. JSP 동작 흐름
- 클라이언트가 .jsp 파일에 HTTP 요청을 보낸다.
- 컨테이너가 해당 JSP를 자바 서블릿 소스 파일로 변환한다.
- 변환된 소스 파일을 컴파일하여 서블릿 클래스를 생성한다.
- 생성된 서블릿이 요청을 처리하고, 결과 HTML을 생성하여 클라이언트에 응답한다.
- 이후 동일한 JSP 요청은 소스 변환 없이 바로 컴파일된 서블릿이 실행된다.
5. 예제 코드 분석
아래 세 가지 파일을 통해 JSP와 Servlet의 작동 방식을 비교해보겠습니다.
5.1 Test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%!
// 선언부: 클래스 변수 및 메서드 정의
int n;
void info() {
System.out.println("정보 출력");
}
%>
<%
// 스크립틀릿: _jspService() 내부 로직
int x = 10;
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
나 JSP여!<br>
x = <%= x %>
</body>
</html>
설명
- <%! … %> 영역에 선언된 변수와 메서드는 변환된 서블릿 클래스의 멤버로 들어갑니다.
- <% … %> 영역의 코드는 _jspService() 메서드 내부에 삽입되어 매 요청 시 실행됩니다.
- <%= x %>는 out.print(x);로 변환되어 페이지에 값을 출력합니다.
5.2 변환된 Test_jsp.java
package org.apache.jsp;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.jsp.*;
public final class Test_jsp extends org.apache.jasper.runtime.HttpJspBase {
// JSP 선언부가 클래스 멤버로 들어감
int n;
void info() {
System.out.println("정보 출력");
}
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {
response.setContentType("text/html; charset=UTF-8");
JspWriter out = ...;
// 스크립틀릿 코드
int x = 10;
// HTML 출력
out.write("<!DOCTYPE html>...");
out.write("나 JSP여!");
out.write("x = " + x);
}
}
설명
- JSP 선언부와 스크립틀릿이 각각 클래스 멤버와 _jspService() 내부로 매핑됩니다.
- HTML 조각들은 out.write() 호출로 변환되며, 동적 부분만 자바 연산으로 처리됩니다.
5.3 Servlet 예제 TestAction.java
package action;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.*;
import java.io.IOException;
@WebServlet("/TestAction")
public class TestAction extends HttpServlet {
private static final long serialVersionUID = 1L;
// 클래스 변수 및 메서드
int n;
void info() {
System.out.println("정보 출력");
}
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 지역 변수 선언
int x = 10;
// 출력
response.getWriter().print("x = " + x);
}
}
설명
- 순수 자바 코드로 구성되어 있어 HTML 출력은 response.getWriter().print()로 처리합니다.
- 뷰와 로직이 한 클래스에 섞여 있기 때문에 복잡한 UI를 작성하기에는 코드 가독성이 떨어집니다.
6. JSP vs Servlet
구분 | JSP (JavaServer Pages) | Servlet |
작성 방식 | HTML 안에 자바 코드 삽입 | 순수 자바 코드로 HTML 출력 |
주요 역할 | 사용자에게 보여주는 화면(View) 구성 | HTTP 요청/응답 처리 및 로직(Controller) |
개발 편의성 | 화면 구성이 훨씬 쉽고 직관적 | HTML 작성이 번거롭고 가독성이 낮음 |
동작 방식 | 최초 요청 시 Servlet으로 변환되어 실행 | 요청 시 자체적으로 컴파일 및 실행 |
오늘 다룬 내용을 통해 JSP의 역할과 Servlet과의 관계를 명확하게 이해하는 데 도움이 되었기를 바랍니다. JSP와 Servlet은 서로 보완하며 웹 애플리케이션을 만드는 중요한 기술입니다.
'Servlet, JSP' 카테고리의 다른 글
JSP EL(Expression Language)에 대해 (2) | 2025.08.26 |
---|---|
Model 1 예제 : JSP와 Servlet이 Parameter를 주고 받는 방법 (0) | 2025.08.20 |
Servlet의 작동구조 (0) | 2025.08.19 |
Servlet 생명주기(Lifecycle) 이해하기 (2) | 2025.08.19 |