JAVA/Tomcat

Tomcat Document를 읽어 보자!(1)

arrowJ 2021. 8. 28. 22:44

자바 웹개발자라면 누구나 톰캣을 알고 사용하고 있다. 나도 10여녀간 개발을 하면서 많이 사용하고 있는 프로그램 중 하나이다. 그러나 지금까지 톰캣의 문서를 자세히 읽어 본적은 없다. (문제가 있으면 구글링해서 해결을....) 이제라도 내가 사용하는 톰캣의 문서를 읽어 보려한다.

톰캣8.5를 기준으로 한다. Docment는 총 34개의 챕터로 이루어져 있다. 

 

지금 부터 하나씩 살펴 보기로 하자. Document 의 목차에

This is the top-level entry point of the documentation bundle for the Apache Tomcat Server/JSP container.

라는 문장이 있다. 즉 톰캣은 Servlet/JSP 컨테이너(이하 Servlet 컨테이너) 라고 정의 하고 있는데 이 Sevlet 컨테이너라는 것이 무엇인지 알아보고 넘어가기로 하자.  Servlet 컨테이너를 이해하려면 먼저 웹서버를 이해 해야 한다.

 

웹서버는 HTTP protocol을 사용하여 데이터를 전달한다. 일반적으로 브라우저에 URL을 입력하여 웹페이지를 얻고 웹서버는 사용자에게 해당 웹페이지를 전달하게 된다. 이것은 오로지 서버가 클라이언트에게 일방적으로 정적(static)한 페이지 나 리소스 일 경우에 주로 사용하게 된다. 하지만 현대(사실 꽤 오래전 부터...) 웹에서는 해당 기능만으로는 다양한 클라이언트 요구를 수용하지 못한다. 우리가 많이 사용하는 온라인 쇼핑몰을 생각해보라. 이커머스에는 웹에서 셀 수 없이 많은 기능을 내포하고 있다. 하지만 웹서버 만으로는 해당 기능들을 모두 충족할 수가 없다. 그래서 웹에서 클라이언트가 요구하는 기능을 구현하기 위해서 단순한 웹서버 외에 다른 프로그램이 필요하다.

자바에서는 서버용 프로그램으로 Servlet을 구현하여 사용하며,  Servlet 컨테이너는 Servlet과 상호 작용하는 웹서버 이다.

 

Servlet 이란?

Servlet 이란 javax.servlet 패키지에 정의된 인터페이스 이다. 서블릿 라이프 사이클을 위한 세 가지 필수적인 메소드를 정의하여야 한다.

package javax.servlet;

public interface Servlet {
    void init(javax.servlet.ServletConfig servletConfig) throws javax.servlet.ServletException;

    javax.servlet.ServletConfig getServletConfig();

    void service(javax.servlet.ServletRequest servletRequest, javax.servlet.ServletResponse servletResponse) throws javax.servlet.ServletException, java.io.IOException;

    java.lang.String getServletInfo();

    void destroy();
}

 

init() : 서블릿 라이프 사이클 초기화 단계에서 호출된다. 서블릿이 웹앱에서 초기화 매개변수에 액세스 할 수 있도록 하는 javax.servlet.ServletConfig 인터페이스를 구현하는 객체가 전달된다.

service() : service 메서드는 초기화 후 각 요청에 따라 호출되며, 각 요청은 자체 별도의 스레드에서 처리된다. 웹 컨테이너는 모든 요청에 대해 서블릿의 service() 메서드를 호출한다. service() 메서드는 생성되는 요청의 종류를 결정하고 요청을 처리하기 위해 적절한 메소드로 전달한다.

destroy : 서블릿 객체가 파괴되어야 할 때 호출된다. 보유하고 있는 자원을 해제 한다.

 

Servlet 컨테이너와 웹 서버는 어떻게 요청을 처리하는가?

1. 웹 서버가 HTTP 요청을 수신

2. 웹 서버는 요청을 서블릿 컨테이너로 전달합니다.

3. 서블릿이 컨테이너에 없는 경우 동적으로 검색되어 컨테이너의 주소 공간으로 로드된다.

4. 컨테이너는 초기화를 위해 서블릿의 init() 메서드를 호출한다.(서블릿이 처음 로드 될 때 한 번 호출)

5. web.xml을 기반으로 클라이언트가 요청한 URL이 어느 서블릿에 대한 요청인지 찾는다.

6. 해당 서블릿의 service 메소드를 호출한 후 클라이언트의 GET, POST 여부에 따라  doGet() 또는 doPost()를 호출한다.

7. 웹서버는 동적으로 생성된 결과를 클라이언트에게 제공한다.

 

 

[참고]

https://www.programcreek.com/2013/04/what-is-servlet-container/

 

What is Servlet Container?

In this post, I write a little bit about the basic ideas of web server, Servlet container and its relation with JVM. I want to show that Servlet container is nothing more than a Java program. 1. What is a Web Server? To know what is a Servlet container, we

www.programcreek.com

https://mangkyu.tistory.com/14

 

[JSP] 서블릿(Servlet)이란?

1. Servlet(서블릿) 서블릿을 한 줄로 정의하자면 아래와 같습니다.  클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술 간단히 말해

mangkyu.tistory.com