NODE 절

NODE 절은 WebtoB 노드에 대한 구체적인 환경에 대해 설정합니다. NODE 절은 노드의 전체적인 동작과 관련된 설정을 정의합니다.

NODE 절에는 'WebtoB 시스템 경로', '기타 시스템의 전체적인 설정’들이 정의될 수 있습니다.

설정 항목

다음은 NODE 절의 환경 설정 형식입니다.

"node": {
    "name": string
    "hth_count": integer,                        # 1 (1-255)
    #"worker_threads": integer,                  # 8 (1-100)
    #"hth_schedule": string,                     # "RR"
    #"connection_pool_size": integer,            # 8192 (1-INT_MAX)
    #"graceful_shutdown_timeout": integer        # 30 (1-INT_MAX)
    #"cache_key": string,                        # "HOST_URI"
    #"cache_entry": integer                      # 128 (0-INT_MAX)
    #"max_cache_memory_size": integer            # 100 (0-INT_MAX)
    #"cache_max_file_size": integer              # 8192 (0-INT_MAX)
    #"listen_backlog": integer                   # 4096 (0-INT_MAX)
    #"limit_request_body_size": integer          # 0 (0-INT_MAX)
    #"limit_request_header_field_count": integer # 100 (0-INT_MAX)
    #"limit_request_header_field_size": integer  # 8190 (0-INT_MAX)
    #"limit_request_line_size": integer          # 8190 (0-INT_MAX)
    #"system_filters": [string]
}

절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 값의 형식 및 설정 방법을 참고합니다.

name (필수 항목)

노드의 이름을 설정합니다.

구분 설명

자료형

string

범위

127자 이내

다음은 name 설정 예시입니다. 프롬프트에 'user@webtob_node:~$'로 표시되는 경우 아래와 같이 name을 설정합니다.

"node": {
    "name": "webtob_node",
    ...
}

노드 이름은 호스트 이름과 같아야 합니다. 만약 호스트 이름과 다를 경우 실행할 수 없습니다.

hth_count

요청을 처리하는 HTH의 수를 설정합니다.

구분 설명

자료형

integer

범위

1 ~ 100

기본값

1

다음은 hth_count 설정 예시입니다. 아래와 같이 hth_count를 3으로 설정하면 'HTH-0', 'HTH-1', 'HTH-2’가 생성됩니다.

"node": {
    "name": "webtob_node",
    "hth_count": 3,
    ...
}

로그(webtob.log)를 통해 생성된 HTH를 확인할 수 있습니다.

EventManager(HTH-2) Thread Created. Thread ID: 4800

worker_threads

HTH에 할당할 작업 스레드의 수를 설정합니다. 작업 스레드는 정적 파일 처리, SSL/TLS 처리(Handshake, 암호화, 복호화), 압축 처리, HTTP 인증 처리를 하는 스레드입니다.

구분 설명

자료형

integer

범위

1 ~ 100

기본값

8

다음은 worker_threads 설정 예시입니다. 아래와 같이 worker_threads를 5로 설정하면 'HTMLS-0', 'HTMLS-1', 'HTMLS-2', 'HTMLS-3', 'HTMLS-4’가 생성됩니다.

"node": {
    "name": "webtob_node",
    "hth_count": 3,
    "worker_threads":5,
    ...
}

로그(webtob.log)를 통해 생성된 작업 스레드를 확인할 수 있습니다.

EventManager(HTMLS-4) Thread Created. Thread ID: 19271

hth_count × worker_threads의 수만큼 FD가 사용되기 때문에 hth_count와 worker_threads를 설정할 때 FD를 고려해야 합니다. 만약 설정된 값이 FD의 수를 초과하면 아래와 같은 에러 로그가 발생하며 서버가 종료됩니다.

Error: eventFd() failed: Too many open files
Too many open files

hth_schedule

HTH를 여러 개 설정했을 경우 요청을 처리할 HTH 지정 방법을 설정합니다.

구분 설명

자료형

string

범위

"RR"

기본값

"RR"

다음은 설정값에 대한 설명입니다.

설정값 설명

RR

Round Robin 방식으로 순차적으로 HTH에 요청을 할당합니다.

다음은 hth_schedule 설정 예시입니다.

"node": {
    "name": "webtob_node",
    "hth_count": 2,
    "worker_threads":8,
    "hth_schedule": "RR",
    ...
}

로그(webtob.log)를 통해 hth_count에 설정된 수만큼 순차적으로 요청이 할당되는 것을 확인할 수 있습니다.

[2024-07-25 06:49:19.113263413][DEBUG][HTH-0][SVR_3455]WJP2RequestMessageHandler.cpp:87 serviceMessage: WJP Request Loop Done.
[2024-07-25 06:49:19.113268083][DEBUG][HTH-0][NET_2004]EventManager.cpp:129 loop: End of this loop.
[2024-07-25 06:49:19.425343033][DEBUG][HTH-1][NET_4000]EpollMultiplexer.cpp:33 select: Multiplexer awakened. Event Count=0.
[2024-07-25 06:49:19.425360647][DEBUG][HTH-1][NET_2004]EventManager.cpp:129 loop: End of this loop.
[2024-07-25 06:49:20.114399067][DEBUG][HTH-0][NET_4000]EpollMultiplexer.cpp:33 select: Multiplexer awakened. Event Count=0.
[2024-07-25 06:49:20.114416261][DEBUG][HTH-0][NET_2004]EventManager.cpp:129 loop: End of this loop.
[2024-07-25 06:49:20.426438758][DEBUG][HTH-1][NET_4000]EpollMultiplexer.cpp:33 select: Multiplexer awakened. Event Count=0.
[2024-07-25 06:49:20.426456148][DEBUG][HTH-1][NET_2004]EventManager.cpp:129 loop: End of this loop.

connection_pool_size

HTH마다 커넥션을 관리하는 풀(Pool)의 크기를 설정합니다.

구분 설명

자료형

integer

범위

1 ~ INT_MAX

기본값

8192

hth_count, worker_threads와 마찬가지로 FD 수의 영향을 받기 때문에 설정 시 FD 수를 고려해야 합니다. 만약 설정된 값이 FD 수를 초과하면 아래와 같은 에러 로그가 발생하며 서버가 종료됩니다.

Error: eventFd() failed: Too many open files
Too many open files

graceful_shutdown_timeout

Graceful shutdown 명령 후 강제로 종료할 때까지 대기하는 타임아웃을 설정합니다.

구분 설명

자료형

integer

단위

범위

1 ~ INT_MAX

다음은 graceful_shutdown_timeout 설정 예시입니다.

{
  "node": {
    "name": "webtob_node",
    "hth_count": 1,
    "worker_threads":8,
    "graceful_shutdown_timeout":5
  },
  ...

cache_key

캐시된 데이터를 식별하기 위해 사용하는 키의 형식을 설정합니다.

구분 설명

자료형

string

범위

"HOST_URI" | "REAL_PATH"

기본값

"HOST_URI"

다음은 설정값에 대한 설명입니다.

설정값 설명

HOST_URI

요청 헤더의 HOST 값과 요청 URI를 사용하여 Key를 생성합니다.

동일한 REQUEST_URI라 하더라도 HTTP_HOST에 따라 VHOST가 달라질 수 있으며, 이는 실제 경로가 달라질 수 있음을 의미합니다. 그러나 VHOST가 다르더라도 실제 경로가 같다면 중복으로 캐싱되는 문제가 발생할 수 있습니다.

이 방식은 실제 경로를 계산하지 않으므로 REAL_PATH 방식보다 응답 속도가 빠릅니다. 따라서 VHOST별 DocRoot가 다르다면 HOST_URI 값을 사용하는 것이 좋습니다.

JEUS에서 처리되거나 역방향 프록시로 처리되는 응답은 실제 경로를 계산할 수 없으므로 이 값을 사용합니다.

REAL_PATH

요청 URI의 실제 경로를 사용하여 Key를 생성합니다. 이 값은 SVRTYPE이 HTML인 경우에만 적용되고, HOST_URI를 사용할 때 발생할 수 있는 문제점을 보완합니다.

HTTP_HOST가 다르더라도 동일한 요청 파일의 실제 경로가 같을 수 있다. 이 경우 HTTP_HOST에 상관없이 하나의 파일만 캐싱되므로 메모리 사용을 줄일 수 있습니다. 그러나 실제 경로를 계산해야 하기 때문에 HOST_URI를 사용하는 것보다 응답 속도가 다소 느릴 수 있습니다.

다음은 cache_key 설정 예시입니다. 이때 캐시를 저장하려면 destination 절에서 "enable_cache"를 true로 설정해야 합니다.

  "node": {
    "name": "webtob_node",
    "hth_count": 1,
    "worker_threads":8,
    "cache_key":"HOST_URI",
    "cache_entry":128,
    "max_cache_memory_size":100,
    "cache_max_file_size":8192
    ...
    "destination": {
      "htmls": [
      {
        "name": "htmls1",
        "enable_cache":true
      }
    ...

캐시 현황은 wsadmin의 cache-list에서 확인할 수 있습니다. 이때 cache_key 설정값이 "HOST_URI"인 경우 192.168.0.1:80/image.jpg, "REAL_PATH"인 경우 /home/tmax/webtob6/docs/image.jpg로 표시됩니다.

[wsadmin]>> cache-list
------------------------------------------------------------------
| HTH-0: Cache List Info                                         |
------------------------------------------------------------------
|          Cache key          |    Expired time     | Cache size |
------------------------------------------------------------------
| 192.168.0.1:80/image.jpg | 2024-01-01 00:00:00 |         300|
------------------------------------------------------------------
| Cache count : 1                                                |
| Memory usages : 300                                            |
------------------------------------------------------------------

cache_entry

HTH 캐시의 해시 테이블 Key의 크기를 설정합니다.

구분 설명

자료형

integer

범위

0 ~ INT_MAX

기본값

128

다음은 설정값에 대한 설명입니다.

설정값 설명

0

응답을 캐시하지 않습니다.

다음은 cache_entry 설정 예시입니다. 이때 캐시를 저장하려면 destination 절에서 "enable_cache"를 true로 설정해야 합니다.

  "node": {
    "name": "webtob_node",
    "hth_count": 1,
    "worker_threads":8,
    "cache_key":"HOST_URI",
    "cache_entry":128,
    "max_cache_memory_size":100,
    "cache_max_file_size":8192
    ...
    "destination": {
      "htmls": [
      {
        "name": "htmls1",
        "enable_cache":true
      }
    ...

캐시 현황은 wsadmin의 cache-list에서 확인할 수 있습니다. 이때 cache_entry 설정값이 2인 경우 최대 2개의 행이 표시됩니다.

[wsadmin]>> cache-list
----------------------------------------------------------------------------------
| HTH-0: Cache List Info                                                         |
----------------------------------------------------------------------------------
|                  Cache key                  |    Expired time     | Cache size |
----------------------------------------------------------------------------------
| 192.168.0.1:80/image.jpg | 2024-01-01 00:00:24 |         345|
| 192.168.0.1:80/image1.jpg  | 2024-01-01 00:00:21 |         345|
----------------------------------------------------------------------------------
| Cache count : 2                                                                |
| Memory usages : 1035                                                           |
----------------------------------------------------------------------------------

max_cache_memory_size

HTH 프로세스가 캐시를 위해 사용하는 최대 메모리 사이즈를 설정합니다.

HTH별로 각각 캐시하기 때문에 해당 설정은 HTH 프로세스별로 각각 적용되는 값입니다. (모든 HTH 캐시가 사용하는 총 메모리 사이즈가 아님)

구분 설명

자료형

integer

단위

Mbytes

범위

0 ~ INT_MAX

기본값

100

다음은 설정값에 대한 설명입니다.

설정값 설명

0

응답을 캐시하지 않습니다.

다음은 max_cache_memory_size 설정 예시입니다. 이때 캐시를 저장하려면 destination 절에서 "enable_cache"를 true로 설정해야 합니다.

  "node": {
    "name": "webtob_node",
    "hth_count": 1,
    "worker_threads":8,
    "cache_key":"HOST_URI",
    "cache_entry":128,
    "max_cache_memory_size":100,
    "cache_max_file_size":8192
    ...
    "destination": {
      "htmls": [
      {
        "name": "htmls1",
        "enable_cache":true
      }
    ...

캐시 현황은 wsadmin의 cache-list에서 확인할 수 있습니다. 이때 max_cache_memory_size 설정값이 100인 경우 cache로 저장된 이미지 크기는 100MB를 넘을 수 없습니다.

[wsadmin]>> cache-list
----------------------------------------------------------------------------------
| HTH-0: Cache List Info                                                         |
----------------------------------------------------------------------------------
|                  Cache key                  |    Expired time     | Cache size |
----------------------------------------------------------------------------------
| 192.168.0.1:80/image.jpg | 2024-01-01 00:00:24 |         345|
| 192.168.0.1:80/image1.jpg  | 2024-01-01 00:00:21 |         345|
----------------------------------------------------------------------------------
| Cache count : 2                                                                |
| Memory usages : 1035                                                           |
----------------------------------------------------------------------------------

cache_max_file_size

캐시할 수 있는 응답(헤더+본문) 하나의 최대 사이즈를 설정합니다.

구분 설명

자료형

integer

단위

bytes

범위

0 ~ INT_MAX

기본값

8192

다음은 설정값에 대한 설명입니다.

설정값 설명

0

응답을 캐시하지 않습니다.

다음은 cache_max_file_size 설정 예시입니다. 이때 캐시를 저장하려면 destination 절에서 "enable_cache"를 true로 설정해야 합니다.

  "node": {
    "name": "webtob_node",
    "hth_count": 1,
    "worker_threads":8,
    "cache_key":"HOST_URI",
    "cache_entry":128,
    "max_cache_memory_size":100,
    "cache_max_file_size":8192
    ...
    "destination": {
      "htmls": [
      {
        "name": "htmls1",
        "enable_cache":true
      }
    ...

캐시 현황은 wsadmin의 cache-list에서 확인할 수 있습니다. 이때 cache_max_file_size 설정값이 8192인 경우 8192byte를 초과하는 이미지는 캐시되지 않습니다.

[wsadmin]>> cache-list
----------------------------------------------------------------------------------
| HTH-0: Cache List Info                                                         |
----------------------------------------------------------------------------------
|                  Cache key                  |    Expired time     | Cache size |
----------------------------------------------------------------------------------
| 192.168.0.1:80/image.jpg | 2024-01-01 00:00:24 |         345|
| 192.168.0.1:80/image1.jpg  | 2024-01-01 00:00:21 |         345|
----------------------------------------------------------------------------------
| Cache count : 2                                                                |
| Memory usages : 1035                                                           |
----------------------------------------------------------------------------------

listen_backlog

서비스 포트 연결 큐(listen backlog)의 크기를 설정합니다. 즉, 서비스 포트에서 동시에 처리할 수 있는 연결 시도 중인 소켓의 수를 제한하는 설정입니다.

구분 설명

자료형

integer

범위

1 ~ INT_MAX

기본값

4096

netstat 명령에서 SYN_RECVD 상태인 소켓의 수와 관련이 있을 수 있습니다.

다음은 listen_backlog 설정 예시입니다.

  "node": {
    "name": "webtob_node",
    "hth_count": 1,
    "worker_threads":8,
    "listen_backlog":50
    ...

ss 명령어를 통해 변경된 Send-Q를 확인할 수 있습니다.

listen_backlog 설정값을 511 이상으로 설정할 경우 Send-Q 값은 511 이상으로 올라가지 않는데, 이는 "sysctl -w net.core.somaxconn=[설정값]"을 통해 시스템 값을 변경할 수 있습니다.

user@webtob_node:~/tmax/webtob6/$ ss -lnt | grep 80
State  Recv-Q    Send-Q             Local Address:Port    Peer Address:Port
LISTEN   0         50                  0.0.0.0:80           0.0.0.0:*

limit_request_body_size

사용자 요청에서 HTTP 요청 본문 크기를 제한할 경우 설정합니다.

HTTP 요청 본문이 2G(Long 타입) 이상인 경우는 JEUS 7 이후 버전부터 처리 가능합니다.

이 값은 HTTP 요청 헤더의 "Content-Length" 값을 기준으로 판단하며, Chunked-request의 경우 허용할 본문의 최대 크기를 설정합니다. 만약 설정된 값보다 큰 요청 본문이 들어올 경우 서버는 "413 Request Entity Too Large"로 응답합니다.

구분 설명

자료형

integer

단위

bytes

범위

0 ~ INT_MAX

기본값

0

다음은 설정값에 대한 설명입니다.

설정값 설명

0

요청 본문 크기를 제한하지 않습니다.

다음은 limit_request_body_size 설정 예시입니다.

  "node": {
    "name": "webtob_node",
    "hth_count": 1,
    "worker_threads":8,
    "limit_request_body_size":100
    ...

limit_request_body_size를 100으로 설정했을 때, Content-Length가 100을 넘으면 아래와 같은 메시지가 출력됩니다.

* Closing connection 0
The body is too large.

limit_request_header_field_count

사용자 요청에서 HTTP 요청 헤더 필드 수를 제한할 경우 설정합니다.

구분 설명

자료형

integer

범위

0 ~ INT_MAX

기본값

100

다음은 설정값에 대한 설명입니다.

설정값 설명

0

헤더 필드의 수를 제한하지 않습니다.

다음은 limit_request_header_field_count 설정 예시입니다.

  "node": {
    "name": "webtob_node",
    "hth_count": 1,
    "worker_threads":8,
    "limit_request_header_field_count":1
    ...

limit_request_header_field_count를 1로 설정했을 때, 헤더 필드 수가 1을 넘으면 아래와 같은 메시지가 출력됩니다.

* Closing connection 0
The number of request header fields exceeds the server limit.

limit_request_header_field_size

사용자 요청에서 HTTP 요청 헤더 필드 각각의 크기를 제한할 경우 설정합니다.

구분 설명

자료형

integer

단위

bytes

범위

0 ~ 16382

기본값

8190

다음은 설정값에 대한 설명입니다.

설정값 설명

0

헤더 필드의 크기를 제한하지 않습니다.

10,000bytes를 초과하는 요청 헤더를 사용하려면 "WJPv2"를 이용해야 합니다.

다음은 limit_request_header_field_size 설정 예시입니다.

  "node": {
    "name": "webtob_node",
    "hth_count": 1,
    "worker_threads":8,
    "limit_request_header_field_size":100
    ...

limit_request_header_field_size를 100으로 설정했을 때, 헤더 필드 각각의 크기가 100을 넘으면 아래와 같은 메시지가 출력됩니다.

* Closing connection 0
The size of a request header field exceeds the server limit.

limit_request_line_size

사용자 요청에서 HTTP 요청 라인 크기를 제한할 경우 설정합니다.

구분 설명

자료형

integer

단위

bytes

범위

0 ~ 16382

기본값

8190

다음은 설정값에 대한 설명입니다.

설정값 설명

0

요청 라인의 길이를 제한하지 않습니다.

10,000bytes를 초과하는 요청 라인을 사용하려면 "WJPv2"를 이용해야 합니다.

다음은 limit_request_line_size 설정 예시입니다.

  "node": {
    "name": "webtob_node",
    "hth_count": 1,
    "worker_threads":8,
    "limit_request_line_size":100
    ...

limit_request_line_size를 100으로 설정했을 때, 요청 라인의 길이가 100을 넘으면 아래와 같은 메시지가 출력됩니다.

* Closing connection 0
Request Uri too Wrong

system_filters

시스템 이벤트(ON_START, ON_STOP) 발생 시 적용할 필터를 설정합니다.

구분 설명

자료형

array(string)

범위

15개 이내(255자 이내)

설정 예시

다음은 NODE 절을 설정한 예시입니다.

"node": {
    "name": "webtob_node",
    "hth_count": 1,
    "worker_threads": 8,
    "hth_schedule": "RR",
    "connection_pool_size": 8192,
    "graceful_shutdown_timeout": 30,
    "listen_backlog": 4096,
    "cache_key": "HOST_URI",
    "cache_entry": 128,
    "max_cache_memory_size": 100,
    "cache_max_file_size": 8192,
    "limit_request_body_size": 0,
    "limit_request_header_field_count": 100,
    "limit_request_header_field_size": 8190,
    "limit_request_line_size": 8190,
    "system_filters" : [ filter1 ]
}