아파치? 톰캣? 서블릿 컨테이너? WAS?

GwanMtCat·2023년 9월 18일
0

아파치 (Apache) 란?

아파치 소프트웨어 재단의 오픈소스 프로젝트
웹서버이다.

HTML 문서라 불리는 웹 사이트의 파일들과 이미지, CSS, JavaSciprt 파일, 폰트, 비디오 등을 저장한다.


톰캣(Tomcat)이란?

아파치 소프트웨어 재단(Apache software foundation) 에서 개발한 서블릿 컨테이너(또는 웹 컨테이너) 혹은 WAS

JSP를 만들고, 서블릿 라이프 사이클 관리, 웹 서버(아파치) 와 연동하여 실행할 수 있는 자바 환경을 제공하고, 관리 도구 혹은 XML 파일 편집을 통해 설정을 변경할 수 있다.


서블릿 컨테이너란?

서블릿의 생성부터 소멸까지 일련의 과정을 관리해주는 컨테이너

웹 서버와 통신하기 위한 복잡한 일들 (소켓 생성, 특정 포트 리스닝, 스트림 생성 등)을 알아서 해주기 때문에 개발자가 비즈니스 로직 개발에 집중할 수 있게 해준다.


WAS (Web Application Server) 란?

웹 서버 + 웹(서블릿) 컨테이너

사용자에게 동적 컨텐츠를 제공하기 위해 만들어진 애플리케이션 서버, 주로 데이터베이스와 연결되어 실행이 된다.

웹 애플리케이션과 서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 프레임워크

HTTP를 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행해 주는 미들웨어 (소프트웨어 엔진)으로 볼 수 있다.


톰캣의 동작

  1. Client 가 request 를 합니다.

  2. 톰캣이 가지고 있는 Connector 중 하나를 통해서 request 를 전달받습니다.

  3. 톰캣은 해당 요청을 처리하기 위해 적절한 Engine 을 거쳐 적절한 Servlet 에 매핑합니다.

  4. 요청이 서블릿에 매핑되면, 톰캣은 힙 메모리에 해당 서블릿의 인스턴스가 존재하는지 확인합니다. 존재하지 않는다면, 인스턴스를 생성하고 인스턴스의 init() 메서드를 호출하여 인스턴스를 초기화합니다.

  5. 서블릿이 초기화되면 톰캣은 여러 스레드를 생성하여 여러 요청을 처리합니다.

  6. 톰캣은 각 스레드의 단일 서블릿 인스턴스의 service() 메서드를 호출해서 HTTP 요청을 처리합니다. HTTP request method 에 따라 doGet, doPost 등의 메서드를 적절하게 호출합니다.

  7. 서블릿이 살아있는 동안, 다양한 상태 변화를 모니터링할 수 있는 listener 클래스를 사용할 수 있습니다. 톰캣은 다양한 방식으로 상태 변화를 저장 및 조회할 수 있고 다른 서블릿들도 해당 데이터에 접근할 수 있습니다.

  8. 사용하지 않는 서블릿은 destroy() 메서드를 호출하여 DB Connection 을 닫고, GC 의 대상이 되도록 합니다.


웹서버는 왜 필요한가?

  • 웹서버와 WAS를 분리하여 서버 부하를 방지할 수 있다.
    • WAS는 DB 조회 등 페이지를 만들기 위한 다양한 로직을 처리하는데, 단순한 정적 컨텐츠를 WAS에서 제공한다면 다른 작업에 사용하는 리소스들로 인해 지연이 생겨날 수 있다.

  • 물리적으로 분리하여 보안 강화
    • SSL 에 대한 암복호화 처리를 웹 서버에서 처리한다.
    • 공격에 대해 웹 서버를 앞단에 두어, WAS 까지 전파되지 못하게 한다.

  • 여러 대의 WAS 를 연결 가능하다.
    • 웹 서버와 WAS 를 분리하여, 무중단 운영을 위한 장애 극복에 쉽게 대응할 수 있다.

참조한 책 및 사이트

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

0개의 댓글