제5장 가상 호스트

내용 목차

5.1. 개요
5.2. 웹 엔진과 가상 호스트
5.2.1. ServletContext 객체와 가상 호스트
5.3. 가상 호스트를 통한 웹 컨텍스트 요청
5.3.1. URL 매칭 예제
5.3.2. URL 매칭 순서
5.4. 가상 호스트 설정
5.4.1. 추가
5.4.2. 수정
5.4.3. 삭제

본 장에서는 가상 호스트의 사용 목적, 규칙 및 설정 방법 등에 대해 설명한다.

5.1. 개요

가상 호스트는 인터넷 도메인 이름을 기준으로 같은 URL로 서로 다른 웹 애플리케이션에 매핑할 수 있도록 한다. 즉, 2개 이상의 도메인 이름(예: “www1.foo.com” and “www2.foo.com”)을 하나의 웹 엔진에 설정하여 서로 다른 웹 컨텍스트를 서비스할 수 있다.

참고

웹 엔진 관점에서 웹 컨텍스트는 웹 애플리케이션과 동일한 의미이다.

5.2. 웹 엔진과 가상 호스트

본 절에서는 가상 호스트의 사용 목적, 규칙, ServletContext 객체와 가상 호스트의 관계에 대해 설명한다.

사용 목적

가상 호스트에 매핑된 도메인 이름을 기준으로, 같은 URL로 서로 다른 웹 애플리케이션에 매핑할 수 있다. 따라서 서비스 제공자는 하나의 웹 엔진으로 2개 이상의 웹 사이트를 서비스 이용자에게 제공할 수 있다. 이는 HTTP 1.1의 Host 헤더를 이용해서 가상 호스트를 제공하는 기능과 동일하다.

가상 호스트는 웹 엔진에 설정할 수 있는 일종의 웹 컨텍스트 그룹이다. 가상 호스트가 웹 엔진의 구성 요소로서 어떻게 위치하는지는 [그림 1.1]을 참고한다.

다음은 가상 호스트의 사용 목적에 따른 이용 패턴을 보여준다.

[그림 5.1] 가상 호스트의 이용 패턴

가상 호스트의 이용 패턴


위의 예제를 보면, 서로 다른 2개의 주소로 서로 같은 컨텍스트 패스(/service)에 접근할 수 있다. 실제로는 하나의 서버뿐이지만 HTTP 클라이언트 입장에서는 "www.foo.com"과 "www.bar.com"이라는 2대의 서버가 존재하는 것처럼 인식된다.

서비스 제공자 입장에서는 "/service"라는 동일한 주소 패턴으로 서로 다른 서비스를 제공할 수 있다. 위의 예제에서는 "www.foo.com"은 한국어 서비스를, "www.bar.com"은 영어 서비스를 제공하고 있다.

규칙

가상 호스트를 구성할 때 적용되는 규칙은 다음과 같다.

  • 가상 호스트에는 가상 호스트 이름을 부여한다.

    가상 호스트의 이름은 설정 파일 내에서 가상 호스트를 참조하기 위해서 내부적으로 사용되는 이름으로 웹 엔진 내에서 유일해야 한다.

  • 하나의 가상 호스트는 1개 이상의 도메인 이름이나 IP 주소를 매핑할 수 있다.

    JEUS는 이를 호스트 이름이라고 한다. 서로 다른 가상 호스트에 같은 호스트 이름을 매핑할 수 없다는 점에 유의한다.

  • 동일한 이름의 웹 컨텍스트는 서로 다른 가상 호스트에 deploy할 수 없다.

    경고

    Servlet 표준에서 서로 다른 가상 호스트에서 동일한 웹 컨텍스트를 공유할 수 없다고 정의되어 있다.

  • 동일한 패스를 가진 서로 다른 웹 컨텍스트 를 각각 서로 다른 가상 호스트에 deploy할 수 있다. 단, 하나의 가상 호스트 내에서는 동일한 패스를 가진 2개 이상의 웹 컨텍스트는 존재할 수 없다.

    웹 컨텍스트 이름은 Java EE 표준에서 정의한 애플리케이션 또는 모듈 이름을 의미한다. 패스는 웹 애플리케이션 내에서 정의하는 Context Root 또는 Context Path를 의미한다. 웹 컨텍스트 이름은 JEUS Deploy 차원에서 관리하는 것이며, 웹 엔진은 Context Path를 관리한다.

JEUS 웹 엔진에는 기본 가상 호스트(Default Virtual Host)라는 묵시적인 가상 호스트가 존재한다. 웹 컨텍스트를 deploy할 때 명시적으로 가상 호스트에 지정하지 않으면, 기본 가상 호스트로 deploy한다. 이 가상 호스트의 이름은 "DEFAULT_HOME"이다. 예약어이므로 다른 가상 호스트 이름으로 지정할 수 없다.

5.2.1. ServletContext 객체와 가상 호스트

Servlet API에는 javax.servlet.ServletContext.getContext(String contextPath)라는 메소드가 있다. "contextPath"에 의해 주어진 ServletContext 객체를 리턴한다. 이 메소드는 ServletContext가 속하는 가상 호스트에 존재하는 ServletContext를 리턴한다.

만약 해당 가상 호스트 내에 없으면 기본 가상 호스트에서 찾는다.

5.3. 가상 호스트를 통한 웹 컨텍스트 요청

본 절에서는 URL과 가상 호스트 내에 존재하는 웹 컨텍스트를 매칭하는 방법에 대해 설명한다.

다음은 웹 엔진과 가상 호스트, 웹 컨텍스트 간의 유효한 관계의 예시를 나타낸다.

[그림 5.2] 웹 엔진과 가상 호스트, 웹 컨텍스트 간의 유효한 관계의 예

웹 엔진과 가상 호스트, 웹 컨텍스트 간의 유효한 관계의 예

5.3.1. 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

경고

웹 컨텍스트 이름과 컨텍스트 패스는 서로 다른 개념이다. 일반적으로 같은 값을 사용하지만 지금처럼 가상 호스트를 이용해서 서비스를 구분하는 경우에는 서로 달라진다.

5.3.2. URL 매칭 순서

URL이 매칭되는 순서는 다음과 같다.

  1. Host 헤더의 도메인 이름 및 포트 문자열을 등록된 모든 가상 호스트에 매칭시킨다. 매칭된 가상 호스트가 있다면 그 안에서 웹 컨텍스트를 찾는다.

    참고

    가상 호스트에 설정한 호스트 이름에 "IP:Port"와 같은 형식으로 포트 정보도 매핑할 수 있다. 포트가 있는 경우에는 Host 헤더값 전체(포트 포함)를 매칭하는 작업을 수행한다.

  2. 웹 컨텍스트가 발견되지 않았으면 기본 가상 호스트에서 찾는다.

  3. 기본 가상 호스트에서 원하는 웹 컨텍스트가 없으면 "404 Not Found" 에러가 발생한다.

5.4. 가상 호스트 설정

WebAdmin과 콘솔 툴을 사용하여 가상 호스트를 추가, 수정 및 삭제할 수 있다.

참고

본 절의 설정 예제에서는 편의상 이름을 "A", "B", "C"로 사용하였다. 실제 환경에서는 의미있는 이름을 사용한다.

5.4.1. 추가

WebAdmin과 콘솔 툴을 사용하여 가상 호스트를 추가할 수 있다.

WebAdmin 사용

WebAdmin을 사용하여 가상 호스트를 추가하는 방법은 다음과 같다.

  1. WebAdmin 왼쪽 메뉴에서 [Servers]를 선택하면 서버 목록 조회 화면으로 이동한다. 서버 목록에서 실행할 서버를 선택하면 서버 설정화면으로 이동한다. 설정화면에서 [Engine] > [Web Engine] > [Virtual Host] 메뉴를 선택한다.

    [그림 5.3] 가상 호스트 추가 - 메뉴 이동

    가상 호스트 추가 - 메뉴 이동

  2. 설정 및 설정 변경을 위해 화면 왼쪽의 [LOCK & EDIT] 버튼을 클릭해서 설정변경 모드로 전환한다.

  3. 가상 호스트 추가를 위해 [ADD] 버튼을 클릭하여 다음과 같이 각 항목을 설정하고, [확인] 버튼을 클릭한다. 'Virtual Host Name'을 차례로 'A', 'B', 'C'로 설정한다.

    다음은 'C'라는 이름의 가상 호스트를 설정한 화면이다.

    [그림 5.4] 가상 호스트 추가 - 기본 정보 설정

    가상 호스트 추가 - 기본 정보 설정


    항목설명
    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. 쿠키 정책 설정”를 참고한다.

  4. 설정을 완료한 뒤 설정 내용의 반영을 위해 [Activate Changes] 버튼을 클릭한다.

  5. 3개의 가상 호스트를 추가한 결과가 다음과 같이 화면에 나타난다.

    [그림 5.5] 가상 호스트 추가 - 추가 적용 결과

    가상 호스트 추가 - 추가 적용 결과


콘솔 툴 사용

콘솔 툴을 사용하여 가상 호스트를 추가하려면 다음과 같이 add-virtual-host 명령을 수행한다. 명령에 대한 자세한 내용은 JEUS Reference Book”의 “4.2.8.7. add-virtual-host”를 참고한다.

5.4.2. 수정

WebAdmin과 콘솔 툴을 사용하여 가상 호스트를 수정할 수 있다.

WebAdmin 사용

WebAdmin을 사용하여 가상 호스트를 수정하는 방법은 다음과 같다.

  1. WebAdmin 왼쪽 메뉴에서 [Servers]를 선택하면 서버 목록 조회 화면으로 이동한다. 서버 목록에서 실행할 서버를 선택하면 서버 설정화면으로 이동한다. 설정화면에서 [Engine] > [Web Engine] > [Virtual Host] 메뉴를 선택한다.

    가상 호스트 목록에서 수정을 원하는 가상 호스트의 이름을 클릭한다.([그림 5.5] 참고)

  2. 설정 및 설정 변경을 위해 화면 왼쪽의 [LOCK & EDIT] 버튼을 클릭해서 설정변경 모드로 전환한다.

  3. Virtual Host 설정화면에서 설정 내용을 수정할 수 있다.

    [그림 5.6] 가상 호스트 수정 - 기본 정보 수정

    가상 호스트 수정 - 기본 정보 수정

  4. [Access Log] 메뉴에서 가상 호스트별로 액세스 로그를 설정할 수 있다. 자세한 내용은 절 1.6.10. “가상 호스트별 액세스 로그 설정”을 참고한다. 각 항목을 설정하고 [확인] 버튼을 클릭한다.

    [그림 5.7] 가상 호스트 수정 - Access Log 추가 설정

    가상 호스트 수정 - Access Log 추가 설정


  5. 설정을 완료한 뒤 설정 내용의 반영을 위해 [Activate Changes] 버튼을 클릭한다.

  6. 수정 내용의 반영 결과가 다음과 같이 화면에 나타난다. 수정 내용을 반영하려면 서버를 재시작해야 한다.

    [그림 5.8] 가상 호스트 수정 - 액세스 로그 추가 적용 결과

    가상 호스트 수정 - 액세스 로그 추가 적용 결과

콘솔 툴 사용

콘솔 툴을 사용하여 가상 호스트를 수정하려면 다음과 같이 modify-virtual-host 명령을 수행한다. 명령에 대한 자세한 내용은 JEUS Reference Book”의 “4.2.8.20. modify-virtual-host”를 참고한다.

5.4.3. 삭제

가상 호스트 중 필요없거나 삭제하려면 WebAdmin과 콘솔 툴을 사용하여 가상 호스트를 삭제할 수 있다.

WebAdmin 사용

WebAdmin을 사용하여 가상 호스트를 삭제하는 방법은 다음과 같다.

  1. WebAdmin 왼쪽 메뉴에서 [Servers]를 선택하면 서버 목록 조회 화면으로 이동한다. 서버 목록에서 실행할 서버를 선택하면 서버 설정화면으로 이동한다. 설정화면에서 [Engine] > [Web Engine] > [Virtual Host] 메뉴를 선택한다.

    가상 호스트 목록에서 삭제할 가상 호스트의 [DEL] 버튼을 클릭한다.([그림 5.5] 참고)

  2. 가상 호스트가 정상적으로 삭제되면 다음과 같은 결과 메시지와 해당 가상 호스트가 목록에서 삭제된 것을 확인할 수 있다.

    [그림 5.9] 가상 호스트 삭제 - 삭제 확인

    가상 호스트 삭제 - 삭제 확인


  3. 설정을 완료한 뒤 설정 내용의 반영을 위해 [Activate Changes] 버튼을 클릭한다.

참고

만약 해당 가상 호스트에 연결된 웹 애플리케이션들이 있다면(즉, 해당 가상 호스트를 Target으로 deploy된 애플리케이션이 존재한다면) 해당 가상 호스트는 삭제되지 않는다. 이 경우에는 연결되어 있는 Target을 웹 애플리케이션에서 삭제해야 가상 호스트를 삭제할 수 있다. 웹 애플리케이션의 Target 삭제는 JEUS Applications & Deployment 안내서”의 “4.3.9. 서비스 중인 애플리케이션에서 서비스 중인 서버 삭제”를 참고한다.

콘솔 툴 사용

콘솔 툴을 사용하여 가상 호스트를 삭제하려면 다음과 같이 remove-virtual-host 명령을 수행한다. 명령에 대한 자세한 내용은 JEUS Reference Book”의 “4.2.8.31. remove-virtual-host”를 참고한다.