본문 바로가기
[이직 면접] 질의 응답

[Spring Framework] 서블릿(Servlet)의 역할과 동작 원리

by 막개발자 2021. 1. 19.

# 질의 응답 상황

[면접관]

지원자님, Spring Framework을 주로 사용하셨다고 들었습니다. 서블릿에 대해서 간략하게 설명해 주세요.

 

[막개발자] 

서블릿 (Servlet)은 Java를 이용해 웹페이지를 동적으로 생성하는 서버 측 프로그램입니다. 사용자의 입력을 받아 동적인 HTML을 만드는 역할을 하며, JSP와 비슷하게 혼동될 수 있습니다. JSP는 HTML 문서 내에 Java를 삽입한 형태로, 이를 컴파일하면 서블릿으로 변환됩니다. 서블릿은 서블릿 컨테이너를 통해 관리되며, 톰캣과 같은 WAS에서 실행됩니다. 클라이언트 요청에 따라 실행할 서블릿을 제어하는 역할을 합니다.

 

 

# 상세 설명

 

1. 서블릿(Servlet)

서블릿은 자바 기반의 서버 프로그램으로, 클라이언트 요청을 처리하고 동적인 데이터를 생성하여 웹 페이지를 응답하는 중요한 역할을 합니다. 이는 HTTP 요청과 응답을 처리하는 Java EE 표준 기술로, 웹 애플리케이션의 핵심 컴포넌트입니다. 서블릿은 기본적으로 웹 서버에서 실행되며, 클라이언트의 요청에 맞춰 동적인 HTML을 생성합니다.

1.1 서블릿의 특징

  • 자바 기반 서버 프로그래밍: 서블릿은 자바로 작성되며, 톰캣(Tomcat)과 같은 웹 서버에서 실행됩니다.
  • 컨트롤러 역할: 클라이언트 요청을 처리하고 필요한 데이터를 반환하거나, JSP와 같은 다른 리소스로 요청을 전달합니다.
  • 라이프 사이클: 서블릿은 init(), service(), destroy() 메서드를 통해 관리됩니다.
  • 고성능: 서블릿은 최초 실행 시 로드되고 이후 재사용되므로 성능이 뛰어납니다.
  • 플랫폼 독립성: Java로 작성되어 OS에 상관없이 실행됩니다.

1.2 서블릿의 동작 과정

  1. 클라이언트가 HTTP 요청을 보냅니다.
  2. 요청은 서블릿 컨테이너로 전달됩니다.
  3. 서블릿 컨테이너는 해당 서블릿을 호출하고, 필요한 처리를 진행합니다.
  4. 처리된 결과는 클라이언트에게 반환됩니다.

1.3 서블릿 예제 코드

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html");
        response.getWriter().println("<h1>Hello, Servlet!</h1>");
    }
}

2. JSP (Java Server Pages)

JSP는 서블릿의 단점을 보완하기 위해 만들어진 기술로, HTML 코드 내에 Java 코드를 삽입하여 동적으로 웹 페이지를 생성합니다. JSP는 서블릿보다 간단한 구조로 작성할 수 있어, 동적 콘텐츠 생성을 더 쉽게 할 수 있습니다.

2.1 JSP의 특징

  • HTML과 자바 코드 혼합: HTML 페이지 내에 Java 코드를 포함하여 동적 콘텐츠를 생성합니다.
  • 컴파일 과정: JSP 파일은 실행 시 서블릿으로 변환됩니다.
  • 내장 객체 제공: JSP는 request, response, session 등의 객체를 제공하여 HTTP 요청과 응답을 쉽게 처리할 수 있습니다.

2.2 JSP 예제 코드

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <title>Hello JSP</title>
</head>
<body>
    <h1>Hello, JSP!</h1>
    <p>Current Time: <%= new java.util.Date() %></p>
</body>
</html>

3. 서블릿과 JSP의 차이점

 

항목 서블릿(Servlet) JSP(Java Server Pages)
기본 역할 클라이언트 요청 처리 및 데이터 연산 HTML 기반의 동적 웹 페이지 생성
코드 구조 자바 코드에 HTML 포함 HTML 코드에 자바 코드 포함
가독성 낮음 높음
컴파일 과정 서블릿으로 직접 컴파일 JSP 실행 시 서블릿으로 변환 후 컴파일

4. 서블릿과 JSP의 관계

JSP는 서블릿의 상위 추상화로, JSP로 작성된 파일은 실행 시 서블릿으로 변환되어 서블릿 컨테이너에서 실행됩니다. 서블릿은 주로 비즈니스 로직을 처리하고, JSP는 웹 페이지의 UI를 처리합니다.

5. 서블릿과 JSP의 통합 사용

서블릿과 JSP를 함께 사용하여 MVC(Model-View-Controller) 패턴을 구현할 수 있습니다:

  • Model: 비즈니스 로직과 데이터 처리.
  • View (JSP): 클라이언트에게 표시될 UI 생성.
  • Controller (서블릿): 요청을 처리하고 모델과 뷰를 연결합니다.