티스토리 뷰

728x90
반응형

 포스팅은 WebtoB에서 사용하는 다양한 Port에 대해 알아보겠습니다.


WebtoB는 Webserver로서 Clinet와 WAS 사이에 위치하며 웹서비스를 수행함에 있어 중요한 역할을 담당합니다.


주요 역할로는 Request LoadBalance, Proxy, Access Control, Virtual Host, Document Working등의 업무를 수행합니다.

Request LoadBalance는 대량의 Request가 Client로 부터 요청 될 경우 이를 뒷단의 WAS쪽으로 어떻게 효율적으로 분배해 줄 것인가에서 부터 출발합니다.

기본적으로는 RR방식으로 분배하나, LBFactor를 통해 부하를 조절할 수도 있습니다.

두번째로 Proxy의 기능은 경량화된 Proxy Server 정도로 생각하면 됩니다. Proxy의 기본 기능인 Forward 방식을 제공하고 있습니다.

세번째로 Access Control입니다. 이는 Client의 접속 허용, 제한, Referer 제한, IP 제한 등 다양한 형태로 제공됩니다.

네번째로 Virtual Host는 다양한 HostName 즉 Domain을 사용할 경우 Webserver를 여러개 설치하지 않고 하나만 설치하여 다중 도메인을 사용할 수 있도록 하는 환경입니다.

마지막으로 Document Working은 가장 중요한 Webserver의 역할로써, 정적 파일을 WAS Server로 전달하지 않고 Webserver에서 처리하는 용도입니다.


위와 같이 Webserver는 다양한 역할을 수행하고 있으며, 이를 위해 다양한 포트를 점유하고 사용하게 됩니다.

본 포스팅에서는 WebtoB의 내부 프로세스들이 사용하는 Port에 대해 알아보고 어떻게 이를 활용 할 수 있는지 가이드 하도록 하겠습니다.


먼저 WebtoB 기동 시 오픈 되는 포트에 대해 확인해 보겠습니다. 기본 서비스포트를 시작으로 연동 포트, 프로세스 기동 포트, OS에 따른 포트등을 알아보도록 하겠습니다.


먼저 Service Port입니다. Service Port란 Client가 호출 시점에 접근할 수 있도록 오픈하는 Port입니다.

$WEBTOBDIR/config/http.m 파일 내에 설정이 가능합니다. 일반적으로 알고 있는 http protocol은 80 port를 의미하며, https의 경우 443을 의미합니다. Node절 또는 Vhost절에 PORT라는 Tag를 활용하여 설정이 가능합니다.

Service port 는 client 또는 L4 스위치 등 앞 단과 직접적으로 마주하는 PORT입니다. 실제 클라이언트가 요청할때 웹 브라우저 (IE, FireFox, Crome 등)에 입력하는 부분이기도 합니다.

실제로 Clinet가 요청하는 Port가 항상 WebtoB로 전달된다는 의미는 아닙니다. Client - WebtoB 사이에는 다양한 네트워크 장비가 존재할 수 있기 때문에 해당 장비로 또는 DNS Server로 호출하는 Port의 용도일 수도 있습니다. 그렇지만 앞서 이야기 한 것 처럼 여전히 Port는 Clinet가 WebtoB를 통해 HTTP 호출을 수행할 수 있도록 해주는 Port임에는 변함이 없습니다.


두번째로 JSV PORT입니다. JSV Port는 WebtoB와 JEUS간 ThreadPool을 맺을 수 있도록 연동하는 Port입니다.
$WEBTOBDIR/config/http.m 파일 내에 설정이 가능합니다. JEUS와 WebtoB를 연동할 경우 일반적인 Direct 연동방식이 아닌 Reverse Connection이라는 방식을 사용합니다. Webserver에서 Port를 Listen 하고 이를 WAS(JEUS)에서 연결하는 방식으로 구성됩니다. 이는 WebServer를 통해 Web Application Server 또는 Database Server를 공격하고자 하는 외부 공격자를 차단할 수 있는 역할을 담당합니다. 이는 타 웹와스와는 다르게 Webserver 즉 WebtoB에서 Port를 Listen하게 됩니다.

http.m 파일 Node절에 JSVPORT를 설정합니다. Default로 9990을 사용합니다.

JSVPORT는 JEUS와 Connection 하는 Port로 default 9900을 사용하며 JEUS의 WEBMain.xml 파일에 정의 되어 있는 webtob-listener태그의 port와 동일해야 Connection이 이루어 집니다.

단, jeus, webtob가 동일한 서버에 설치 되어 있고, pipe 통신으로 처리할 경우 port가 같지 않아도 <webtob-home> 태그 만으로 connection이 정상적으로 이루어 집니다. pipe 통신을 사용하게 되면 일반적으로 Socket 통신을 사용할 때 대비 3~5배 정도 빠른 성능을 보인다고 보고되고 있습니다.
또한 JSVPORT9900으로 설정되어 있고 HTH 개수가 n개 일 경우 사용 포트는 다음과 같이 변경됩니다.

9900을 시작으로 +1씩 증가하여 9990, 9901, 9902 총 3개의 port가 오픈 되어 사용되어집니다.

HTH를 여러개 두는 이유는 처음에 설명한 LoadBalance때문입니다. HTH Handler 하나당 처리할 수 있는 User와 Request 제한이 있어 이를 유연하게 분산하기 위한 방법 정도로 알아두면 되겠습니다.

세번째로 WebtoB에서 기동하는 Process들이 사용하는 Port입니다.
해당 사항은 windows 일 경우에만 적용 됩니다.!! Windows는 IPC 통신 지원이 안되어 각각 PORT로 구동이 됩니다. LINUX/UNIX의 경우 $WEBTOBDIR/path 디렉토리에 wsmd, htld, hthd 등이 생성되어 socket 통신으로 처리 합니다.

webtob를 구동 시키면 총 3종류의 process가 구동됩니다.


WSM : 전체적인 WebtoB 시스템의 운용 프로세스로써 시스템의 운영 정보를 관리하고, HTL, HTH 프로세스 및 모든 서버 프로세스들을 관리하는 프로세스이다. WebtoB 시스템이 멀티 노드로 구성되었을 경우 타 노드 내의 WSM 과 세션을 유지하며 heartbeat 를 체크하여 서버 그룹 단위의 장애 대책을 지원한다. WebtoB 시스템 기동 시 WSM 은 가장 먼저 메모리에 로드 되고 시스템 종료 시에는 가장 나중에 종료된다.

HTL : HTL 은 클라이언트와 WebtoB 간의 연결을 관리하는 Listener 프로세스이다. 클라이언트가 처음 WebtoB 에 접속할 때에는 HTL 과 연결을 맺어 통신이 이루어지나 서비스 요청이 있을 경우, 내부적으로 HTH 와 연결이 되어 모든 서비스 처리가 이루어진다.

HTH, HTHS : 클라이언트 핸들러라고도 하며 실질적으로 클라이언트와 서버의 업무처리 프로세스 사이를 중계하는 프로세스이다. HTH 는 서버 프로세스들과의 통신을 통해 모든 실제적인 데이터의 흐름을 관리한다. 즉 클라이언트의 서비스 요청을 받아 그에 해당하는 업무를 처리하며 그 결과를 수신하여 다시 클라이언트에게 되돌려준다. SSL 설정을 한 경우에 HTH 가 아닌 HTHS 가 기동된다.


webtob 4.1.3.0에서 ${WEBTOBDIR}/docs에 있는 WebtoB 실행파일 중 HTH와 HTHS 를 하나의 HTH로 변경하였다.

이전에는 SSL을 설정 시 실행되는 프로세스는 hths 이름으로 확인되었다. 변경 후 SSL을 설정하여도 hth 이름으로 실행되게 변경되었다.

해당 프로세스 별 PORT 계산 법은 다음과 같습니다.
Windows 에서는 내부 프로세스간 IPC통신이 불가능합니다.
Windows 에서는 이를 대체하기 위해 Node절에 IPCBasePort 항목을 지정하여 내부 프로세스간 socket 통신을 합니다.

이를 기준으로 wsm은 IPCPASEPORT +1, htl은 IPCPASEPORT +2, hth는 IPCPASEPORT +4로 각각 Process가 기동됩니다.


이번 포스팅에서는 WebtoB에서 사용하는 Port들에 대해 알아보았습니다. 각 포트의 용도를 파악하고 이를 웹서비스에 적절하게 반영하는 노력을 기울여야 하겠습니다.

맙습니다.

728x90
반응형