목차
▼ 서블릿(Servlet)
서블릿(Servlet) ?
클라이언트(Client)의 요청을 처리하고 그 결과를 클라이언트에 반환해주는 프로그램.
- 동적 웹 페이지 서버에서 각 사용자의 요청을 하나의 스레드로 처리하는 자바(java) 웹 프로그램이다.
- html에 java 코드를 포함하고 있는 "JSP"와 달리 java 코드 내에 html을 포함하고 있다.
서블릿(Servlet)의 동작 (ex. 로그인 페이지)

- 사용자의 id/password를 담은 Http Request를 전송한다.
- Http Request를 받은 "웹 서버(WS)"는 해당 요청을 톰캣(tomcat) 같은 "웹 어플리케이션 서버(WAS)"에게 넘긴다.
( 위 그림에선 "웹 서버"가 생략됐다. ) - HttpServletRequest와 HttpServletResponse 객체를 생성한다.
- WAS는 web.xml이 어느 서블릿(servlet)에 대해 요청한 것인지 탐색한다.
➙ 해당 서블릿(servlet)이 메모리에 없을 경우엔 init() 메서드를 호출해 생성하고, 변경되었을 경우엔 파괴 후 init() 메서드를 호출해 새롭게 생성한다. - 해당하는 서블릿(servlet)에서 service() 메서드를 호출하고 GET/POST 요청에 따라 doGet()/doPost() 메서드를 호출한다.
- 서블릿(servlet)이 요청에 대해 처리한 결과를 HttpServletResponse에 담아 클라이언트(client)에 전송한다.

💡 "웹 서버(WS)" vs "웹 서버 어플리케이션(WAS)"
"웹 서버"는 정적인 데이터(이미지, html ...)를 처리하는 서버이고,
"WAS"는 DB와 연결되어 웹 서버가 처리하기 힘든 비즈니스(서버 사이드) 로직 등을 수행하는 등 동적인 데이터를 처리하는 서버이다.
서블릿(Servlet)의 "Life Cycle"을 관리하는 "서블릿 컨테이너(Servlet Container)"
Servlet의 생명 주기(Life Cycle)
- Servlet 클래스를 로딩하여 인스턴스화(Servlet 객체 생성).
- init() 호출(초기화)
- service() - HTTP 요청시마다 필요한 doGet(), doPost(), ... 호출
- destroy() 호출(Garbage Collection)

- Servlet이 웹 서버(Web Server)와 통신할 수 있게 해준다 !
➙ Servlet을 관리(handling)하는 역할, 즉 받은 요청에 대해 어떤 Servlet을 실행할 것인지 제어한다고 볼 수 있다.
ex) 톰캣(Tomcat): "자바 서버 페이지(JSP)"와 "서블릿(servlet)"이 작동하는 환경을 제공해준다. ) - 구체적으로 말하면,
요청에 해당하는 web.xml을 기반으로 사용자가 요청한 URL이 어느 서블릿에 대한 요청인지 탐색하는 것이 "서블릿 컨테이너(Servlet Container)"가 하는 일이다.
서블릿 컨테이너의 이점
- 웹 서버(Web Server)와 서블릿(servlet) 사이의 통신을 도와줌으로써 개발자는 서블릿에 구현해야 할 비즈니스 로직에 대해서만 집중할 수 있다.
- 서블릿(servlet)의 "생명 주기(Life Cycle)"을 관리한다.
- 멀티 쓰레드 지원하고 관리한다.
: 요청이 올 때마다 새로운 자바 쓰레드를 하나 생성하고, HTTP 서비스 메서드를 실행하고 나면 해당 쓰레드를 자동으로 죽게 된다.
➙ 쓰레드의 안정성을 걱정할 필요가 없다 ! - 서블릿 컨테이너(Servlet Container)를 사용하면 개발자가 보안에 관련된 코드를 서블릿(servlet) 혹은 java 클래스에 구현할 필요가 없다.
▼ 서블릿(Servlet)
서블릿(Servlet) ?
클라이언트(Client)의 요청을 처리하고 그 결과를 클라이언트에 반환해주는 프로그램.
- 동적 웹 페이지 서버에서 각 사용자의 요청을 하나의 스레드로 처리하는 자바(java) 웹 프로그램이다.
- html에 java 코드를 포함하고 있는 "JSP"와 달리 java 코드 내에 html을 포함하고 있다.
서블릿(Servlet)의 동작 (ex. 로그인 페이지)

- 사용자의 id/password를 담은 Http Request를 전송한다.
- Http Request를 받은 "웹 서버(WS)"는 해당 요청을 톰캣(tomcat) 같은 "웹 어플리케이션 서버(WAS)"에게 넘긴다.
( 위 그림에선 "웹 서버"가 생략됐다. ) - HttpServletRequest와 HttpServletResponse 객체를 생성한다.
- WAS는 web.xml이 어느 서블릿(servlet)에 대해 요청한 것인지 탐색한다.
➙ 해당 서블릿(servlet)이 메모리에 없을 경우엔 init() 메서드를 호출해 생성하고, 변경되었을 경우엔 파괴 후 init() 메서드를 호출해 새롭게 생성한다. - 해당하는 서블릿(servlet)에서 service() 메서드를 호출하고 GET/POST 요청에 따라 doGet()/doPost() 메서드를 호출한다.
- 서블릿(servlet)이 요청에 대해 처리한 결과를 HttpServletResponse에 담아 클라이언트(client)에 전송한다.

💡 "웹 서버(WS)" vs "웹 서버 어플리케이션(WAS)"
"웹 서버"는 정적인 데이터(이미지, html ...)를 처리하는 서버이고,
"WAS"는 DB와 연결되어 웹 서버가 처리하기 힘든 비즈니스(서버 사이드) 로직 등을 수행하는 등 동적인 데이터를 처리하는 서버이다.
서블릿(Servlet)의 "Life Cycle"을 관리하는 "서블릿 컨테이너(Servlet Container)"
Servlet의 생명 주기(Life Cycle)
- Servlet 클래스를 로딩하여 인스턴스화(Servlet 객체 생성).
- init() 호출(초기화)
- service() - HTTP 요청시마다 필요한 doGet(), doPost(), ... 호출
- destroy() 호출(Garbage Collection)

- Servlet이 웹 서버(Web Server)와 통신할 수 있게 해준다 !
➙ Servlet을 관리(handling)하는 역할, 즉 받은 요청에 대해 어떤 Servlet을 실행할 것인지 제어한다고 볼 수 있다.
ex) 톰캣(Tomcat): "자바 서버 페이지(JSP)"와 "서블릿(servlet)"이 작동하는 환경을 제공해준다. ) - 구체적으로 말하면,
요청에 해당하는 web.xml을 기반으로 사용자가 요청한 URL이 어느 서블릿에 대한 요청인지 탐색하는 것이 "서블릿 컨테이너(Servlet Container)"가 하는 일이다.
서블릿 컨테이너의 이점
- 웹 서버(Web Server)와 서블릿(servlet) 사이의 통신을 도와줌으로써 개발자는 서블릿에 구현해야 할 비즈니스 로직에 대해서만 집중할 수 있다.
- 서블릿(servlet)의 "생명 주기(Life Cycle)"을 관리한다.
- 멀티 쓰레드 지원하고 관리한다.
: 요청이 올 때마다 새로운 자바 쓰레드를 하나 생성하고, HTTP 서비스 메서드를 실행하고 나면 해당 쓰레드를 자동으로 죽게 된다.
➙ 쓰레드의 안정성을 걱정할 필요가 없다 ! - 서블릿 컨테이너(Servlet Container)를 사용하면 개발자가 보안에 관련된 코드를 서블릿(servlet) 혹은 java 클래스에 구현할 필요가 없다.