Servlet은 자바를 이용해서 웹 서버를 동적으로 웹 페이지를 생성하고, 클라이언트 요청을 처리하는 서버 측 프로그램이다. 주로 HTTP 요청 - 응답 모델을 기반으로 동작하고, 웹 컨테이너 안에서 실행이 된다.
왜 필요할까?
1. Java의 확장성과 좋은 유지보수성을 이용하여 html에서 활용하기 위해서
2. MVC 패턴에 용이함
3. 동적인 웹페이지 생성에 특화
LifeCycle
1. 첫 요청을 하면 init()이 호출됨
2. Service()에서 doGet(), doPost() 호출
3. 클라이언트에서 HTTP 응답
4. 서버 종료하면 destroy()
Servlet 실행 과정

흐름도

코드 읽기
@WebServlet(“/hello”)는 해당 서블릿 클래스가 웹 어플리케이션 내에서 “/hello”라는 URL패턴으로 매핑 됨.

클라이언트가 “/hello” URL로 HTTP GET 요청을 보내면 서블릿 컨테이너가 이 요청을 감지 -> 컨테이너 요청에 매핑된 HelloServlet은 인스턴스 doGet() 호출
최초 “/hello” 요청이 들어오기전 컨테니어가 HelloServelt객체 생성. Init() 메소드 호출로 초기화 진행. 이어서 get()요청을 하면, service() 메소드 호출하여 내부적으로 HTTP 메소드에 맞는 doGet()실행 -> doGet() 메소드에서 HTTP 응답 작성 후 클라이언트에게 전달 -> 컨테이너가 더 이상 서블릿을 필요로하지않거나 서버가 종료 될 때 destroy() 메소드 호출 후 자원해제.
생각 확장
별로 초기화를 따로 하지 않아도 무방함.
객체를 한번 생성 후 그 객체를 여러 클라이언트 요청에서 재사용. 이는 호출 할 때마다 생성하는 것보단 효율적, 그래서 다수의 요청이 들어와도 여러 스레드를 만들어서 멀티 스레드로 일 처리 진행.
자바는 독립적으로 실행되는 어플리케이션인 반면, 서블릿은 클라이언트의 HTTP요청을 받아 동적으로 처리하고 HTTP 응답을 생성하는 방식이고, 컨테이너에 의해 관리가 된다.
JSP
jsp의 문법 요소에는 총 5가지가 존재한다.
1. 지시자
2. 스크립트릿
3. 표현식
4. 선언문
5. JSP 액션태그

주로 페이지 처리 방법을 지정하는 주요 문법 요소이다.
contentType - 출력 문서의 타입과 인코딩을 지정
language - JSP에서 사용할 언어를 설정

<% ...%> 블록을 사용해서 자바 코드를 작성한다.

<%= .... %> 블록을 사용하여 변수, 계산식, 함수 결과를 페이지에 바로 출력하는 요소이다. 동적으로 값을 출력하는데에 가장 간단한 방식이다.

<%! ... %> 내의 변수와 메소드는 JSP 서블릿 클래스의 멤버가 된다. 멤버 변수는 객체 생성 시 유지되며, 메소드를 정의해 동작을 작성할 수 있다. 화면에는 표현식을 사용해서 표시 할 수 있다.

page 속성 - 포함할 외부 JSP 또는 HTML 파일 경로를 지정한다.
flush 속성 - 현재 JSP 페이지의 출력 버퍼를 비워서 바로 포함 페이지를 실행하게 할지 설정한다.
주로 React만 다뤄봤고, Spring은 다뤄본적이 없어서 조금 어색한 느낌이 없잖아 있다. 그래서 두 가지를 비교를 해보았다.
내가 그나마 많이 본 프레임 워크는 Express 이다. Node.js 환경에서 사용이 가능한 백엔드 웹서버 프레임 워크이다. 그럼 그 두 개의 차이점이 뭘까?
구분 Servlet Express
| 언어 | Java | JavaScript (Node.js) |
| 실행 환경 | 서블릿 컨테이너 (Tomcat, Jetty, Undertow 등) | Node.js 런타임 |
| 동시성 모델 | 멀티스레드 (요청마다 스레드 할당, 풀 관리) | 싱글스레드 + 이벤트 루프 (비동기 콜백/Promise) |
| 상태 관리 | 세션/쿠키 지원 내장 (HttpSession) | 세션 관리 미들웨어(express-session) 별도 설치 |
| 배포 방식 | war 파일을 컨테이너에 배포 | Node.js 앱 자체 실행 (node app.js, pm2 등) |
| 확장성 | Java EE 표준 기반, JSP/JSF, Spring MVC 등과 연동 | 미들웨어 조합식 확장, 자유도가 높음 |
Servlet은 주로 요청 및 응답 객체를 사용해서 통신을 진행한다. 규모가 커지면 Spring과 같이 쓰는 점이 있다.
Express는 (app.get('/',...)) 같은 형태로 페이지 구성을 할 수 있다. 그리고 REST API, GraphQL, WebSocket 등 추가로 이어 붙일 수 있다.
안정적이고 전통적인 시스템을 구축하려면 Servlet 형태가 좋고, 경량화 및 실시간성을 주로 생각하는 경우는 Express를 고려하는 편이 좋다.
'멀티캠퍼스' 카테고리의 다른 글
| Servlet Assignment 코드 리뷰 (0) | 2025.09.08 |
|---|---|
| Servlet MVC 실습 코드 리뷰 (0) | 2025.09.01 |
| 데이터베이스 Index (1) | 2025.08.19 |
| 데이터베이스 (DDL) (2) | 2025.08.12 |
| UML(Unified Modeling Language)과 클래스 다이어그램(Class Diagram) (2) | 2025.08.06 |