Service

2023. 6. 6. 22:14Spring Framework/Apache Tomcat Server

Apache Tomcat의 Service는 톰캣 서버의 핵심 구성 요소 중 하나로, 여러 Connector와 하나의 Engine을 결합하여 클라이언트 요청을 처리하는 역할을 합니다. Service는 요청이 들어오는 여러 포트 또는 프로토콜(예: HTTP, AJP 등)에서 클라이언트의 요청을 수신하고 이를 Engine으로 전달하여 처리한 후 응답을 반환합니다.

톰캣 Service 컴포넌트는 전체 서버 구조에서 중요한 위치를 차지하며, 이를 통해 여러 프로토콜을 지원하는 다양한 요청 처리 방식과 하나의 엔진을 통해 여러 웹 애플리케이션을 처리할 수 있게 합니다.

1. Service의 주요 역할

Service는 톰캣 서버 내에서 ConnectorEngine을 결합하여 클라이언트의 요청을 처리하는 기본 단위입니다. 톰캣에서 Service는 다음과 같은 역할을 수행합니다:

  • Connector 관리: Service는 여러 Connector를 포함하여 각기 다른 프로토콜(HTTP, HTTPS, AJP 등)을 통해 클라이언트 요청을 수신할 수 있도록 합니다. 각 Connector는 특정 포트에서 요청을 수신하며, Service는 이를 Engine으로 전달합니다.
  • Engine 결합: Service는 하나의 Engine을 통해 Connector로부터 수신된 요청을 처리하고, 처리된 응답을 다시 Connector를 통해 클라이언트에게 반환합니다.
  • 다중 프로토콜 처리: 톰캣의 Service는 여러 Connector를 통해 다양한 프로토콜을 동시에 처리할 수 있습니다. 예를 들어, HTTP와 HTTPS를 동시에 처리하거나, AJP 프로토콜을 사용하여 외부 웹 서버와 연동할 수 있습니다.

2. Service의 구조

Service는 크게 두 가지 주요 구성 요소로 이루어져 있습니다: ConnectorEngine. Service는 이러한 두 요소를 결합하여 클라이언트 요청을 처리하고 응답을 생성합니다.

2.1 Connector

  • Connector는 클라이언트로부터의 HTTP, HTTPS, AJP와 같은 네트워크 요청을 수신하는 역할을 담당하는 컴포넌트입니다.

  • ConnectorService 내에 포함되어 있으며, 각기 다른 포트와 프로토콜을 통해 클라이언트의 요청을 받아들이고, 그 요청을 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

  • EngineService 내에서 클라이언트 요청을 실제로 처리하는 서블릿 컨테이너입니다. Connector가 요청을 받으면, Engine은 이를 적절한 HostContext로 라우팅하여 처리합니다.
  • EngineService 내에 하나만 존재하며, 여러 Connector가 모두 이 하나의 Engine을 사용해 요청을 처리합니다.
  • Engine은 클라이언트 요청을 처리할 때, 각기 다른 도메인(가상 호스트)에 대해 요청을 처리하는 Host를 포함할 수 있습니다.

3. Service의 동작 과정

Service는 클라이언트의 요청을 받아 처리하고 응답하는 과정에서 ConnectorEngine을 결합하여 동작합니다.

  1. 클라이언트 요청 수신: 클라이언트가 웹 애플리케이션에 요청을 보내면, 요청은 톰캣의 Connector를 통해 수신됩니다. 클라이언트는 HTTP, HTTPS, 또는 AJP 프로토콜을 통해 요청을 보낼 수 있으며, 각 프로토콜에 대응하는 Connector가 요청을 처리합니다.

  2. Engine으로 요청 전달: Connector는 수신된 요청을 ServiceEngine에 전달합니다. Engine은 이 요청을 분석하여 적절한 HostContext(웹 애플리케이션)에 요청을 라우팅합니다.

  3. 요청 처리: Engine은 선택된 HostContext 내에서 서블릿이나 JSP 페이지를 실행하여 요청을 처리하고, 적절한 응답을 생성합니다.

  4. 응답 반환: 처리된 응답은 다시 Connector를 통해 클라이언트에게 반환됩니다. Connector는 이때 클라이언트와의 연결을 관리하고, 적절한 포맷으로 응답을 전송합니다.

4. Service의 설정

톰캣에서 Serviceserver.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는 톰캣 내에서 ConnectorEngine을 결합하여 클라이언트 요청을 처리하는 역할을 수행합니다.
  • 여러 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