https://sundaland.tistory.com/146
[ ▶ Service ]
Apache Tomcat의 Service는 톰캣 서버의 핵심 구성 요소 중 하나로, 여러 Connector와 하나의 Engine을 결합하여 클라이언트 요청을 처리하는 역할을 한다. Service는 요청이 들어오는 여러 포트 또는 프로토콜(예: HTTP, AJP 등)에서 클라이언트의 요청을 수신하고 이를 Engine으로 전달하여 처리한 후 응답을 반환한다.
톰캣 Service 컴포넌트는 전체 서버 구조에서 중요한 위치를 차지하며, 이를 통해 여러 프로토콜을 지원하는 다양한 요청 처리 방식과 하나의 엔진을 통해 여러 웹 애플리케이션을 처리할 수 있게 한다.
[ ▷ Service의 주요 역할 ]
Service는 톰캣 서버 내에서 Connector와 Engine을 결합하여 클라이언트의 요청을 처리하는 기본 단위이다.
- Connector 관리: Service는 여러 Connector를 포함하여 각기 다른 프로토콜(HTTP, HTTPS, AJP 등)을 통해 클라이언트 요청을 수신할 수 있도록 한다. 각 Connector는 특정 포트에서 요청을 수신하며, Service는 이를 Engine으로 전달한다.
- Engine 결합: Service는 하나의 Engine을 통해 Connector로부터 수신된 요청을 처리하고, 처리된 응답을 다시 Connector를 통해 클라이언트에게 반환한다.
- 다중 프로토콜 처리: 톰캣의 Service는 여러 Connector를 통해 다양한 프로토콜을 동시에 처리할 수 있다. 예를 들어, HTTP와 HTTPS를 동시에 처리하거나, AJP 프로토콜을 사용하여 외부 웹 서버와 연동할 수 있다.
[ ▷ Service의 구조 ]
Service는 크게 두 가지 주요 구성 요소로 이루어져 있습니다: Connector와 Engine. Service는 이러한 두 요소를 결합하여 클라이언트 요청을 처리하고 응답을 생성한다.
△ Connector
- Connector는 클라이언트로부터의 HTTP, HTTPS, AJP와 같은 네트워크 요청을 수신하는 역할을 담당하는 컴포넌트이다.
- Connector는 Service 내에 포함되어 있으며, 각기 다른 포트와 프로토콜을 통해 클라이언트의 요청을 받아들이고, 그 요청을 Engine에 전달한다.
- HTTP Connector: HTTP 및 HTTPS 프로토콜을 사용하여 클라이언트와 통신하며, 톰캣의 가장 기본적인 요청 처리 방식이다.
- AJP Connector: Apache JServ Protocol (AJP)을 사용하여 Apache HTTP 서버와 같은 외부 웹 서버와의 연동을 위한 프로토콜이다. AJP는 주로 외부 웹 서버가 정적 콘텐츠를 처리하고, 톰캣이 동적 콘텐츠(서블릿 및 JSP)를 처리할 때 사용된다.
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
- port: 요청을 수신할 포트를 정의한다. HTTP Connector의 경우 기본값은 8080이며, AJP Connector의 경우 8009이다.
- protocol: 클라이언트 요청을 처리할 프로토콜을 정의합니다. HTTP, HTTPS, AJP 프로토콜을 지원한다.
- connectionTimeout: 클라이언트가 요청을 처리하는 데 걸리는 시간 초과(밀리초)를 정의한다.
- redirectPort: HTTP로 들어오는 요청이 보안이 필요한 경우, HTTPS로 리다이렉션될 포트를 정의한다.
△ Engine
- Engine은 Service 내에서 클라이언트 요청을 실제로 처리하는 서블릿 컨테이너이다. Connector가 요청을 받으면, Engine은 이를 적절한 Host와 Context로 라우팅하여 처리한다.
- Engine은 Service 내에 하나만 존재하며, 여러 Connector가 모두 이 하나의 Engine을 사용해 요청을 처리한다.
- Engine은 클라이언트 요청을 처리할 때, 각기 다른 도메인(가상 호스트)에 대해 요청을 처리하는 Host를 포함할 수 있다.
△ Service의 동작 과정
Service는 클라이언트의 요청을 받아 처리하고 응답하는 과정에서 Connector와 Engine을 결합하여 동작한다.
- 클라이언트 요청 수신: 클라이언트가 웹 애플리케이션에 요청을 보내면, 요청은 톰캣의 Connector를 통해 수신된다. 클라이언트는 HTTP, HTTPS, 또는 AJP 프로토콜을 통해 요청을 보낼 수 있으며, 각 프로토콜에 대응하는 Connector가 요청을 처리한다.
- Engine으로 요청 전달: Connector는 수신된 요청을 Service의 Engine에 전달합니다. Engine은 이 요청을 분석하여 적절한 Host와 Context(웹 애플리케이션)에 요청을 라우팅한다.
- 요청 처리: Engine은 선택된 Host와 Context 내에서 서블릿이나 JSP 페이지를 실행하여 요청을 처리하고, 적절한 응답을 생성한다.
- 응답 반환: 처리된 응답은 다시 Connector를 통해 클라이언트에게 반환된다. Connector는 이때 클라이언트와의 연결을 관리하고, 적절한 포맷으로 응답을 전송한다.
△ Service의 설정
톰캣에서 Service는 server.xml 파일에서 설정된다. 각 Service는 이름과 함께 여러 Connector와 하나의 Engine을 정의할 수 있다.
▼ 톰캣 Service 설정의 예시
<Service name="Catalina">
<!-- HTTP Connector -->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- AJP Connector -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<!-- Engine -->
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
</Host>
</Engine>
</Service>
- name: Service의 이름을 정의한다. 톰캣의 기본값은 Catalina이다.
- Connector: 여러 Connector를 정의하여 클라이언트의 요청을 처리할 수 있다. 위 예시에서는 HTTP와 AJP 프로토콜을 처리하는 두 개의 Connector가 설정되어 있다.
- Engine: 하나의 Engine이 설정되어 있으며, defaultHost 속성은 기본적으로 처리할 가상 호스트를 지정한다.
- Realm: 인증 및 권한 부여를 처리하는 Realm을 설정할 수 있다. 이는 웹 애플리케이션의 보안을 담당한다.
△ Service의 특징 요약
- Service는 톰캣 내에서 Connector와 Engine을 결합하여 클라이언트 요청을 처리하는 역할을 수행한다.
- 여러 Connector를 통해 다양한 프로토콜(HTTP, HTTPS, AJP 등)을 지원하며, 하나의 Engine을 사용하여 모든 요청을 처리한다.
- Engine은 요청을 적절한 웹 애플리케이션으로 라우팅하고, 서블릿 및 JSP를 실행하여 클라이언트에게 응답을 반환한다.
- Service는 server.xml 파일을 통해 설정되며, 이를 통해 포트 및 프로토콜, 웹 애플리케이션 배포 경로 등을 정의할 수 있다.
※ 톰캣의 서비스는 유연하고 확장 가능한 방식으로 웹 애플리케이션을 처리할 수 있게 하며, 다양한 프로토콜과 포트를 지원하여 여러 클라이언트 요청을 동시에 처리할 수 있다.
'Apache Tomcat' 카테고리의 다른 글
Context (0) | 2024.10.07 |
---|---|
Host (0) | 2024.10.07 |
Engine (0) | 2024.10.07 |
Valve (0) | 2024.10.07 |
Apache Tomcat Server Arch (0) | 2024.10.07 |