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 문서를 참조합니다.
|
로그 파일 이름에 |
프로세스 권한 및 특권 포트
특권 포트와 WebtoB 실행 권한
웹 서버에서 일반적으로 HTTP는 80 포트, HTTPS는 443 포트를 사용합니다. 이 포트는 운영체제에서 특권 포트(1~1023에 해당하는 포트)로 분류되며, 루트 권한을 가진 프로세스만 사용할 수 있습니다.
따라서 WebtoB가 해당 포트를 사용하려면 실행 시 루트 권한이 필요하고, 환경 변수도 루트 권한으로 설정해야 합니다.
다음은 특권 포트 사용을 위해 WebtoB를 루트로 기동하는 예시입니다.
> sudo -E WEBTOB_HOME=/home/webtob/ ./webtob
루트 권한 실행 시 문제점
WebtoB 바이너리를 루트 권한으로 실행하면 Manager 프로세스와 Engine 프로세스가 모두 루트 권한으로 기동됩니다.
그러나 Engine 프로세스는 외부 HTTP 요청을 직접 처리하므로, 루트 권한을 유지한 상태로 운영할 경우 보안 위험이 증가합니다.
다음은 WebtoB 바이너리를 루트 권한으로 기동했을 때 프로세스의 권한을 확인한 결과입니다.
> ps -eo pid,user,comm | grep WebtoB 396052 root WebtoB Manager 396053 root WebtoB Engine-0 396054 root WebtoB Engine-1 396055 root WebtoB Engine-2
Engine 권한 분리
WebtoB는 /node/user 설정을 사용하여 Engine 프로세스를 일반 사용자 권한으로 실행하도록 설정할 수 있습니다. 이때 지정할 수 있는 권한은 WebtoB 바이너리를 실행한 권한보다 낮아야 합니다.
"node": {
"user": "webtob"
}
루트 권한으로 WebtoB를 기동한 후 /node/user에 일반 사용자를 지정하면 다음과 같이 동작합니다.
-
Manager 프로세스는 루트 권한 유지
-
Engine 프로세스는
/node/user에 지정한 사용자 권한으로 실행
이 구조는 Manager가 특권 포트(1~1023)를 열고, Engine은 낮은 권한으로 운영되어 보안성을 높이는 데 유용합니다.
다음은 /node/user를 'webtob’로 설정한 상태에서 WebtoB 바이너리를 루트 권한으로 기동했을 때 프로세스의 권한을 확인한 결과입니다.
> ps -eo pid,user,comm | grep WebtoB 396052 root WebtoB Manager 396053 webtob WebtoB Engine-0 396054 webtob WebtoB Engine-1 396055 webtob WebtoB Engine-2
|
|