Java Servlets

준하·2024년 10월 29일


Spring Security docs를 읽다가, 기본적인 Servlet에 대한 개념을 먼저 정리하는 것이 좋을 것 같다고 느꼈다.

What is Java Servlet?

Java Servlets are the Java programs that run on the Java-enabled web server or application server. They are used to handle the request obtained from the web server, process the request, produce the response, and then send a response back to the web server.

자바 서블릿은 자바 환경의 Web Server 혹은 Application Server에서 동작하는 자바 프로그램을 의미한다.
웹서버로 들어온 요청을 처리하고, 응답을 생성하고, 다시 웹서버로 보내는 일을 한다.

서블릿의 특징은 서버 사이드에서 동작하며, 웹서버로 들어온 복잡한(complex) 요청을 처리할 수 있다는 점이다.

클라이언트는 웹서버로 요청을 보내고, 이를 수신한 웹서버는 요청을 처리할 수 있는 서블릿을 찾는다. 서블릿은 요청을 처리한 뒤 다시 웹서버로 응답하고, 웹서버는 이를 다시 클라이언트에게 응답한다.

즉, 서블릿은 웹서버로 들어온 요청에 따라 동적인 화면을 구성하는 주체라고 할 수 있다.

서블릿은 기본적으로 아래 6단계를 거쳐 실행된다.
1. The Clients send the request to the Web Server.
2. The Web Server receives the request.
3. The Web Server passes the request to the corresponding servlet.
4. The Servlet processes the request and generates the response in the form of output.
5. The Servlet sends the response back to the webserver.
6. The Web Server sends the response back to the client and the client browser displays it on the screen.


Servlet vs CGI(Common Gateway Interface)

Server-Side Extension이란 동적인 웹페이지를 구현하는 기술을 의미한다.
자바 서블릿은 Java Platform Enterprise Edition(Jakarta EE)의 API 일부로, Java에서 동적인 웹 애플리케이션을 구성하기 위한 표준을 제공한다.

동적인 웹페이지를 구현하는 기술은 Servlet 뿐만 아니라 CGI(Common Gateway Interface), PHP(Hypertext Preprocessor) 등이 존재한다.

그 중 Servlet과 CGI를 비교하며 알아보자.

CGI is actually an external application that is written by using any of the programming languages like C or C++ and this is responsible for processing client requests and generating dynamic content.

CGI 또한 동적인 페이지를 구현하기 위한 프로그램이다.
다만, CGI는 클라이언트의 요청을 처리하기 위해 매번 새로운 프로세스를 생성하여 처리한다.

웹서버로부터 클라이언트의 요청을 받아, 이를 처리하여 동적인 화면을 구성한다는 점은 같으나 그 과정에서 매번 새로운 프로세스를 생성하고, 소멸시킨다.
따라서 오버헤드가 크다는 단점이 있다.

또한 CGI는 기본적으로 매번 프로세스를 생성, 소멸하므로 쿠키를 통한 세션 정보 유지 기능을 제공하지않는다.

Advantages of Java Servlet

  • CGI에 비해 기본적으로 빠르다. 매 요청마다 프로세스를 생성하지 않는다.
  • 플랫폼에 독립적이다.
  • 모든 요청을 처리하는 단 하나의 인스턴스만 존재한다. 메모리를 절약할 수 있으며, 클라이언트의 상태를 관리하기 용이하다.
  • 웹서버가 제공하는 기본적인 보안요소를 포함한다.

Servlet Container

Servlet Container(서블릿 컨테이너)는 Java 웹 애플리케이션에서 서블릿의 생명 주기를 관리하고, HTTP 요청과 응답을 처리하며, 클라이언트와 서버 간의 통신을 중재하는 역할을 하는 환경이다. 서블릿 컨테이너는 Java EE 사양에 정의된 표준을 따르며, 서블릿을 실행할 수 있는 기반을 제공한다. 흔히 웹 애플리케이션 서버 또는 웹 컨테이너라고도 불린다.

대표적인 서블릿 컨테이너가 Apache Tomcat, Jetty 등이다.

서블릿 컨테이너의 대표적인 특징

  1. 서블릿 생명주기 관리
    : 서블릿 컨테이너는 서블릿을 메모리에 로드하고, 인스턴스를 생성 및 초기화 (init 메서드를 통한)한다. 더 이상 필요없을 때는 destroy()를 호출.

  2. HTTP 요청 및 응답 관리

  3. 멀티스레드 환경 제공
    : 서블릿 컨테이너는 각 요청마다 새로운 스레드를 생성하여 동일한 서블릿 인스턴스를 통해 여러 요청을 동시에 처리할 수 있게 한다.
    이러한 멀티스레드 환경을 통해 단일 서블릿 인스턴스로도 고성능 처리가 가능하다.

  4. 세션관리

  5. 보안관리


출처 : https://www.geeksforgeeks.org/introduction-java-servlets/

profile
A Sound Code in a Sound Body💪

0개의 댓글