서블릿(Servlet) 이란?
- 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종
- 클라이언트의 요청에 맞춰 동적인 결과를 만들어 주는 자바 웹 프로그래밍 기술
- 서블릿은 WAS(Web Application Server)의 서블릿 컨테이너 안에서 동작하며 , 요청(Request)을 받으면 요청에 맞는 로직을 실행하고 클라이언트에게 HTTP 형식으로 응답(Response)하게 된다.
서블릿의 특징
- 클라이언트의 요청에 동적으로 응답하는 웹 어플리케이션 컴포넌트
- HTML을 사용하여 응답한다.
- JAVA의 쓰레드를 이용한다.
- MVC 패턴의 Controller 역할을 맡는다.
- HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받는다.
🧭 서블릿 등장 배경
- 기존 서버는 정적인 자료(HTML, 사진, 글 등)만을 주고받았다.
- 웹에 다양한 기능이 요구되면서 정적인 자료뿐만 아니라 사용자 요구에 맞춘 동적인 페이지들을 만들 필요가 생겼다.
- 이를 위해 만들어진 것이 바로 서블릿이다.
서블릿 컨테이너란?
- 서블릿을 담고 관리해주는 컨테이너
- 구현되어 있는 서블릿 클래스의 규칙에 맞게 서블릿을 관리하며 클라이언트의 요청을 받으면
HttpServletRequest와 HttpServletResponse 객체를 생성하여 post, get 여부에 따라 동적인 페이지를 생성하여 응답한다.

출처: https://code-lab1.tistory.com/210
서블릿 컨테이너의 기능
1. 서블릿 생명주기 관리
- 서블릿의 탄생과 죽음을 관리한다.
- 서블릿 클래스를 로딩하여 인스턴스화하고, 초기화 메서드를 호출하고, 요청이 들어오면 적절한 서블릿 메서드를 찾아서 동작한다.
- 서블릿의 생명이 다하면 가비지 컬렉션(Garbage Collection)을 통해 메모리에서 제거한다.
2. 통신지원
- 웹 서버와 소켓을 만들어서 클라이언트의 요청을 받고 응답할 수 있는 통신을 지원해준다.
- 통신을 하기 위한 listen, accept 등의 과정을 API로 제공하여 복잡한 과정을 생략해주기 때문에 개발자가 비즈니스 로직 개발에 집중할 수 있게 도와준다.
3. 멀티쓰레드 지원 및 관리
- 클라이언트의 요청을 받을 때마다 새로운 자바 스레드를 생성한다.
- 동시에 여러 요청이 들어와도 멀티쓰레딩 환경에서 동시다발적인 작업을 관리할 수 있다.
4. 선언적인 보안 관리
- 보안 관련 기능을 제공하기 때문에 개발자는 서블릿에 보안 관련 메서드를 구현하지 않아도 된다.
💡 컨테이너 (Container)
- 동적인 데이터들을 처리하여 정적인 페이지로 생성 해주는 소프트웨어 모듈
- 사용자가 로그인해서 마이페이지에 접근하는 경우, 사용자마다 보여지는 화면이 다르다.
- 사용자의 요청이 들어오면 웹 서버는 정적인 요소만 클라이언트 측에 보낼 수 있고 , 동적으로 처리해야 하는 부분은 처리할 수 없다.
- 컨테이너는 동적인 부분을 대신 처리해서 웹 서버에 정적인 파일로 만들어서 보내주는 모듈이라고 생각하면 쉽다.
톰캣 (Tomcat)
- 웹 서버와 웹 컨테이너의 결합 (컨테이너, 웹 컨테이너, 서블릿 컨테이너라고 부름)
- 현재 가장 일반적이고 많이 사용되는
WAS(웹 애플리케이션 서버)
- JSP와 서블릿 처리, 서블릿의 수명 주기 관리, 요청 URL을 서블릿 코드로 매핑, HTTP 요청 수신 및 응답, 필터 체인 관리 등을 처리해준다.
- 톰캣(WAS)에서 편의를 위해 아파치의 기능(웹서비스 데몬, Httpd)을 포함하고 있기 때문에 (톰캣이 아파치의 기능 일부를 가져와서 제공해주는 형태) 아파치 톰캣이라고 부른다.
🌍 Web Server
- http 프로토콜 기반으로 web client (browser) 로부터의 요청을 서비스하는 기능을 담당하는 프로그램
- 클라이언트 요청(
POST,GET,DELETE 등)이 왔을때만 응답한다.
- 정적인 데이터에 대한 처리를 담당한다.
🌍 WAS(Web Application Server)
- DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 Application Server
- '웹 컨테이너(
Web Container)' 또는 '서블릿 컨테이너(Servlet Container)'라고도 불린다.
- Container란 JSP, Servlet을 실행시킬 수 있는 소프트웨어를 말한다.
- 즉, WAS는 JSP, Servlet 구동 환경을 제공한다
출처
https://jusungpark.tistory.com/15
https://code-lab1.tistory.com/210
https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html
https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-%EC%9B%B9-%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B5%AC%EC%A1%B0-%EC%A0%95%EB%A6%AC#%EC%9B%B9_%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88_container
https://joel-dev.site/84
https://yangbongsoo.gitbook.io/study/servlet_container
https://inpa.tistory.com/entry/TOMCAT-%E2%9A%99%EF%B8%8F-%EC%84%A4%EC%B9%98-%EC%84%A4%EC%A0%95-%EC%A0%95%EB%A6%AC