서블릿의 등장 배경
POST /save HTTP/1.1 HOST: localhost:8080 Content-Type: application/x-www-form-urlencoded username=ndy&age=20
- HTTP
POST
를 통해 와 같은 요청 메시지가 서버에 전달되면 서버는 아래의 모든 일을 수행해야한다. - TCP/IP 연결 대기 → 소켓 연결
- HTTP 요청 메시지 파싱 (스타트 라인, 헤더, 메시지 바디 파싱)
- 비즈니스 로직 실행
- HTTP응답 메시지 생성(스타트 라인, 헤더, 미시지 바디 생성)
- TCP/IP에 응답 전달 → 소켓 종료
웹 요청시 발생하는 공통되는 처리를 담당하는 인터페이스 (Servlet)을 만들고 그것을 WAS(e.g. tomcat)가 처리하게 하자!
개발자들이 진짜 집중해야하는 비즈니스 로직 - 가운데 있는 처리 로직에 더 집중 할 수 있게 된다.
Servlet : CGI 를 개선한것
개선점 1. 요청마다 Process가 아닌 Thread를 생성한다.
개선점 2. Singletone 패턴 적용
서블릿
@WebServlet(name = "helloServlet", urlPatterns = "/hello") public class HelloServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response){ //애플리케이션 로직 } }
A servlet is a small Java program that runs within a Web server. Servlests receive and respond to requests from Web clients, usually across HTTP

웹서버(?)의 내부에서 동작하며 클라이언트로 부터 HTTP요청을 받아 응답하는 작은 자바 프로그램
WAS가 JSP 뷰를 사용할 수 있도록하는 기능 제공 (redirect, forward)
@) See Also
서블릿의 생명 주기 (Servlet life-cycle)
- 초기화 : 첫 요청시 -
init( )
- 요청을 받으면 -
service( )
- HTTPSERVLET → doGet( ), doPost( )
- 소멸 -
destory( )
→ gc 됨
서블릿 컨테이너
- 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 함 (자바 진영)
- 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기 관리
- 서블릿 객체는
싱글톤
으로 관리 - 상태 X (필드에 저장 X)
- 동시 요청을 위한 멀티 쓰레드 처리 지원
서블릿 MVC(Servlet+JSP MVC1, 2) vs 스프링 MVC

DispatcherServlet도입 -> View를 강제로 분리하는 효과 (MVC2 패턴)
Spring MVC - 프론트 컨트롤러 패턴!
@참고)
- 김영한님 강의
- [10분 테코톡] 🌻타미의 Servlet vs Spring
- [10분 테코톡] 🐶 코기의 Servlet vs Spring