Servlet 이해하기 (Web Server, WAS, Servlet)

2025. 1. 22. 20:47·공부하기/ETC

Web Server

HTTP 기반으로 동작하며 정적 리소스를 제공한다.

대표적인 웹 서버

  • Apache
  • NGINX
  • 등등

WAS (Web Application Server)

웹 서버의 기능에 + DB 조회를 포함하여 다양한 로직에 대한 처리를 함께 한다.
추가적인 코드 실행을 통해 어플리케이션 로직을 수행하고 동적 컨텐츠를 생성한다.

대표적인 WAS

  • Apache Tomcat (Spring Boot에 내장)
  • Eclipse Jetty
  • 등등

실제 웹 시스템 구성 (Web Server과 WAS의 관계)

  1. 정적 데이터에 대한 요청은 Web Server에서 바로 처리하여 응답한다.
    • ex) 요청 경로가 `/public/images/logo.png` -> 정적 리소스로 처리, 바로 응답
  2. 그 외의 경우 Web Server가 Http Request를 Web Container(Servlet Container를 포함)로 전달한다.
  3.  Web Container는 애플리케이션의 비즈니스 로직을 수행하거나 동적 데이터를 생성하여 요청에 대한 응답을 생성한다.

Servlet이란?

JAVA EE 사양의 일부분으로 HTTP 프로토콜 기반 요청과 응답을 처리하는 데 사용되는 소프트웨어이다.

서블릿은 기능을 정의한 표준 API이고, 웹 애플리케이션을 만드는 주체가 실제 구현 구현하여 배포한다. (ex. Apache Tomcat이 Servlet API를 구현)

표준 API 예시

package javax.servlet;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
 
public interface Servlet {
    public void init();    
 
    public void service(HttpServletRequest request, HttpServletResponse response)
        throws IOException;  
 
    public void destroy();
}
  • 기능을 정의한 표준 API
  • interface 형태로 제공

서블릿 구현체 예시

package javax.servlet.http;
 
import javax.servlet.Servlet;
import java.io.IOException;
 
public class HttpServlet implements Servlet {  
    @Override
    public void init() {
 
    }
 
    @Override
    public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {     <===== ❷
        if ("GET".equals(request.getMethod())) {
            doGet(request, response);     
        } else {
            doPost(request, response);
        }
    }
 
    @Override
    public void destroy() { }
 
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { }
 
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {}
}
  • 표준 API를 구현하여 WAS에서 제공 (ex. Tomcat)
  • `HttpServlet`, `HttpServletRequest`, `HttpServletResponse` 등등을 구현함

개발자의 서블릿 구현

  • WAS에서 구현해 놓은 `HttpServlet`을 상속함으로써 구현 가능하다.
public class ExampleServlet extends HttpServlet { // HttpServlet을 상속받아 구현한다.
	
	@Override
	protected void service(
		HttpServletRequest request,  // HTTP 요청 정보를 쉽게 사용할 수 있게 만드는 Servlet
		HttpServletResponse response // HTTP 응답 정보를 쉽게 제공할 수 있게 만드는 Servlet
	) {
		// application logic
	}

}

Servlet Container

  • 여러 서블릿을 생성, 관리, 종료하는 역할을 한다.
    • 각 Servlet 객체는`싱글톤`으로 관리
  • 동시 요청 처리를 위해 `멀티 스레드` 사용

템플릿 엔진 Template Engine

정적인 데이터(HTML, CSS, 이미지 등)를 단순 렌더링하는 것이 아니라, 동적인 데이터를 삽입할 수 있도록 하는 소프트웨어

서버 사이드 템플릿 엔진

  • 클라이언트가 요청을 보내면, 서버 측에서 HTML 템플릿에 동적으로 데이터를 삽입하여 완성된 HTML을 클라이언트에 전송한다.
  • 클라이언트는 전송 받은 HTML을 사용자에게 렌더링
    • `Q` 그렇다면 클라이언트는 단순히 HTML을 그려내는 역할만 하는가?
    • `A` YES. 데이터 처리 없이 렌더링 역할만 함.
  • 서버가 데이터 처리와 UI 생성을 모두 책임지므로 서버 부하가 클 수 있음

대표적인 템플릿 엔진

  • Thymleaf
  • JSP(Java Server Pages)
  • Mustache 
  • 등등

클라이언트 사이드 템플릿 엔진

  • 클라이언트에서 HTML 구조를 template화 (DOM을 구성), 주로 JavaScript 기반 동작
    • `Q` 이 때 공통 프레임(HTML)은 어디에서 가져오는가? 클라이언트에서 가지고 있는가?
    • `A` 템플릿은 보통 클라이언트 쪽 코드에 미리 포함되어 있음 (그렇지만 필요에 따라 별도의 요청을 통해 받아올 수도 있음. 불가능한 것은 X)
  • 필요한 데이터를 서버에 요청
  • 클라이언트는 받아온 데이터를 템플릿에 동적으로 삽입 후 렌더링
  • 브라우저(클라이언트)가 자바스크립트와 템플릿 엔진을 실행할 수 있어야 함

대표적인 템플릿 엔진

  • Mustache
  • EJS
  • 현대에는 React, Vue.js, Angular와 같은 프레임워크에서 템플릿 엔진 역할을 포함함.

저작자표시 비영리 변경금지 (새창열림)

'공부하기 > ETC' 카테고리의 다른 글

실시간 데이터 전송 기술 정리 | Polling, Long-Polling, SSE, WebSocket  (1) 2025.04.18
Unique한 값이 필요할 때 사용하는 UUID, UUID란?  (0) 2025.03.19
JWT 찐하게 이해하기 👀 | JWT 구성과 인증 원리  (0) 2025.03.13
도메인 로직(Domain Login)이 뭔데?  (2) 2024.11.11
Cookie 와 Session  (1) 2022.04.12
'공부하기/ETC' 카테고리의 다른 글
  • Unique한 값이 필요할 때 사용하는 UUID, UUID란?
  • JWT 찐하게 이해하기 👀 | JWT 구성과 인증 원리
  • 도메인 로직(Domain Login)이 뭔데?
  • Cookie 와 Session
다섯자두
다섯자두
All I need is 💻 , ☕️ and a dash of luck
  • 다섯자두
    subbni
    다섯자두
  • 전체
    오늘
    어제
    • 전체 글 (88) N
      • 개발 이야기 (0)
      • 만들어보기 (17)
        • FromBookToBook (5)
        • Spring (5)
        • Node.js & React (3)
        • TroubleShooting (4)
      • 공부하기 (71) N
        • Network (3)
        • Cloud (1)
        • Database (5)
        • Java (13)
        • Javascript (0)
        • Spring (9)
        • React (18)
        • Algorithm (8)
        • 자료구조 (7)
        • ETC (7) N
      • 회고 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • velog
  • 공지사항

  • 인기 글

  • 태그

    Express
    outbox 패턴
    network
    mysql
    pdf 프리뷰 실패
    Database
    알림 기능
    SQL
    재시도 로직
    SSE
    티스토리챌린지
    Spring
    JPA
    알고리즘
    java
    프로젝트
    최단거리
    springboot
    HTTP
    서명알고리즘
    redis
    SQS
    Til
    자료구조
    실시간 데이터 전송 기술
    aws
    오블완
    outbox
    로그인
    pdf 자동 다운로드
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
다섯자두
Servlet 이해하기 (Web Server, WAS, Servlet)
상단으로

티스토리툴바