본 장에서는 가상 호스트의 사용 목적, 규칙 및 설정 방법 등에 대해 설명한다.
가상 호스트는 인터넷 도메인 이름을 기준으로 같은 URL로 서로 다른 웹 애플리케이션에 매핑할 수 있도록 한다. 즉, 2개 이상의 도메인 이름(예: “www1.foo.com” and “www2.foo.com”)을 하나의 웹 엔진에 설정하여 서로 다른 웹 컨텍스트를 서비스할 수 있다.
웹 엔진 관점에서 웹 컨텍스트는 웹 애플리케이션과 동일한 의미이다.
본 절에서는 가상 호스트의 사용 목적, 규칙, ServletContext 객체와 가상 호스트의 관계에 대해 설명한다.
가상 호스트에 매핑된 도메인 이름을 기준으로, 같은 URL로 서로 다른 웹 애플리케이션에 매핑할 수 있다. 따라서 서비스 제공자는 하나의 웹 엔진으로 2개 이상의 웹 사이트를 서비스 이용자에게 제공할 수 있다. 이는 HTTP 1.1의 호스트 헤더를 이용해서 가상 호스트를 제공하는 기능과 동일하다.
가상 호스트는 웹 엔진에 설정할 수 있는 일종의 웹 컨텍스트 그룹이다. 가상 호스트가 웹 엔진의 구성 요소로서 어떻게 위치하는지는 [그림 1.1]을 참고한다.
다음은 가상 호스트의 사용 목적에 따른 이용 패턴을 보여준다.
위의 예제를 보면, 서로 다른 2개의 주소로 서로 같은 컨텍스트 패스(/service)에 접근할 수 있다. 실제로는 하나의 서버뿐이지만 HTTP 클라이언트 입장에서는 "www.foo.com"과 "www.bar.com"이라는 2대의 서버가 존재하는 것처럼 인식된다.
서비스 제공자 입장에서는 "/service"라는 동일한 주소 패턴으로 서로 다른 서비스를 제공할 수 있다. 위의 예제에서는 "www.foo.com"은 한국어 서비스를, "www.bar.com"은 영어 서비스를 제공하고 있다.
가상 호스트를 구성할 때 적용되는 규칙은 다음과 같다.
가상 호스트에는 가상 호스트 이름을 부여한다.
가상 호스트의 이름은 설정 파일 내에서 가상 호스트를 참조하기 위해서 내부적으로 사용되는 이름으로 웹 엔진 내에서 유일해야 한다.
하나의 가상 호스트는 1개 이상의 도메인 이름이나 IP 주소를 매핑할 수 있다.
JEUS는 이를 호스트 이름이라고 한다. 서로 다른 가상 호스트에 같은 호스트 이름을 매핑할 수 없다는 점에 유의한다.
동일한 이름의 웹 컨텍스트는 서로 다른 가상 호스트에 deploy할 수 없다.
서블릿 표준에서 서로 다른 가상 호스트에서 동일한 웹 컨텍스트를 공유할 수 없다고 정의되어 있다.
동일한 패스를 가진 서로 다른 웹 컨텍스트 를 각각 서로 다른 가상 호스트에 deploy할 수 있다. 단, 하나의 가상 호스트 내에서는 동일한 패스를 가진 2개 이상의 웹 컨텍스트는 존재할 수 없다.
웹 컨텍스트 이름은 Jakarta EE 표준에서 정의한 애플리케이션 또는 모듈 이름을 의미한다. 패스는 웹 애플리케이션 내에서 정의하는 Context Root 또는 Context Path를 의미한다. 웹 컨텍스트 이름은 JEUS Deploy 차원에서 관리하는 것이며, 웹 엔진은 Context Path를 관리한다.
JEUS 웹 엔진에는 기본 가상 호스트(Default Virtual Host)라는 묵시적인 가상 호스트가 존재한다. 웹 컨텍스트를 deploy할 때 명시적으로 가상 호스트에 지정하지 않으면, 기본 가상 호스트로 deploy한다. 이 가상 호스트의 이름은 "DEFAULT_HOME"이다. 예약어이므로 다른 가상 호스트 이름으로 지정할 수 없다.
본 절에서는 URL과 가상 호스트 내에 존재하는 웹 컨텍스트를 매칭하는 방법에 대해 설명한다.
다음은 웹 엔진과 가상 호스트, 웹 컨텍스트 간의 유효한 관계의 예시를 나타낸다.
[그림 6.2]를 기반으로 각각의 URL이 매칭되는 가상 호스트와 웹 컨텍스트는 다음과 같다.
http://www.foo.com/ctx1/test.jsp
매칭되는 가상 호스트 | A |
매칭되는 웹 컨텍스트 이름 | ctx1 |
http://www.foo.com/ctx2/test.jsp
매칭되는 가상 호스트 | A |
매칭되는 웹 컨텍스트 이름 | ctx2 |
http://www.bar.com/ctx1/
매칭되는 가상 호스트 | B |
매칭되는 웹 컨텍스트 이름 | ctx1-1 |
http://www.bar2.com/ctx1/test.jsp
매칭되는 가상 호스트 | C |
매칭되는 웹 컨텍스트 이름 | 없음 (404 Not Found) |
http://www.foo2.com/ctx2/
매칭되는 가상 호스트 | C |
매칭되는 웹 컨텍스트 이름 | ctx2-2 |
웹 컨텍스트 이름과 컨텍스트 패스는 서로 다른 개념이다. 일반적으로 같은 값을 사용하지만 지금처럼 가상 호스트를 이용해서 서비스를 구분하는 경우에는 서로 달라진다.
URL이 매칭되는 순서는 다음과 같다.
Host 헤더의 도메인 이름 및 포트 문자열을 등록된 모든 가상 호스트에 매칭시킨다. 매칭된 가상 호스트가 있다면 그 안에서 웹 컨텍스트를 찾는다.
가상 호스트에 설정한 호스트 이름에 "IP:Port"와 같은 형식으로 포트 정보도 매핑할 수 있다. 포트가 있는 경우에는 Host 헤더값 전체(포트 포함)를 매칭하는 작업을 수행한다.
웹 컨텍스트가 발견되지 않았으면 기본 가상 호스트에서 찾는다.
기본 가상 호스트에서 원하는 웹 컨텍스트가 없으면 "404 Not Found" 에러가 발생한다.
WebAdmin과 콘솔 툴을 사용하여 가상 호스트를 추가, 수정 및 삭제할 수 있다.
본 절의 설정 예제에서는 편의상 이름을 "A", "B", "C"로 사용하였다. 실제 환경에서는 의미 있는 이름을 사용한다.
WebAdmin과 콘솔 툴을 사용하여 가상 호스트를 추가할 수 있다.
WebAdmin을 사용하여 가상 호스트를 추가하는 방법은 다음과 같다.
WebAdmin 메인 화면에서 Master Server를 선택한 후 JEUS Master 화면 상단 메뉴에서 [서버]를 선택한다.
서버 화면의 목록에서 서버를 선택한 후 설정 화면에서 [Engine] > [Web Engine] > [Virtual Host] 메뉴를 선택한다.
Virtual Host 화면에서 [추가] 버튼을 클릭하면 Virtual Host 추가 화면에서 가상 호스트 추가할 수 있다. 각 항목을 설정하고 [추가] 버튼을 클릭한다.
다음은 주요 설정 설정 항목에 대한 설명이다.
항목 | 설명 |
---|---|
Virtual Host Name | 가상 호스트를 참조하기 위해 내부적으로 사용하는 이름이다. "DEFAULT_HOST"는 기본 가상 호스트의 이름이기 때문에 사용해서는 안 된다. |
Host Name | 도메인 이름 또는 IP 주소, 그리고 포트를 포함하는 문자열이다. |
Min | Thread Pool의 최소 Thread 수이다. Thread Pool을 설정하게 되면, 해당하는 Context Thread Pool이 없을 경우에는 모든 요청이 Virtual Host 스레드 풀에서 요청을 처리하게 된다. 자세한 것은 4. 스레드 풀을 참고한다. |
Max | Thread Pool의 최대 Thread 수이다. |
Max Idle time | Thread Pool의 Thread별 유후 대기 시간이다. |
Max Queue | Thread Pool에서 처리할 작업들을 저장할 Queue의 Size이다. |
Properties | 가상 호스트별로 프로퍼티를 적용할 수 있다. JEUS에서 정의한 프로퍼티들도 적용 가능하다. 자세한 사항은 “JEUS Reference 안내서”의 “1.7. 웹 엔진 프로퍼티”를 참고한다. |
Encoding | 가상 호스트별로 인코딩 옵션을 적용할 수 있다. 자세한 사항은 “1.6.5. 인코딩 설정”을 참고한다. |
Cookie policy | 가상 호스트별로 cookie policy을 적용할 수 있다. 자세한 사항은 “1.6.8. 쿠키 정책 설정”을 참고한다. |
정상적으로 처리되면 저장이 완료 되었다는 결과와 가상 호스트 목록에 추가 된다.
콘솔 툴을 사용하여 가상 호스트를 추가하려면 다음과 같이 add-virtual-host 명령어를 수행한다.
**add-virtual-host** [-cluster <__cluster-name__> | -server <__server-name__>] [-f, --forceLock] <__virtual-host-name__> -list <__host-name-list__> [-tmin <__minimum-thread-num__>] [-tmax <__maximum-thread-num__>] [-tidle <__max-idle-time__>] [-qs <__max-queue__>]
명령어에 대한 자세한 내용은 “JEUS Reference 안내서”의 “4.2.8.8. add-virtual-host”를 참고한다.
WebAdmin과 콘솔 툴을 사용하여 가상 호스트를 수정할 수 있다.
WebAdmin을 사용하여 가상 호스트를 수정하는 방법은 다음과 같다.
WebAdmin 메인 화면에서 Master Server를 선택한 후 JEUS Master 화면 상단 메뉴에서 [서버]를 선택한다.
서버 화면의 목록에서 서버를 선택한 후 설정 화면에서 [Engine] > [Web Engine] > [Virtual Host]을 선택한다.
Virtual Host 화면의 가상 호스트 목록에서 수정할 가상 호스트의 이름을 클릭한다. ([그림 6.5] 참고)
Virtual Host 설정 화면에서 [수정] 버튼을 클릭한 후 설정 내용을 수정하고 [저장] 버튼을 클릭한다.
[Access Log] 탭을 선택하면 가상 호스트별로 액세스 로그를 설정할 수 있다. 자세한 내용은 "가상 호스트별 액세스 로그 설정"을 참고한다.
[pipeline] 탭을 선택하면 가상 호스트별로 pipeline을 설정할 수 있다. 자세한 내용은 "가상 호스트별 액세스 로그 설정"을 참고한다.
콘솔 툴을 사용하여 가상 호스트를 수정하려면 다음과 같이 modify-virtual-host 명령어를 수행한다. 명령어에 대한 자세한 내용은 “JEUS Reference 안내서”의 “4.2.8.18. modify-virtual-host”를 참고한다.
가상 호스트 중 필요없거나 삭제하려면 WebAdmin과 콘솔 툴을 사용하여 가상 호스트를 삭제할 수 있다.
WebAdmin을 사용하여 가상 호스트를 삭제하는 방법은 다음과 같다.
WebAdmin 메인 화면에서 Master Server를 선택한 후 JEUS Master 화면 상단 메뉴에서 [서버]를 선택한다.
서버 화면의 목록에서 서버를 선택한 후 설정 화면에서 [Engine] > [Web Engine] > [Virtual Host]을 선택한다.
Virtual Host 화면의 가상 호스트 목록에서 삭제할 가상 호스트의 [삭제] 버튼을 클릭한다. ([그림 6.5] 참고)
가상 호스트가 정상적으로 삭제되면 다음과 같은 결과 메시지와 해당 가상 호스트가 목록에서 삭제된 것을 확인할 수 있다.
만약 해당 가상 호스트에 연결된 웹 애플리케이션들이 있다면(즉, 해당 가상 호스트를 Target으로 deploy된 애플리케이션이 존재한다면) 해당 가상 호스트는 삭제되지 않는다. 이 경우에는 연결되어 있는 Target을 웹 애플리케이션에서 삭제해야 가상 호스트를 삭제할 수 있다. 웹 애플리케이션의 Target 삭제는 “JEUS Applications & Deployment 안내서”의 “4.3.9. 서비스 중인 애플리케이션에서 서비스 중인 서버 삭제”를 참고한다.
콘솔 툴을 사용하여 가상 호스트를 삭제하려면 다음과 같이 remove-virtual-host 명령어를 수행한다. 명령어에 대한 자세한 내용은 “JEUS Reference 안내서”의 “4.2.8.31. remove-virtual-host”를 참고한다.