WebtoB 프로세스 구조
WebtoB는 안정적인 서비스를 위해 프로세스가 비정상적으로 종료되면 자동으로 재기동합니다. 이때 기본적으로 Manager 프로세스와 Engine 프로세스를 함께 기동합니다.
Manager 프로세스
Manager 프로세스는 HTTP 요청을 처리하는 웹 서버 프로세스(Engine)를 관리하는 역할을 합니다. Engine 프로세스를 모니터링하다가 비정상 종료될 경우 자동으로 재기동하며, 이미 기동 중인 Engine이 있을 때는 해당 Engine을 관리합니다.
Manager는 하나만 기동할 수 있습니다. WebtoB의 기본 기동 방식은 Manager와 Engine을 함께 기동하지만, 필요 시 다음 명령으로 Manager만 단독 기동할 수 있습니다.
> webtob -a start-manager
또한 Rest API를 통해 Admin API를 제공합니다. Manager 포트는 NODE 절에서 설정하며 주요 API는 다음과 같습니다.
| API 이름 | 설명 |
|---|---|
환경 설정 내용을 조회합니다. |
|
WebtoB Manager를 종료합니다. |
환경 설정 조회 (/config)
현재 동작 중인 시스템의 환경 정보를 조회합니다. 이 과정에서는 환경 설정 파일에서 지정한 값뿐만 아니라 기본적으로 적용되는 값까지 확인할 수 있습니다.
-
사용법
{ "path": string }옵션 설명 path
환경 설정 파일의 JSON 경로를 지정합니다. 이때 경로는 항상 /로 시작해야 합니다.
경로를 생략하거나 /로 설정하면 현재 설정된 모든 환경 설정을 가져옵니다. -
예시
다음은 NODE 절 환경 설정을 "/config" Admin API로 확인한 예시입니다. NODE 절의 설정 항목에 대한 자세한 설명은 NODE 절 설정 항목을 참고합니다.
[Request] { "path": "/node" } [Response] { "result": { "cache_entry": 128, "cache_key": "HOST_URI", "cache_max_file_size": 8192, "connection_pool_size": 8192, "graceful_shutdown_timeout": 5, "hth_count": 1, "hth_schedule": "RR", "limit_request_body_size": 0, "limit_request_header_field_count": 100, "limit_request_header_field_size": 8190, "limit_request_line_size": 8190, "listen_backlog": 4096, "max_cache_memory_size": 100, "name": "webtob-server", "system_filters": [], "worker_threads": 1 } }
WebtoB Manager 종료 (/shutdownmanager)
동작 중인 WebtoB Manager를 종료합니다.
-
사용법
{ "timeout": integer }옵션 설명 timeout
graceful shutdown 과정의 타임아웃을 초 단위로 지정합니다. 지정된 시간이 지나도 WebtoB Manager가 종료되지 않으면 강제 종료됩니다.
생략 시 /node/graceful_shutdown_timeout에 설정된 값이 적용됩니다. -
예시
다음은 30초 동안 graceful shutdown을 시도한 후 WebtoB Manager가 종료되지 않으면 강제 종료하도록 "/shutdownmanager" Admin API를 호출하는 예시입니다.
[Request] { "timeout": 30 } [Response] { "result": {} }응답은 WebtoB에서 명령을 수신한 직후 반환됩니다. 단, 응답을 받은 후에도 WebtoB Manager 프로세스가 동작 중일 수 있으며, 만약 WebtoB Manager를 종료하더라도 Engine은 종료되지 않습니다.
Engine 프로세스
Engine 프로세스는 실제로 HTTP 요청을 처리하는 역할을 합니다. 각 프로세스는 인덱스를 가지며, 인덱스 번호는 0부터 시작합니다. 실행할 프로세스의 개수는 /node/process_count에서 설정할 수 있습니다.
|
WebtoB가 기동 중인 상태에서도 |
WebtoB의 기본 기동 방식은 Manager와 Engine을 함께 기동하지만, 필요 시 다음 명령으로 Engine만 단독 기동할 수 있습니다.
> webtob -a start-engine
또한 REST API를 통해 Admin API를 제공합니다. 자세한 내용은 Admin API 문서를 참조합니다.
|
로그 파일 이름에 |
프로세스 권한 및 Privileged 포트
웹 서버에서 일반적으로 HTTP는 80 포트, HTTPS는 443 포트를 기본값으로 사용합니다. 이 포트는 Privileged 포트로, 루트 권한을 가진 프로세스만 사용할 수 있습니다.
따라서 WebtoB에서 해당 포트를 사용하려면 루트 권한으로 실행해야 하며, 환경 변수도 루트 권한으로 설정해야 합니다.
다음은 Privileged 포트를 사용하는 설정으로 WebtoB를 기동하는 명령 예시입니다.
> sudo -E WEBTOB_HOME=/home/webtob/ ./webtob
루트 권한으로 바이너리를 실행하면 Manager와 Engine이 모두 루트 권한으로 기동됩니다. 하지만 HTTP 요청을 직접 받는 Engine이 루트 권한을 가지면 보안상 취약해질 수 있습니다.
이 문제를 보완하기 위해 /node/user 설정을 사용할 수 있습니다. 해당 설정은 Engine의 권한을 설정한 값으로 변경합니다. 단, 바이너리를 실행한 권한보다 낮은 권한만 지정할 수 있습니다.
예를 들어 /node/user에 낮은 권한의 사용자를 지정하고, 루트 권한으로 바이너리를 실행하면 Manager는 루트 권한을 가지고 Engine은 지정된 낮은 권한으로 실행됩니다. 이렇게 하면 Manager는 Privileged 포트를 열 수 있고, Engine은 낮은 권한으로도 Privileged 포트를 사용할 수 있습니다. 결과적으로 Engine이 공격을 받더라도 시스템 전체 권한에는 영향을 주지 않습니다.
|
|