Tomcat
Tomcat이라고도 하는 Apache Tomcat은 Apache Software Foundation에서 개발한 오픈 소스 웹 서버 및 Servlet 컨테이너입니다.
Tomcat은 Java Servlet, JSP(JavaServer Pages) 및 EL(Java Expression Language)을 포함하여 Java 플랫폼의 여러 핵심 기술을 구현합니다.
Java 코드를 실행할 수 있는 “순수한 Java” 웹 서버 환경을 제공합니다.
톰캣의 특징
- 서블릿 컨테이너
- 본질적으로 Tomcat은 웹 애플리케이션에서 요청과 응답을 처리하는 작은 서버측 애플리케이션인 Java 서블릿을 실행하는 서블릿 컨테이너입니다.
- JSP 엔진
- Tomcat에는 실행을 위해 JSP를 서블릿으로 변환한 다음 컴파일하고 나중에 사용할 수 있도록 결과를 캐시하는 JSP 엔진이 포함되어 있습니다.
- 보안
- Tomcat은 보안 웹 애플리케이션 호스팅을 허용하는 다양한 보안 구성을 지원합니다.
- 다양한 인증 방식을 지원합니다.
- 확장성 및 성능
- Tomcat은 속도와 확장성으로 유명합니다.
- 스레드 풀을 사용하여 동시에 많은 수의 요청을 처리할 수 있으며 다양한 구성 설정을 통해 성능을 더욱 향상시킬 수 있습니다.
- 경량
- 다른 Java Enterprise Edition(EE) 서버에 비해 Tomcat은 상대적으로 가볍기 때문에 개발자 및 소규모 애플리케이션에 적합합니다.
Workflow
웹 브라우저로부터 a.jsp 파일에 대한 요청이 들어왔다고 가정하겠습니다.
이 경우, 요청이 바로 a.jsp 파일을 반환하면 웹 브라우저는 이를 해석하지 못합니다.
왜냐하면 웹 브라우저는 기본적으로 HTML 파일만을 렌더링할 수 있기 때문입니다.
따라서, 이런 JSP 파일에 대한 요청이 들어오면, 웹 서버인 Apache는 이 요청을 백엔드의 톰캣으로 전달합니다.
그럼 톰캣은 a.jsp 파일을 컴파일하여 HTML 코드로 변환합니다.
이렇게 웹 서버인 Apache는 톰캣이 없으면 Java 코드를 이해하지 못하는 것입니다.
Tomcat은 웹 서버가 처리하지 못하는 Java 관련 요청을 처리하고 컴파일하는 역할을 합니다.
그래서 Apache와 Tomcat은 종종 함께 사용되어, 서버 사이드 Java 애플리케이션을 실행하는데 필요한 기능을 제공합니다.
Workflow 예시
다음은 Tomcat이 해당 요청을 처리하는 간단한 순서입니다.
- 커넥터는 클라이언트의 HTTP 요청을 수신합니다.
- 커넥터는 해당 엔진에 요청을 전달합니다.
- 엔진은 요청을 올바른 호스트에 매핑합니다.
- 호스트는 요청을 해당 컨텍스트에 매핑합니다.
- 컨텍스트는 처리를 위해 적절한 서블릿에 요청을 보냅니다.
- 서블릿은 요청을 처리하고 컨텍스트, 호스트, 엔진 및 커넥터를 통해 응답을 다시 보냅니다.
- 커넥터는 응답을 다시 클라이언트로 보냅니다
이 아키텍처를 통해 Tomcat은 여러 요청을 동시에 효율적이고 안전하게 처리할 수 있습니다.
Tomcat 구성 파일
Tomcat의 동작은 다음을 포함한 다양한 구성 파일을 통해 사용자 지정할 수 있습니다.
- server.xml
- Tomcat의 기본 구성 파일입니다.
- 서버, 서비스, 커넥터, 엔진, 호스트 및 컨텍스트의 속성을 정의합니다.
- web.xml
- 배포 설명자로 알려진 이 XML 파일은 초기화 매개변수 및 컨테이너 관리 보안 제약 조건과 함께 웹 애플리케이션을 구성하는 서블릿 및 기타 구성 요소를 설명합니다.
- Tomcat에서 실행되는 각 애플리케이션에 해당하는 web.xml 파일이 있습니다.
- context.xml: 이 파일에는 컨텍스트 구성 요소 구성에 대한 정보가 들어 있습니다.
- tomcat-users.xml: 이 파일은 사용자 역할 및 권한을 구성하는 데 사용됩니다
Tomcat의 구조
Tomcat의 아키텍처는 각각 특정 역할을 수행하는 몇 가지 핵심 구성 요소로 구성됩니다.
- 서블릿 컨테이너
- 서블릿의 수명 주기를 관리하고 URL을 특정 서블릿에 매핑하고 URL 요청자가 올바른 액세스 권한을 갖도록 하는 Tomcat의 핵심입니다.
- 커넥터
- Tomcat의 커넥터 구성 요소는 들어오는 요청을 수신하고 처리를 위해 적절한 웹 애플리케이션으로 보냅니다.
- 또한 웹 애플리케이션에서 생성된 응답을 클라이언트로 다시 보냅니다.
- 커넥터는 HTTP, AJP(Apache JServ Protocol) 및 HTTPS와 같은 다양한 프로토콜로 작동합니다.
- 서비스
- Tomcat의 서비스는 요청 처리를 위해 단일 엔진 구성 요소를 공유하는 하나 이상의 커넥터 구성 요소 모음입니다.
- 서비스의 목적은 다양한 프로토콜에서 요청을 처리할 수 있도록 하는 것입니다.
- 엔진(Catalina)
- 엔진은 해당 서비스의 커넥터가 전달한 모든 요청을 처리합니다.
- 각 엔진에는 요청을 처리하기 위한 기본 호스트(웹 서버)가 있어야 합니다.
- 호스트
- 호스트는 서버의 네트워크 이름(예: www.example.com)과 서버의 네트워크 이름을 연결한 가상 호스트를 나타냅니다.
- Tomcat의 단일 인스턴스의 엔진은 여러 호스트를 포함할 수 있습니다.
- 컨텍스트
- 컨텍스트는 특정 가상 호스트 내에서 실행되는 웹 애플리케이션을 나타냅니다.
- 웹 애플리케이션이 존재하고 웹 애플리케이션의 모든 서블릿이 실행되는 컨텍스트입니다.
- 스레드 풀
- 동시 요청을 효율적으로 관리하기 위해 Tomcat은 스레드 풀을 활용합니다.
- 요청이 들어오면 요청을 처리하기 위해 풀의 스레드가 발송됩니다.
- 요청 처리가 끝나면 스레드가 풀로 반환됩니다.
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'DEV > Backend' 카테고리의 다른 글
Kurento Media Server Docker 설치하는 방법 (0) | 2023.05.15 |
---|---|
Kurento Media Server Local 설치하는 방법 (0) | 2023.05.15 |
AWS의 서버 종류 (0) | 2023.05.10 |
Ubuntu PostgreSQL 원격 접속시 발생하는 에러 해결 방법 (0) | 2023.05.09 |
직렬화 (serialization) - 🐥 카카오 테크 캠퍼스 (0) | 2023.05.03 |