12.5. Netty 런타임 구성

12.5.1. 개요

Netty 런타임은 분리된 끝점을 사용하여 HTTP 서비스 공급자 및 HTTP 소비자가 사용합니다. 런타임의 스레드 풀을 구성할 수 있으며 Netty 런타임을 통해 HTTP 서비스 공급자에 대한 여러 보안 설정을 설정할 수도 있습니다.

12.5.2. Maven 종속 항목

Apache Maven을 빌드 시스템으로 사용하는 경우 프로젝트의 pom.xml 파일에 다음 종속성을 포함하여 Netty 런타임(웹 서비스 엔드포인트 정의)의 서버 측 구현을 프로젝트에 추가할 수 있습니다.

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http-netty-server</artifactId>
    <version>${cxf-version}</version>
</dependency>

프로젝트의 pom.xml 파일에 다음 종속성을 포함하여 Netty 런타임(웹 서비스 클라이언트 정의)의 클라이언트 측 구현을 프로젝트에 추가할 수 있습니다.

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http-netty-client</artifactId>
    <version>${cxf-version}</version>
</dependency>

12.5.3. 네임스페이스

Netty 런타임을 구성하는 데 사용되는 요소는 네임스페이스 http://cxf.apache.org/transports/http-netty-server/configuration 에 정의되어 있습니다. 일반적으로 httpn 접두사를 사용합니다. Netty 구성 요소를 사용하려면 예 12.17. “Netty Runtime 구성 네임스페이스” 에 표시된 줄을 끝점 구성 파일의 빈 요소에 추가해야 합니다. 또한 구성 요소의 네임스페이스를 xsi:schemaLocation 속성에 추가해야 합니다.

예 12.17. Netty Runtime 구성 네임스페이스

<beans ...
       xmlns:httpn="http://cxf.apache.org/transports/http-netty-server/configuration"
       ...
       xsi:schemaLocation="...
               http://cxf.apache.org/transports/http-netty-server/configuration
            http://cxf.apache.org/schemas/configuration/http-netty-server.xsd
               ...">

12.5.4. engine-factory 요소

httpn:engine-factory 요소는 애플리케이션에서 사용하는 Netty 런타임을 구성하는 데 사용되는 루트 요소입니다. 구성되는 Netty 인스턴스를 관리하는 버스 의 이름이 값인 단일 필수 속성인 버스 가 있습니다.

참고

값은 일반적으로 기본 버스 인스턴스의 이름인 cxf 입니다.

httpn:engine-factory 요소에는 Netty 런타임 팩토리에서 인스턴스화한 HTTP 포트를 구성하는 데 사용되는 정보가 포함된 세 개의 자식이 있습니다. 어린이는 표 12.11. “Netty Runtime Factory 구성을 위한 요소” 에 설명되어 있습니다.

표 12.11. Netty Runtime Factory 구성을 위한 요소

요소설명

httpn:engine

특정 Netty 런타임 인스턴스에 대한 구성을 지정합니다. “엔진 요소” 을 참조하십시오.

httpn:identifiedTLSServerParameters

HTTP 서비스 공급자를 보호하기 위해 재사용 가능한 속성 세트를 지정합니다. 속성 집합을 참조할 수 있는 고유 식별자를 지정하는 단일 속성 id 가 있습니다.

httpn:identifiedThreadingParameters

Netty 인스턴스의 스레드 풀을 제어하기 위해 재사용 가능한 속성 세트를 지정합니다. 속성 집합을 참조할 수 있는 고유 식별자를 지정하는 단일 속성 id 가 있습니다.

“스레드 풀 구성” 을 참조하십시오.

12.5.5. 엔진 요소

httpn:engine 요소는 Netty 런타임의 특정 인스턴스를 구성하는 데 사용됩니다. 표 12.12. “Netty Runtime Instance 구성을 위한 속성” httpn:engine 요소에서 지원하는 특성을 보여줍니다.

표 12.12. Netty Runtime Instance 구성을 위한 속성

속성설명

port

Netty HTTP 서버 인스턴스에서 사용하는 포트를 지정합니다. port 특성에 값을 0 으로 지정할 수 있습니다. 포트 특성을 0 으로 설정하여 engine 요소에 지정된 모든 스레드 속성은 명시적으로 구성되지 않은 모든 Netty 리스너의 구성으로 사용됩니다.

host

Netty HTTP 서버 인스턴스에서 사용하는 수신 주소를 지정합니다. 값은 호스트 이름 또는 IP 주소일 수 있습니다. 지정되지 않은 경우 Netty HTTP 서버는 모든 로컬 주소에서 수신 대기합니다.

readIdleTime

Netty 연결의 최대 읽기 유휴 시간을 지정합니다. 기본 스트림에 읽기 작업이 있을 때마다 타이머가 재설정됩니다.

writeIdleTime

Netty 연결의 최대 쓰기 유휴 시간을 지정합니다. 기본 스트림에 쓰기 작업이 있을 때마다 타이머가 재설정됩니다.

maxChunkContentSize

Netty 연결에 대해 집계된 최대 콘텐츠 크기를 지정합니다. 기본값은 10MB입니다.

httpn:engine 요소에는 Netty 인스턴스의 스레드 풀을 구성하기 위한 하나의 하위 요소와 보안 속성을 구성하는 하위 요소가 있습니다. 각 유형의 구성에 대해 구성 정보를 직접 제공하거나 상위 httpn:engine-factory 요소에 정의된 구성 속성 집합에 대한 참조를 제공할 수 있습니다.

httpn:engine 의 지원되는 하위 요소는 표 12.13. “Netty Runtime Instance 구성을 위한 요소” 에 표시됩니다.

표 12.13. Netty Runtime Instance 구성을 위한 요소

요소설명

httpn:tlsServerParameters

특정 Netty 인스턴스에 사용되는 보안을 구성하기 위한 속성 세트를 지정합니다.

httpn:tlsServerParametersRef

identifiedTLSServerParameters 요소에 의해 정의된 보안 속성 집합을 나타냅니다. id 속성은 참조된 identifiedTLSServerParameters 요소의 id를 제공합니다.

httpn:threadingParameters

특정 Netty 인스턴스에서 사용하는 스레드 풀의 크기를 지정합니다. “스레드 풀 구성” 을 참조하십시오.

httpn:threadingParametersRef

확인된ThreadingParameters 요소에 의해 정의된 속성 집합을 나타냅니다. id 속성은 참조 된ThreadingParameters 요소의 id를 제공합니다.

httpn:sessionSupport

true 인 경우 HTTP 세션에 대한 지원을 활성화합니다. 기본값은 false 입니다.

httpn:reuseAddress

ReuseAddress TCP 소켓 옵션을 설정하는 부울 값을 지정합니다. 기본값은 false 입니다.

12.5.6. 스레드 풀 구성

다음 중 하나를 통해 Netty 인스턴스의 스레드 풀 크기를 구성할 수 있습니다.

  • engine-factory 요소에서 확인된ThreadingParameters 요소를 사용하여 스레드 풀의 크기를 지정합니다. 그런 다음 threadingParametersRef 요소를 사용하여 요소를 참조합니다.
  • threadingParameters 요소를 사용하여 스레드 풀의 크기를 직접 지정합니다.

threadingParameters 요소에는 표 12.14. “Netty Thread Pool 구성을 위한 속성” 에 설명된 대로 스레드 풀의 크기를 지정하는 하나의 속성이 있습니다.

참고

httpn:identifiedThreadingParameters 요소에는 단일 자 식 스레드 매개 변수 요소가 있습니다.

표 12.14. Netty Thread Pool 구성을 위한 속성

속성설명

threadPoolSize

요청을 처리하는 데 Netty 인스턴스에서 사용할 수 있는 스레드 수를 지정합니다.

12.5.7. 예제

예 12.18. “Netty 인스턴스 구성” 는 다양한 Netty 포트를 구성하는 구성 조각을 보여줍니다.

예 12.18. Netty 인스턴스 구성

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:beans="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:h="http://cxf.apache.org/transports/http/configuration"
       xmlns:httpn="http://cxf.apache.org/transports/http-netty-server/configuration"
       xmlns:sec="http://cxf.apache.org/configuration/security"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
        http://cxf.apache.org/configuration/security
            http://cxf.apache.org/schemas/configuration/security.xsd
        http://cxf.apache.org/transports/http/configuration
            http://cxf.apache.org/schemas/configuration/http-conf.xsd
        http://cxf.apache.org/transports/http-netty-server/configuration
            http://cxf.apache.org/schemas/configuration/http-netty-server.xsd"
>
    ...
    <httpn:engine-factory bus="cxf">
       <httpn:identifiedTLSServerParameters id="sample1">
         <httpn:tlsServerParameters jsseProvider="SUN" secureSocketProtocol="TLS">
            <sec:clientAuthentication want="false" required="false"/>
         </httpn:tlsServerParameters>
       </httpn:identifiedTLSServerParameters>

       <httpn:identifiedThreadingParameters id="sampleThreading1">
          <httpn:threadingParameters threadPoolSize="120"/>
       </httpn:identifiedThreadingParameters>

       <httpn:engine port="9000" readIdleTime="30000" writeIdleTime="90000">
          <httpn:threadingParametersRef id="sampleThreading1"/>
       </httpn:engine>

       <httpn:engine port="0">
          <httpn:threadingParameters threadPoolSize="400"/>
       </httpn:engine>

       <httpn:engine port="9001" readIdleTime="40000" maxChunkContentSize="10000">
         <httpn:threadingParameters threadPoolSize="99" />
         <httpn:sessionSupport>true</httpn:sessionSupport>
       </httpn:engine>

       <httpn:engine port="9002">
         <httpn:tlsServerParameters>
           <sec:clientAuthentication want="true" required="true"/>
         </httpn:tlsServerParameters>
       </httpn:engine>

       <httpn:engine port="9003">
          <httpn:tlsServerParametersRef id="sample1"/>
       </httpn:engine>

    </httpn:engine-factory>
</beans>