Servlet
자바(Java)에서 Servlet을 사용한 경우와 사용하지 않은 경우의 차이를 이해하면 “왜 톰캣 같은 WAS가 필요한가?”까지 연결해서 보실 수 있습니다.
🔹 1. Servlet이란?
- Servlet = 자바 기반의 웹 요청/응답 처리 규격(인터페이스)
- 즉, “HTTP 요청을 받아서 처리하고 응답하는 표준 방식”을 정의한 것.
- 개발자는 HttpServlet을 상속받아 doGet(), doPost() 같은 메서드를 구현하면 됩니다.
- 실행은 톰캣 같은 **WAS(Web Application Server)**가 해 줍니다.
🔹 2. Servlet을 사용하지 않고 웹을 만든다면?
- 개발자가 **소켓 프로그래밍(java.net.ServerSocket)**으로 직접 서버를 만들어야 합니다.
- 클라이언트(브라우저) 요청이 오면:
- 소켓 연결 수립
- 요청(Request) 파싱 (HTTP 헤더, 쿠키, 바디 등 직접 분석)
- 응답(Response) 생성 (HTTP 응답 코드, Content-Type 등 직접 작성)
- 즉, 모든 HTTP 프로토콜 세부 동작을 직접 처리해야 합니다.
👉 단점:
- 코드가 길고 복잡해짐.
- 요청이 많아지면 스레드 관리, 세션 관리, 보안 처리 등을 전부 직접 구현해야 함.
- 유지보수 어려움.
🔹 3. Servlet을 사용한다면?
- 개발자는 비즈니스 로직에만 집중할 수 있습니다.
- 요청/응답 파싱, 스레드 풀 관리, 세션/쿠키 관리 같은 저수준 작업은 톰캣(WAS)이 대신 처리합니다.
- 개발자는 단순히 request.getParameter("id") 같은 식으로 데이터를 읽고,
response.getWriter().write("Hello") 같은 방식으로 응답만 작성하면 됨.
👉 장점:
- 생산성 향상 (개발자가 HTTP 프로토콜을 직접 다룰 필요 없음).
- 표준화된 구조 (JSP, Spring MVC 등 다른 기술도 Servlet 위에서 동작).
- 보안, 세션, 멀티스레딩 같은 기능을 WAS가 기본 제공.
🔹 4. 비교 정리
구분 Servlet 사용 X Servlet 사용 O
방식 | 소켓 프로그래밍으로 직접 HTTP 요청/응답 처리 | Servlet API 표준 사용, WAS가 처리 지원 |
난이도 | HTTP 프로토콜, 스레드, 세션 등을 직접 구현해야 함 | 비즈니스 로직에 집중 가능 |
유지보수 | 어렵고 비효율적 | 구조화·표준화되어 쉬움 |
활용 | 교육용, 아주 단순한 서버 | 실무, 모든 Java 웹 프레임워크(Spring 등)의 기반 |
🔹 5. 결론
- Servlet을 쓰지 않으면 → 서버 기본 기능(HTTP 파싱, 세션, 멀티스레드)까지 직접 구현해야 함.
- Servlet을 쓰면 → WAS(톰캣 등)가 다 처리해주므로, 개발자는 “무엇을 어떻게 응답할지”만 작성하면 됨.
- 그래서 현대의 모든 자바 웹 프레임워크(Spring MVC 등)는 결국 Servlet 위에서 동작합니다.
👉 한마디로 요약하면:
“Servlet = 자바 웹 개발에서 HTTP 요청/응답을 쉽게 다루도록 만든 표준 인터페이스.
없으면 모든 걸 직접 구현해야 하고, 있으면 WAS가 대신 처리해준다.”
JSP
🔹 JSP란?
- Java Server Pages의 약자.
- HTML 코드 안에 자바 코드를 삽입해 웹페이지를 동적으로 생성할 수 있게 해주는 기술.
- 확장자는 .jsp.
- 실행할 때는 Servlet으로 변환되어 WAS(톰캣 등) 위에서 동작합니다.
🔹 JSP의 동작 원리
- 클라이언트(브라우저)가 index.jsp 요청.
- WAS(예: Tomcat)는 JSP 파일을 Servlet 자바 클래스로 변환.
- HTML은 out.write("...") 형태로 변환.
- JSP 안의 <% ... %> 자바 코드는 그대로 실행문으로 들어감.
- 변환된 Servlet 클래스가 컴파일 → 실행.
- 실행 결과로 HTML이 생성되어 브라우저에 응답.
👉 즉, JSP는 결국 Servlet으로 바뀌어 실행된다는 게 핵심입니다.
🔹 JSP 코드 예시
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head><title>Hello JSP</title></head>
<body>
<h1>Hello, JSP!</h1>
<%
// 자바 코드 삽입
String name = "진화님";
out.println("<p>안녕하세요, " + name + "!</p>");
%>
</body>
</html>
- HTML + 자바 코드 혼합.
- <% ... %> 안에 자바 코드 작성 가능.
- out.println() 대신 ${변수} 표현을 쓰는 EL(Expression Language), JSTL 같은 태그 라이브러리도 자주 사용.
🔹 JSP의 장점
- HTML에 자바 코드를 삽입하므로 배우기 쉽고 직관적.
- Servlet에 비해 UI 작성이 간단 (HTML을 그대로 쓰니까).
- 간단한 동적 웹페이지를 빠르게 만들 수 있음.
🔹 JSP의 단점
- 자바 코드와 HTML이 섞여 유지보수성이 떨어짐.
- MVC 패턴에 어긋남 → 비즈니스 로직이 JSP에 들어가면 코드가 복잡해짐.
- 대규모 프로젝트에는 부적합.
👉 그래서 현재는 JSP는 뷰(View) 역할에만 제한적으로 사용하고,
실제 로직은 Servlet, Spring MVC 같은 컨트롤러에서 처리하는 방식이 일반적입니다.
🔹 JSP vs Servlet 비교
구분 Servlet JSP
작성 방식 | 자바 코드 안에 HTML을 out.println()으로 작성 | HTML 안에 자바 코드 삽입 |
가독성 | UI 코드 작성이 불편함 | UI 작성이 쉬움 |
실행 | 직접 작성된 자바 클래스 | JSP → Servlet으로 변환 후 실행 |
🔹 결론
- JSP = HTML에 자바 코드를 삽입해 동적 페이지를 만들 수 있는 기술.
- 실행 시 JSP는 자동으로 Servlet으로 변환되어 WAS에서 동작.
- 초창기에는 많이 썼지만, 지금은 Spring MVC + Thymeleaf/Freemarker 같은 템플릿 엔진이 JSP를 대체하는 경우가 많음.
Servlet과 JSP 코드 비교
같은 기능(“사용자 이름을 입력받아 Hello, OOO! 출력하기”)을 Servlet과 JSP 두 가지 방식으로 비교
🔹 1. Servlet 버전
// HelloServlet.java
import java.io.*;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String name = request.getParameter("name"); // ?name=진화
if (name == null) name = "Guest";
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head><title>Hello Servlet</title></head>");
out.println("<body>");
out.println("<h1>Hello, " + name + "!</h1>");
out.println("</body>");
out.println("</html>");
}
}
👉 특징:
- HTML도 out.println()으로 한 줄씩 출력해야 해서 UI 코드 작성이 불편합니다.
- 비즈니스 로직과 화면 코드가 섞이기 쉬움.
🔹 2. JSP 버전
<%@ page contentType="text/html;charset=UTF-8" %>
<!DOCTYPE html>
<html>
<head><title>Hello JSP</title></head>
<body>
<%
String name = request.getParameter("name"); // ?name=진화
if (name == null) name = "Guest";
%>
<h1>Hello, <%= name %>!</h1>
</body>
</html>
👉 특징:
- HTML은 그대로 작성 가능.
- 자바 코드는 <% %> 안에 넣으면 되므로 가독성이 훨씬 좋음.
- <%= 변수 %> 문법으로 바로 출력 가능.
🔹 비교 정리
구분 Servlet JSP
코드 구조 | 자바 클래스 안에서 HTML을 문자열로 출력 | HTML 안에 자바 코드 삽입 |
가독성 | 불편 (out.println 연속) | 편리 (HTML 그대로 작성) |
장점 | 자바 코드만으로 제어 가능 | UI 작성이 훨씬 직관적 |
단점 | 화면 코드가 너무 복잡 | 비즈니스 로직이 섞이면 유지보수 어려움 |
✅ 결론
- Servlet만으로도 동적 웹페이지 구현 가능하지만, HTML 표현이 너무 불편합니다.
- JSP는 HTML 작성이 쉬워서 Servlet보다 생산성이 높음.
- 그래서 JSP = UI(View) 담당, Servlet = 로직 담당으로 함께 쓰거나,
더 발전된 구조로는 **Spring MVC + 템플릿 엔진(Thymeleaf 등)**이 대세가 된 거예요.