BE/Java

[Java] Servlet

baek-dev 2025. 1. 10. 18:53

Java 웹 애플리케이션에서 클라이언트 요청을 처리하고 동적으로 응답을 생성하기 위한 기술

HTTP요청과 응답을 다룰 수 있는 핵심 컴포넌트

 

주요 특징

1. HTTP 요청/응답 처리

  • HTTP 프로토콜을 기반으로 GET, POST 등의 요청을 처리한다

2. 서버 측 동작

  • 클라이언트가 요청하면 서버에서 Servlet이 실행되고, 동적으로 결과를 생성해 클라이언트로 응답을 보낸다

3. 플랫폼 독립성

  • Java로 작성되므로 다양한 플랫폼에서 실행 가능하다

4. 확장성

  • 다양한 기능을 추가할 수 있어 웹 애플리케이션 개발에 적합하다

5. JSP와 연계

  • JSP(Java Server Pages)와 함께 사용되어, Servlet은 주로 로직을 처리하고 JSP는 응답 화면을 구성하는데 사용된다

동작 원리

1. 클라이언트 요청

  • 브라우저가 URL을 통해 요청을 보낸다

2. 컨테이너가 요청 처리

  • Servlet 컨테이너(Tomcat, Jetty 등)가 HTTP요청을 받고 적절한 Servlet으로 전달한다

3. Servlet이 요청 처리

  • 요청을 처리하고 동적 결과를 생성하여 응답으로 보낸다

4. 클라이언트로 응답 전송

  • 생성된 응답이 브라우저로 전달되어 화면에 표시된다

생명주기(Lifecycle)

1. init()

  • Servlet이 최초로 호출될때 실행된다
  • 초기화 작업을 수행한다

2. service()

  • 클라이언트 요청을 처리하는 메서드
  • 요청 메서드(GET, POST 등)에 따라 doGet(), doPost()가 호출된다

3. destroy()

  • Servlet이 종료될때 호출된다
  • 자원 정리 작업을 수행한다

주요 클래스 및 인터페이스

1. HttpServlet

  • 대부분의 Servlet은 HttpServlet을 상속받아 작성된다
  • HTTP 프로토콜을 기반으로 요청을 처리한다

2. HttpServletRequest

  • 클라이언트의 요청 정보를 캡슐화한 객체
  • 요청 파라미터, 헤더, URI 등을 다룰 수 있다

3. HttpServletResponse

  • 서버의 응답 정보를 캡슐화한 객체
  • 응답 데이터를 설정하고 전송한다

4. ServletConfig

  • Servlet 초기화 파라미터와 환경 정보를 제공하는 객체

5. ServletContext

  • 애플리케이션 전역 정보를 제공하며, Servlet 간에 데이터를 공유할 때 사용

기본 Servlet 예제

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("/example") // URL 매핑
public class ExampleServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        // 응답 내용 설정
        response.setContentType("text/html");
        response.getWriter().println("<h1>Hello, Servlet!</h1>");
    }
}

주요 기능

1. 요청 처리

  • 클라이언트의 요청을 받아서 파라미터를 처리한다

2. 응답 생성

  • 요청 결과를 동적으로 생성하여 클라이언트에 전송한다

3. 세션 관리

  • HttpSession을 사용하여 클라이언트 상태를 유지한다

4. 파일 업로드/다운로드

  • 클라이언트가 업로드한 파일을 처리하거나 파일을 제공할 수 있다

5. 요청 전달 및 포워딩

  • 다른 Servlet 또는 JSP로 요청을 전달할 수 있다

장점

1. Java 기반

  • Java의 객체지향 기능과 표준 라이브러리를 활용할 수 있다

2. 성능

  • Servlet은 서버 내에서 실행되므로 빠르고 효율적이다

3. 보안

  • Java의 보안 기능과 HTTPS를 통해 안전하게 데이터를 처리할 수 있다

4. 다양한 기능

  • 세션 관리, 쿠키, 요청 포워딩 등 다양한 기능을 지원한다

Servlet과 JSP의 비교

항목 Servlet JSP
역할 로직 처리 화면 구성
코드 구조 Java 코드로 작성 HTML 내에 Java 코드를 포함
유지보수 코드가 복잡하고 길어질 수 있음 유지보수가 쉬움
성능 초기 로드가 빠름 초기 로드 시 컴파일 필요
적용 범위 주로 컨트롤러 역할 뷰(View) 역할

대체하는 기술

여전히 사용되지만, 더 현대적이고 생산성을 높이는 프레임워크(예 : SpringBoot) 가 등장 하면서 대체되는 경우가 많다

  • Spring MVC : 컨트롤러와 요청 처리 로직을 보다 쉽게 관리
  • Spring Boot : Sevlet을 기반으로 하지만 설정을 단순화하여 개발 생산성을 향상

요약

  • Servlet은 Java를 사용하여 클라이언트의 HTTP 요청을 처리하고 동적으로 응답을 생성하는 서버 측 컴포넌트
  • HTTP 요청 및 응답 처리, 세션 관리 등 다양한 기능 제공
  • Servlet은 보통 JSP와 함께 사용되며, 현대에는 Spring MVC 같은 프레임워크로 대체되는 경우가 많음
  • Servlet은 여전히 Java 기반 웹 애플리케이션의 핵심 요소로 활용됨

 

 

 

 

출처 : ChatGPT

'BE > Java' 카테고리의 다른 글

[Java] Java Collections Framework  (0) 2025.03.06
[Java] Mockito  (0) 2025.01.21
[Java] HttpServletRequest  (0) 2025.01.08
[Java] Jackson 라이브러리  (0) 2025.01.07
[JPA] N + 1 문제  (0) 2025.01.06