아파치 소프트웨어 재단의 오픈소스 프로젝트
웹서버이다.
HTML 문서라 불리는 웹 사이트의 파일들과 이미지, CSS, JavaSciprt 파일, 폰트, 비디오 등을 저장한다.
아파치 소프트웨어 재단(Apache software foundation) 에서 개발한 서블릿 컨테이너(또는 웹 컨테이너) 혹은 WAS
JSP를 만들고, 서블릿 라이프 사이클 관리, 웹 서버(아파치) 와 연동하여 실행할 수 있는 자바 환경을 제공하고, 관리 도구 혹은 XML 파일 편집을 통해 설정을 변경할 수 있다.
서블릿의 생성부터 소멸까지 일련의 과정을 관리해주는 컨테이너
웹 서버와 통신하기 위한 복잡한 일들 (소켓 생성, 특정 포트 리스닝, 스트림 생성 등)을 알아서 해주기 때문에 개발자가 비즈니스 로직 개발에 집중할 수 있게 해준다.
웹 서버 + 웹(서블릿) 컨테이너
사용자에게 동적 컨텐츠를 제공하기 위해 만들어진 애플리케이션 서버, 주로 데이터베이스와 연결되어 실행이 된다.
웹 애플리케이션과 서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 프레임워크
HTTP를 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행해 주는 미들웨어 (소프트웨어 엔진)으로 볼 수 있다.
Client 가 request 를 합니다.
톰캣이 가지고 있는 Connector 중 하나를 통해서 request 를 전달받습니다.
톰캣은 해당 요청을 처리하기 위해 적절한 Engine 을 거쳐 적절한 Servlet 에 매핑합니다.
요청이 서블릿에 매핑되면, 톰캣은 힙 메모리에 해당 서블릿의 인스턴스가 존재하는지 확인합니다. 존재하지 않는다면, 인스턴스를 생성하고 인스턴스의 init() 메서드를 호출하여 인스턴스를 초기화합니다.
서블릿이 초기화되면 톰캣은 여러 스레드를 생성하여 여러 요청을 처리합니다.
톰캣은 각 스레드의 단일 서블릿 인스턴스의 service() 메서드를 호출해서 HTTP 요청을 처리합니다. HTTP request method 에 따라 doGet, doPost 등의 메서드를 적절하게 호출합니다.
서블릿이 살아있는 동안, 다양한 상태 변화를 모니터링할 수 있는 listener 클래스를 사용할 수 있습니다. 톰캣은 다양한 방식으로 상태 변화를 저장 및 조회할 수 있고 다른 서블릿들도 해당 데이터에 접근할 수 있습니다.
사용하지 않는 서블릿은 destroy() 메서드를 호출하여 DB Connection 을 닫고, GC 의 대상이 되도록 합니다.
참조한 책 및 사이트
https://mellonia-lab.tistory.com/73
https://e-una.tistory.com/73
https://kingofbackend.tistory.com/71
https://velog.io/@remon/%EA%B0%9C%EB%B0%9C-%EA%B8%B0%EB%B3%B8-%EC%A7%80%EC%8B%9D-WEB%EC%95%84%ED%8C%8C%EC%B9%98%EA%B3%BC-WAS%ED%86%B0%EC%BA%A3-%EC%B0%A8%EC%9D%B4