카카오 테크 캠퍼스 5주차

boseung·2023년 5월 16일
0

Tomcat(WAS, Servlet Container)

Tomcat은 Java 웹 애플리케이션을 호스팅하기 위한 서버(Web Application Server)로, Servlet Container라고도 할 수 있다.

Tomcat은 웹 애플리케이션을 호스팅하기 위해 WAR(Web Application Archive) 파일 형태로 배포한다. WAR 파일은 웹 애플리케이션의 모든 구성 요소와 리소스를 하나로 묶은 일종의 압축파일이다. 주로 Java 웹 애플리케이션을 배포하는데 사용된다.

Tomcat은 위에서 언급한 것처럼 Servlet 컨테이너 역할을 수행하는데, Servlet 인스턴스 생성 및 관리, Servlet의 멀티 스레딩 지원 등이 이뤄진다.

Tomcat의 동작 원리를 좀더 자세히 알아보면 다음과 같다.

Tomcat 작동원리

  1. 클라이언트가 정적 파일을 요청하는 경우 웹서버에서 처리되고 동적 파일을 요청하는 경우 웹서버는 Http Request 요청을 Servlet Container(WAS)로 보낸다.
  2. 요청을 받은 Servlet Container는 HttpServletRequest, HttpServletResponse 객체를 생성한다. 여기서 HttpServletRequest 객체는 클라이언트의 요청 정보를 담고 있고, HttpServletResponse 객체는 Servlet 생성한 응답을 담고 있다.
  3. Servlet Container는 사용자가 요청한 URL을 분석하여 어느 Servlet에 대한 요청인지 탐색한다. 이때 Servlet Mapping은 web.xml이나 annotation 방식을 통해 지정된다.
  4. 요청한 Servlet 객체가 이전에 한번도 생성되지 않았다면 Servlet Container는 Servlet 객체를 생성 후 init() 메서드를 통해 초기화 작업을 수행하고, 메모리에 로드시킨다. 만약 이전에 Servlet 객체가 생성한 적이 있다면 객체를 다시 생성하지 않고 재사용한다.
  5. 요청에 맞는 Servlet 객체가 생성되었다면, Servlet Container는 Thread Pool에서 Thread를 가져와 할당한다. Thread 생성은 많은 비용이 들고, 너무 많이 생성하면 CPU나 메모리의 한계를 넘어서 서버가 죽어버릴 수 있기 때문에 Thread Pool에 정해진 수의 Thread를 미리 생성해놓고 사용한다.
  6. Thread가 할당되고나서 Servlet 객체의 service() 메서드를 호출한다. 이때 요청이 Get방식이면 doGet() 메서드를 호출하고, Post방식이면 doPost() 메서드를 호출한다. 이 단계에서 Servlet은 HttpServletRequest, HttpServletResponse 객체를 인자로 전달받아서 클라이언트 요청에 대한 처리를 수행한다.
  7. 클라이언트 요청에 대한 처리가 끝나면 HttpServletResponse 객체에 응답을 담아서 웹서버로 전달하고 웹서버는 클라이언트에게 응답을 전송한다.
  8. 응답이 다 끝나면 HttpServletRequest, HttpServletResponse 객체를 소멸시킨다. Servlet 인스턴스는 재사용이 가능하므로, 다음 요청이 오면 해당 인스턴스를 재사용한다.

서블릿 컨테이너 요청 처리 과정

Tomcat의 동작원리

profile
Dev Log

0개의 댓글

관련 채용 정보