2023. 6. 6. 22:14ㆍSpring Framework/Apache Tomcat Server
Apache Tomcat의 Service는 톰캣 서버의 핵심 구성 요소 중 하나로, 여러 Connector와 하나의 Engine을 결합하여 클라이언트 요청을 처리하는 역할을 합니다. Service는 요청이 들어오는 여러 포트 또는 프로토콜(예: HTTP, AJP 등)에서 클라이언트의 요청을 수신하고 이를 Engine으로 전달하여 처리한 후 응답을 반환합니다.
톰캣 Service 컴포넌트는 전체 서버 구조에서 중요한 위치를 차지하며, 이를 통해 여러 프로토콜을 지원하는 다양한 요청 처리 방식과 하나의 엔진을 통해 여러 웹 애플리케이션을 처리할 수 있게 합니다.
1. Service의 주요 역할
Service는 톰캣 서버 내에서 Connector와 Engine을 결합하여 클라이언트의 요청을 처리하는 기본 단위입니다. 톰캣에서 Service는 다음과 같은 역할을 수행합니다:
- Connector 관리: Service는 여러 Connector를 포함하여 각기 다른 프로토콜(HTTP, HTTPS, AJP 등)을 통해 클라이언트 요청을 수신할 수 있도록 합니다. 각 Connector는 특정 포트에서 요청을 수신하며, Service는 이를 Engine으로 전달합니다.
- Engine 결합: Service는 하나의 Engine을 통해 Connector로부터 수신된 요청을 처리하고, 처리된 응답을 다시 Connector를 통해 클라이언트에게 반환합니다.
- 다중 프로토콜 처리: 톰캣의 Service는 여러 Connector를 통해 다양한 프로토콜을 동시에 처리할 수 있습니다. 예를 들어, HTTP와 HTTPS를 동시에 처리하거나, AJP 프로토콜을 사용하여 외부 웹 서버와 연동할 수 있습니다.
2. Service의 구조
Service는 크게 두 가지 주요 구성 요소로 이루어져 있습니다: Connector와 Engine. Service는 이러한 두 요소를 결합하여 클라이언트 요청을 처리하고 응답을 생성합니다.
2.1 Connector
Connector는 클라이언트로부터의 HTTP, HTTPS, AJP와 같은 네트워크 요청을 수신하는 역할을 담당하는 컴포넌트입니다.
Connector는 Service 내에 포함되어 있으며, 각기 다른 포트와 프로토콜을 통해 클라이언트의 요청을 받아들이고, 그 요청을 Engine에 전달합니다.
Connector는 일반적으로 두 가지 형태로 제공됩니다:
- HTTP Connector: HTTP 및 HTTPS 프로토콜을 사용하여 클라이언트와 통신하며, 톰캣의 가장 기본적인 요청 처리 방식입니다.
- AJP Connector: Apache JServ Protocol (AJP)을 사용하여 Apache HTTP 서버와 같은 외부 웹 서버와의 연동을 위한 프로토콜입니다. AJP는 주로 외부 웹 서버가 정적 콘텐츠를 처리하고, 톰캣이 동적 콘텐츠(서블릿 및 JSP)를 처리할 때 사용됩니다.
예시로 HTTP와 AJP Connector는 다음과 같이 설정될 수 있습니다:
<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로 리다이렉션될 포트를 정의합니다.
2.2 Engine
- Engine은 Service 내에서 클라이언트 요청을 실제로 처리하는 서블릿 컨테이너입니다. Connector가 요청을 받으면, Engine은 이를 적절한 Host와 Context로 라우팅하여 처리합니다.
- Engine은 Service 내에 하나만 존재하며, 여러 Connector가 모두 이 하나의 Engine을 사용해 요청을 처리합니다.
- Engine은 클라이언트 요청을 처리할 때, 각기 다른 도메인(가상 호스트)에 대해 요청을 처리하는 Host를 포함할 수 있습니다.
3. Service의 동작 과정
Service는 클라이언트의 요청을 받아 처리하고 응답하는 과정에서 Connector와 Engine을 결합하여 동작합니다.
클라이언트 요청 수신: 클라이언트가 웹 애플리케이션에 요청을 보내면, 요청은 톰캣의 Connector를 통해 수신됩니다. 클라이언트는 HTTP, HTTPS, 또는 AJP 프로토콜을 통해 요청을 보낼 수 있으며, 각 프로토콜에 대응하는 Connector가 요청을 처리합니다.
Engine으로 요청 전달: Connector는 수신된 요청을 Service의 Engine에 전달합니다. Engine은 이 요청을 분석하여 적절한 Host와 Context(웹 애플리케이션)에 요청을 라우팅합니다.
요청 처리: Engine은 선택된 Host와 Context 내에서 서블릿이나 JSP 페이지를 실행하여 요청을 처리하고, 적절한 응답을 생성합니다.
응답 반환: 처리된 응답은 다시 Connector를 통해 클라이언트에게 반환됩니다. Connector는 이때 클라이언트와의 연결을 관리하고, 적절한 포맷으로 응답을 전송합니다.
4. 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을 설정할 수 있습니다. 이는 웹 애플리케이션의 보안을 담당합니다.
5. Service의 특징 요약
- Service는 톰캣 내에서 Connector와 Engine을 결합하여 클라이언트 요청을 처리하는 역할을 수행합니다.
- 여러 Connector를 통해 다양한 프로토콜(HTTP, HTTPS, AJP 등)을 지원하며, 하나의 Engine을 사용하여 모든 요청을 처리합니다.
- Engine은 요청을 적절한 웹 애플리케이션으로 라우팅하고, 서블릿 및 JSP를 실행하여 클라이언트에게 응답을 반환합니다.
- Service는
server.xml
파일을 통해 설정되며, 이를 통해 포트 및 프로토콜, 웹 애플리케이션 배포 경로 등을 정의할 수 있습니다.
톰캣의 Service는 유연하고 확장 가능한 방식으로 웹 애플리케이션을 처리할 수 있게 하며, 다양한 프로토콜과 포트를 지원하여 여러 클라이언트 요청을 동시에 처리할 수 있습니다.
'Spring Framework > Apache Tomcat Server' 카테고리의 다른 글
Apache Tomcat Server Arch (0) | 2023.06.23 |
---|---|
Tomcat 서버에서 정적 페이지를 처리하는 방법 (0) | 2023.06.13 |
Host (0) | 2023.06.06 |
Context (0) | 2023.06.04 |
Thread Pool (0) | 2023.05.25 |