[TIL] HttpServlet VS Servlet, 실무에서 Servlet을 쓰는가?

2025-03-17 TIL

📝 TIL (Today I Learned)
🔗 원본 이슈: #28
📅 작성일: 2025-03-17
🔄 최종 수정: 2025년 04월 08일


🍀 새롭게 배운 것

  • HttpServlet VS Servlet
    • HttpServletServlet의 하위 개념(자식 클래스)
  • 실무에서 Servlet을 쓰는가?
    • Spring을 더 많이 사용!

HttpServlet VS Servlet

Servlet기본 틀(interface)이고,
HttpServlet은 그걸 확장해서 HTTP 웹 요청을 처리하는 클래스

Spring이나 Java 웹 개발할 때는 대부분 HttpServlet을 상속해서 웹 요청을 처리

1️⃣ Servlet (인터페이스)

  • Java에서 웹 요청을 처리하기 위한 기본 설계도 (interface)
  • HTTP뿐만 아니라 FTP, SMTP 등 다양한 프로토콜도 처리할 수 있도록 설계된 아주 범용적인 규격이야.
  • 그래서 실제 웹 개발에서는 직접 사용하기보다는, 이걸 확장한 HttpServlet을 더 자주 사용.

📌 선언 예시:

public interface Servlet {
    void init(ServletConfig config);
    void service(ServletRequest req, ServletResponse res);
    void destroy();
    ...
}

2️⃣ HttpServlet (클래스)

  • HttpServletGenericServlet을 상속받고, HTTP 요청만 처리하도록 만든 클래스
  • 즉, 웹 브라우저가 보내는 GET, POST, PUT, DELETE 같은 HTTP 방식의 요청을 처리하는 데 특화돼 있음

📌 선언 예시:

public class HttpServlet extends GenericServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse res) { ... }
    protected void doPost(HttpServletRequest req, HttpServletResponse res) { ... }
}

🚀 서블릿(Servlet)을 그대로 쓰는 경우? (거의 안 씀)

서블릿(Servlet)은 Java로 웹 애플리케이션을 만들 때 가장 기본적인 기술이야. 하지만 지금은 거의 직접 사용하지 않음! 대신, Spring 같은 프레임워크가 서블릿을 감싸서(Wrapping) 쉽게 사용할 수 있도록 도와준다.


🔥 서블릿(Servlet)이란?

서블릿(Servlet)Java로 웹 서버에서 동작하는 프로그램. 웹 브라우저가 요청하면 서버에서 응답을 보내주는 역할을 함 💡 쉽게 말하면, “웹 요청을 처리하는 Java 프로그램”


❌ 그런데, 왜 직접 안 쓰지 않을까?

서블릿을 직접 쓰면 복잡하고, 코드가 길어지고, 관리가 어려움

예를 들어, 서블릿을 직접 만들면 이렇게 길고 복잡한 코드가 필요하다:

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("/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html");
        response.getWriter().println("<h1>Hello, Servlet!</h1>");
    }
}

위처럼 서블릿을 직접 쓰면 코드가 길고, 설정이 많고, 유지보수가 어려움!
그래서 대부분의 Java 웹 개발자는 Spring 프레임워크를 사용


Spring이 서블릿을 감싸서(Wrapping) 쉽게 만들어줌!

Spring은 서블릿을 내부적으로 사용하면서도 개발자가 쉽게 웹 애플리케이션을 만들 수 있도록 도와준다.
Spring을 쓰면 위 서블릿 코드 대신, 이렇게 간단하게 쓸 수 있다:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/hello")
public class HelloController {
    @GetMapping
    public String sayHello() {
        return "Hello, Spring!";
    }
}

Spring이 내부적으로 서블릿을 다 처리해 주기 때문에 코드가 간결해지고 유지보수도 쉬움
그래서 현재 Java 웹 개발은 Spring을 기본으로 사용하고, 서블릿을 직접 쓰는 경우는 거의 없음


🎯 하지만 서블릿을 직접 쓰는 경우도 있음!

  1. 전자정부 프레임워크(eGovFrame)

    • 한국 정부 및 공공기관에서 많이 쓰는 프레임워크인데, 내부적으로 서블릿을 사용함.
    • Spring 기반이지만, 서블릿과 JSP를 함께 쓰는 방식이 남아 있음.
  2. 매우 가벼운 웹 애플리케이션을 만들 때

    • Spring은 기능이 많아서 무겁기 때문에, 가끔 간단한 프로젝트에서 서블릿을 직접 쓰기도 함.
  3. 기존 레거시 시스템 유지보수

    • 옛날에 만든 시스템이 서블릿을 기반으로 개발되어 있다면, 그걸 유지보수해야 할 수도 있음.

🔢 서블릿의 최신 버전? (Servlet 4 vs 6)

서블릿도 계속 발전하는데, 최신 버전은 Servlet 6.0이야!

✅ Servlet 4.0 (2017년, Java EE 8)

  • HTTP/2 지원 (속도 개선)
  • 비동기 요청 개선 (더 빠른 응답 가능)

✅ Servlet 6.0 (2022년, Jakarta EE 10)

  • Java 21 지원 (최신 Java 버전 호환)
  • 구식 API 제거 (레거시 코드 정리)
  • 보안 개선 (더 안전한 웹 애플리케이션 개발 가능)

🔥 결론

1️⃣ 서블릿을 직접 쓰는 경우는 거의 없다!
2️⃣ 대부분 Spring 같은 프레임워크가 서블릿을 감싸서(Wrapping) 제공함.
3️⃣ 하지만 전자정부 프레임워크 같은 경우에는 서블릿을 직접 사용할 수도 있음.
4️⃣ 서블릿 최신 버전은 6.0 (Jakarta EE 10 기준). 하지만 대부분 Spring을 쓰기 때문에 신경 쓸 일이 많지는 않음.

📌 즉, 요즘 Java 웹 개발은 대부분 “Spring으로 한다”