Blog
스터디
CS Study with SON
15주차
톰캣

출처 - https://github.com/jmxx219/CS-Study (opens in a new tab)

Tomcat

배경지식

Web Server

개념

  • HTTP 프로토콜을 이용해 정적인 웹페이지를 보여주는 역할을 하는 서버
    • 클라이언트로부터 HTTP요청을 받아드리고 HTML문서와 같은 웹 페이지를 반환하는 컴퓨터 프로그램
    • 위 기능을 제공하는 컴퓨터 프로그램을 실행하는 컴퓨터(하드웨어 측면)
  • HTTP 프로토콜 기반으로, 클라이언트의 요청을 서비스하는 기능

역할

  • 정적 컨텐츠 제공
    • WAS를 거치지 않고 바로 자원 제공
  • 동적 컨텐츠 제공을 위한 요청 전달
    • 동적컨텐츠 요청을 WAS로 넘겨주고, WAS에서 처리한 결과를 클라이언트에게 전달

기능

  • Reverse Proxy

    • 서버와 클라이언트 사이 프록시를 두고 프록시를 통해 데이터를 주고받음
    • 보안의 이유로 서버 내부 구조를 감추기 위해 사용
    Forward Proxy : 서버에 방문하는 클라이언트의 주소를 감춤
    Reverse Proxy : 클라이언트에게 서버의 주소를 감춤
  • 로드 밸런싱

    • 클라이언트의 요청에 따른 처리를 동작 중인 여러 WAS에게 적절히 분배
  • 캐싱

    • Reverse Proxy의 캐시를 의미
    • 서버로 찾아오는 클라이언트들이 자주, 반복적으로 요청하는 리소스들을 프록시 서버에 저장하고 제공
  • 주기적인 체크

    • 웹 서버에 존재하는 수 많은 모듈을 사용해 WAS서비스가 정상적으로 동작하고 있는지 체크

Reverse Proxy, 로드밸런싱, 캐싱의 역할을 Web Server가 담당하기에 Web Server와 WAS를 함께 이용한다


필요성

  • 단순 정적 컨텐츠 처리를 맡으며 서버 부하 방지 및 효율적 분산처리 수행

예시

  • Apache, NginX, IIS(window 전용 web서버)


WAS (Web Application Server)

개념

  • DB조회 및 다양한 로직을 처리를 요구하는 동적 컨텐츠를 제공하기 위해 만들어진 Application server

  • HTTP를 통해 컴퓨터나 장치에 어플리케이션을 수행해주는 미들웨어

  • 웹 컨테이너, 서블릿 컨테이너라고도 불림

    • 웹 컨테이너

      • JSP, Servlet을 실행할 수 있는 소프트웨어

      • 웹 서버에서 JSP를 요청하면 톰캣에서는 JSP파일을 서블릿으로 변환하여 컴파일을 수행하고, 서블릿 수행결과를 웹 서버에게 전달

      • JSP컨테이너가 탑재되어있는 WASsms JSP페이지를 컴파일해 동적인 페이지 생성

    • 즉 WAS는 JSP, Servlet 구동환경을 제공

역할

  • Web Server 기능들을 구조적으로 분리해 처리하는 목적으로 제시

  • 현재 WAS가 가지는 Web server도 정적 컨텐츠를 처리하는데 성능상 큰 차이 없음


기능

  • 프로그램 실행 환경과 데이터베이스 접속 기능 제공

  • 여러개의 트랜잭션 관리

  • 업무를 처리하는 비즈니스 로직 수행

  • Web Service 플랫폼으로서의 역할


필요성

  • 자원의 효율적 사용: 요청에 맞는 데이터를 DB에서 가져와 비즈니스 로직에 맞춰 그때그때 결과 제공

예시

  • Tomcat, ,Jetty, Undertow, Boss, Jeus, Web Sphere

위의 예시들은 자바진영에서 사용하는 것을 WAS로, 자바이외의 다른 진영에서는 WAS역할을 명확히 구분해놓지 않고있다.


JSP (Java Server Pages)

  • HTML코드에 JAVA코드를 넣어 동적 웹페이지를 생성하는 웹어플리케이션 도구
  • JSP가 실행되면 서블릿으로 변환되며 웹 어플리케이션 서버에서 동작되며 필요한 기능 수행
  • 위를 통해 생성된 데이터를 웹 페이지와 함께 클라이언트로 응답

Web Server와 WAS의 분리이유

  • 기능 분리로 서버 부하 방지

  • 물리적 분리로 보안강화

  • 여러대의 WAS 연결이 가능하므로 로드밸런싱, fail over, fail back 처리에 유리

  • 여러 웹 어플리케이션 서비스 가능



Apache Tomcat 이란?

  • Apache 재단에서 제공하는 공개 소프트웨어 웹 어플리케이션(WAS)

  • Tomcat이 Apache의 기능 일부를 가져와 제공해주는 형태로 Apache Tomcat으로 같이 합쳐서 부름

Apache

  • Apache 소프트웨어 재단에서 관리하는 HTTP 웹 서버

    • 흔히 부르는 apache server는 해당 재단에서 후원하는 오픈소스 프로젝트 커뮤니티에서 만든 http 웹 서버를 의미

Tomcat

개념

  • Apache 재단에서 개발한 서블릿 컨테이너(WAS)

  • JSP, 자바 서블릿과 같은 자바 기술을 실행하고 관리하는데 사용


구성

  • Coyote (HTTP Connector)

    • 톰캣의 HTTP Connector 역할 담당

      • 클라이언트와 서버간의 통신 처리

      • HTTP 프로토콜 지원

    • 아파치 웹서버와 함께 정적파일 서비스

    클라인트와 통신을 담당


  • Catalina (Servlet Container)

    • 톰캣의 Servlet Container 역할

      • JSP, Java Servlet을 호스팅하는 환경 제공

      • 서블릿의 라이프사이클 관리

    서블릿과 JSP의 실행


  • Jasper (JSP Engine)

    • 톰캣의 JSP엔진

      • JSP페이지를 서블릿으로 변환하고 실행하는 역할

      • 클라이언트가 JSP페이지에 접근하면 이를 서블릿 코드로 변환하고 컴파일 후 실행

    JSP페이지의 처리


동작

  1. HTTP request: HTTP요청을 Coyote에서 받아 Catalina로 전달

  2. Catalina : Catalina에서 전달받은 HTTP요청을 처리할 웹 어플리케이션(Context)를 찾음

  3. Context : WEB-INF/web.xml 파일 내용을 참조해 전달받은 요청을 서블릿에게 전달

  4. Servlet : 요청된 Servlet을 통해 생성된 jsp 파일들이 호출될 때, Jasper (JSP Engine)가 Validation Check / Compile 등을 수행


특징

  • Tomcat은 자바로 작성된 프로그램으로 JVM위에서 동작

    • 하나의 JVM에 하나의 Tomcat Instance(Server)가 하나의 프로세스로 동작


Embedded Tomcat

외장 톰캣

어플리케이션 실행

  • 톰캣 설치

    • 실제 자바로 작성된 코드와 상호작용할 서블릿 컨테이너가 필요함
  • 톰캣 설정 파일 구성

  • 톰켓 webapp 디렉토리에 빌드된 스프링 어플리케이션 war파일 포함

  • 톰캣 실행

특징

  • Host설정으로 apache virtual host 설정 가능

    • Apache HTTPd에서 사용하는 Virtual Host 기능 제공

      • Virtual Host : main host 하위에 가상의 호스트를 소프트웨어적으로 둘 수 있는 기능

    즉 여러 어플리케이션을 하나의 포트로 서비스 할 수 있음


내장 톰캣

  • Spring boot에는 톰캣이 내장되어있음

    • 어플리케이션 빌드와 실행만으로 웹 어플리케이션 서비스 가능

    • 톰캣을 설치할 필요없이 어플리케이션 바로 실행 가능

어플리케이션 실행

  • 빌드된 스프링부트 어플리케이션 jar, war를 자바 명령어로 실행

특징

  • 여러 호스트를 분기할 수 있는 기능을 사용하기 매우 복잡

    • 내장톰캣으로 실행하는 Spring boot어플리케이션은 그 자체가 하나의 프로그램으로 서블릿 컨테이너가 하나의 포트를 독자적으로 점유
  • 톰캣 구성 부분의 관심사를 분리하여 개발자가 코드 작성에 집중 가능



Ref

아파치 톰캣 내부구조 (opens in a new tab)
Web - 아파치(Apache)/톰캣(Tomcat)이란? (opens in a new tab)
Embedded Tomcat과 Tomcat의 차이 (opens in a new tab)