내용 목차
본 장에서는 가상 호스트의 사용 목적, 규칙 및 설정 방법 등에 대해 설명한다.
가상 호스트는 인터넷 도메인 이름을 기준으로 같은 URL로 서로 다른 웹 애플리케이션에 매핑할 수 있도록 한다. 즉, 2개 이상의 도메인 이름(예: “www1.foo.com” and “www2.foo.com”)을 하나의 웹 엔진에 설정하여 서로 다른 웹 컨텍스트를 서비스할 수 있다.
웹 엔진 관점에서 웹 컨텍스트는 웹 애플리케이션과 동일한 의미이다.
본 절에서는 가상 호스트의 사용 목적, 규칙, ServletContext 객체와 가상 호스트의 관계에 대해 설명한다.
가상 호스트에 매핑된 도메인 이름을 기준으로, 같은 URL로 서로 다른 웹 애플리케이션에 매핑할 수 있다. 따라서 서비스 제공자는 하나의 웹 엔진으로 2개 이상의 웹 사이트를 서비스 이용자에게 제공할 수 있다. 이는 HTTP 1.1의 Host 헤더를 이용해서 가상 호스트를 제공하는 기능과 동일하다.
가상 호스트는 웹 엔진에 설정할 수 있는 일종의 웹 컨텍스트 그룹이다. 가상 호스트가 웹 엔진의 구성 요소로서 어떻게 위치하는지는 [그림 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개 이상의 웹 컨텍스트는 존재할 수 없다.
웹 컨텍스트 이름은 Java EE 표준에서 정의한 애플리케이션 또는 모듈 이름을 의미한다. 패스는 웹 애플리케이션 내에서 정의하는 Context Root 또는 Context Path를 의미한다. 웹 컨텍스트 이름은 JEUS Deploy 차원에서 관리하는 것이며, 웹 엔진은 Context Path를 관리한다.
JEUS 웹 엔진에는 기본 가상 호스트(Default Virtual Host)라는 묵시적인 가상 호스트가 존재한다. 웹 컨텍스트를 deploy할 때 명시적으로 가상 호스트에 지정하지 않으면, 기본 가상 호스트로 deploy한다. 이 가상 호스트의 이름은 "DEFAULT_HOME"이다. 예약어이므로 다른 가상 호스트 이름으로 지정할 수 없다.
본 절에서는 URL과 가상 호스트 내에 존재하는 웹 컨텍스트를 매칭하는 방법에 대해 설명한다.
다음은 웹 엔진과 가상 호스트, 웹 컨텍스트 간의 유효한 관계의 예시를 나타낸다.
[그림 5.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 왼쪽 메뉴에서 [Servers]를 선택하면 서버 목록 조회 화면으로 이동한다. 서버 목록에서 실행할 서버를 선택하면 서버 설정 화면으로 이동한다. 설정 화면에서 [Engine] > [Web Engine] > [Virtual Host] 메뉴를 선택한다.
설정 및 설정 변경을 위해 화면 왼쪽의 [LOCK & EDIT] 버튼을 클릭해서 설정변경 모드로 전환한다. ([그림 1.5] 참고)
가상 호스트 추가를 위해 [ADD] 버튼을 클릭하여 다음과 같이 각 항목을 설정하고, [확인] 버튼을 클릭한다. 'Virtual Host Name'을 차례로 'A', 'B', 'C'로 설정한다.
다음은 'C'라는 이름의 가상 호스트를 설정한 화면이다.
다음은 주요 설정 설정 항목에 대한 설명이다.
항목 | 설명 |
---|---|
Virtual Host Name | 가상 호스트를 참조하기 위해 내부적으로 사용하는 이름이다. "DEFAULT_HOST"는 기본 가상 호스트의 이름이기 때문에 사용해서는 안 된다. |
Host Name | 도메인 이름 또는 IP 주소, 그리고 포트를 포함하는 문자열이다. |
Properties | 가상 호스트별로 프로퍼티를 적용할 수 있다. JEUS에서 정의한 프로퍼티들도 적용 가능하다. 자세한 사항은 “JEUS Reference Book”의 “1.6. 웹 엔진 프로퍼티”를 참고한다. |
Encoding | 가상 호스트별로 인코딩 옵션을 적용할 수 있다. 자세한 사항은 “1.6.5. 인코딩 설정”을 참고한다. |
Cookie policy | 가상 호스트별로 cookie policy을 적용할 수 있다. 자세한 사항은 “1.6.8. 쿠키 정책 설정”을 참고한다. |
설정을 완료한 뒤 설정 내용의 반영을 위해 [Activate Changes] 버튼을 클릭한다. ([그림 2.10] 참고)
3개의 가상 호스트를 추가한 결과가 다음과 같이 화면에 나타난다.
콘솔 툴을 사용하여 가상 호스트를 추가하려면 다음과 같이 add-virtual-host 명령어를 수행한다. 명령에 대한 자세한 내용은 “JEUS Reference Book”의 “4.2.8.7. add-virtual-host”를 참고한다.
WebAdmin과 콘솔 툴을 사용하여 가상 호스트를 수정할 수 있다.
WebAdmin을 사용하여 가상 호스트를 수정하는 방법은 다음과 같다.
WebAdmin 왼쪽 메뉴에서 [Servers]를 선택하면 서버 목록 조회 화면으로 이동한다. 서버 목록에서 실행할 서버를 선택하면 서버 설정 화면으로 이동한다. 설정 화면에서 [Engine] > [Web Engine] > [Virtual Host] 메뉴를 선택한다. 가상 호스트 목록에서 수정을 원하는 가상 호스트의 이름을 클릭한다.([그림 5.5] 참고)
설정 및 설정 변경을 위해 화면 왼쪽의 [LOCK & EDIT] 버튼을 클릭해서 설정변경 모드로 전환한다. ([그림 1.5] 참고)
Virtual Host 설정 화면에서 설정 내용을 수정할 수 있다.
[Access Log] 메뉴에서 가상 호스트별로 액세스 로그를 설정할 수 있다. 자세한 내용은 "가상 호스트별 액세스 로그 설정"을 참고한다. 각 항목을 설정하고 [확인] 버튼을 클릭한다.
설정을 완료한 뒤 설정 내용의 반영을 위해 [Activate Changes] 버튼([그림 2.10] 참고)을 클릭하면 다음과 같이 화면에 나타난다. 수정 내용을 반영하려면 서버를 재시작해야 한다.
콘솔 툴을 사용하여 가상 호스트를 수정하려면 다음과 같이 modify-virtual-host 명령어를 수행한다. 명령에 대한 자세한 내용은 “JEUS Reference Book”의 “4.2.8.19. modify-virtual-host”를 참고한다.
가상 호스트 중 필요없거나 삭제하려면 WebAdmin과 콘솔 툴을 사용하여 가상 호스트를 삭제할 수 있다.
WebAdmin을 사용하여 가상 호스트를 삭제하는 방법은 다음과 같다.
WebAdmin 왼쪽 메뉴에서 [Servers]를 선택하면 서버 목록 조회 화면으로 이동한다. 서버 목록에서 실행할 서버를 선택하면 서버 설정 화면으로 이동한다. 설정 화면에서 [Engine] > [Web Engine] > [Virtual Host] 메뉴를 선택한다. 가상 호스트 목록에서 삭제할 가상 호스트의 [DEL] 버튼을 클릭한다. ([그림 5.5] 참고)
가상 호스트가 정상적으로 삭제되면 다음과 같은 결과 메시지와 해당 가상 호스트가 목록에서 삭제된 것을 확인할 수 있다.
설정을 완료한 뒤 설정 내용의 반영을 위해 [Activate Changes] 버튼을 클릭한다. ([그림 2.10] 참고)
만약 해당 가상 호스트에 연결된 웹 애플리케이션들이 있다면(즉, 해당 가상 호스트를 Target으로 deploy된 애플리케이션이 존재한다면) 해당 가상 호스트는 삭제되지 않는다. 이 경우에는 연결되어 있는 Target을 웹 애플리케이션에서 삭제해야 가상 호스트를 삭제할 수 있다. 웹 애플리케이션의 Target 삭제는 “JEUS Applications & Deployment 안내서”의 “4.3.9. 서비스 중인 애플리케이션에서 서비스 중인 서버 삭제”를 참고한다.
콘솔 툴을 사용하여 가상 호스트를 삭제하려면 다음과 같이 remove-virtual-host 명령어를 수행한다. 명령에 대한 자세한 내용은 “JEUS Reference Book”의 “4.2.8.31. remove-virtual-host”를 참고한다.