가상 호스트

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

1. 개요

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

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

2. 웹 엔진과 가상 호스트

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

사용 목적

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

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

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

figure basic idea behind virtual hosting
가상 호스트의 이용 패턴

위의 예제를 보면, 서로 다른 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"이다. 예약어이므로 다른 가상 호스트 이름으로 지정할 수 없다.

2.1. ServletContext 객체와 가상 호스트

Servlet API에는 javax.servlet.ServletContext.getContext(String contextPath)라는 메소드가 있다. "contextPath"에 의해 주어진 ServletContext 객체를 리턴한다. 이 메소드는 ServletContext가 속하는 가상 호스트에 존재하는 ServletContext를 리턴한다. 만약 해당 가상 호스트 내에 없으면 기본 가상 호스트에서 찾는다.

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

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

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

3.1. URL 매칭 예제

웹 엔진과 가상 호스트, 웹 컨텍스트 간의 유효한 관계의 예를 기반으로 각각의 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

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

3.2. URL 매칭 순서

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

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

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

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

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

4. 가상 호스트 설정

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

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

4.1. 추가

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

WebAdmin 사용

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

  1. WebAdmin 메인 화면에서 Master Server를 선택한 후 JEUS Master 화면 상단 메뉴에서 [서버]를 선택한다.

  2. 서버 화면의 목록에서 서버를 선택한 후 설정 화면에서 [Engine] > [Web Engine] > [Virtual Host] 메뉴를 선택한다.

    figure webmanager config virtualhost none
    가상 호스트 추가 (1)
  3. Virtual Host 화면에서 [추가] 버튼을 클릭하면 Virtual Host 추가 화면에서 가상 호스트 추가할 수 있다. 각 항목을 설정하고 [추가] 버튼을 클릭한다.

    figure webmanager config virtualhost add
    가상 호스트 추가 (2)

    image

    다음은 주요 설정 설정 항목에 대한 설명이다.

    항목 설명

    Virtual Host Name

    가상 호스트를 참조하기 위해 내부적으로 사용하는 이름이다.

    "DEFAULT_HOST"는 기본 가상 호스트의 이름이기 때문에 사용해서는 안 된다.

    Host Name

    도메인 이름 또는 IP 주소, 그리고 포트를 포함하는 문자열이다.

    Min

    Thread Pool의 최소 Thread 수이다. Thread Pool을 설정하게 되면, 해당하는 Context Thread Pool이 없을 경우에는 모든 요청이 Virtual Host 스레드 풀에서 요청을 처리하게 된다. 자세한 것은 스레드 풀을 참고한다.

    Max

    Thread Pool의 최대 Thread 수이다.

    Max Idle time

    Thread Pool의 Thread별 유후 대기 시간이다.

    Max Queue

    Thread Pool에서 처리할 작업들을 저장할 Queue의 Size이다.

    Properties

    가상 호스트별로 프로퍼티를 적용할 수 있다. JEUS에서 정의한 프로퍼티들도 적용 가능하다. 자세한 사항은 JEUS Reference 안내서의 웹 엔진 프로퍼티를 참고한다.

    Encoding

    가상 호스트별로 인코딩 옵션을 적용할 수 있다. 자세한 사항은 인코딩 설정을 참고한다.

    Cookie policy

    가상 호스트별로 cookie policy을 적용할 수 있다. 자세한 사항은 쿠키 정책 설정을 참고한다.

  4. 정상적으로 처리되면 저장이 완료 되었다는 결과와 가상 호스트 목록에 추가 된다.

    figure webmanager config virtualhost addresult
    가상 호스트 추가 - 추가 적용 결과
콘솔 툴 사용

콘솔 툴을 사용하여 가상 호스트를 추가하려면 다음과 같이 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 안내서의 add-virtual-host를 참고한다.

4.2. 수정

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

WebAdmin 사용

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

  1. WebAdmin 메인 화면에서 Master Server를 선택한 후 JEUS Master 화면 상단 메뉴에서 [서버]를 선택한다.

  2. 서버 화면의 목록에서 서버를 선택한 후 설정 화면에서 [Engine] > [Web Engine] > [Virtual Host]을 선택한다.

  3. Virtual Host 화면의 가상 호스트 목록에서 수정할 가상 호스트의 이름을 클릭한다. (가상 호스트 추가 - 추가 적용 결과 참고)

  4. Virtual Host 설정 화면에서 [수정] 버튼을 클릭한 후 설정 내용을 수정하고 [저장] 버튼을 클릭한다.

    figure webmanager config virtualhost modify
    가상 호스트 수정 - 기본 정보 수정
  5. [Access Log] 탭을 선택하면 가상 호스트별로 액세스 로그를 설정할 수 있다. 자세한 내용은 "가상 호스트별 액세스 로그 설정"을 참고한다.

    figure webmanager config virtualhost modify accesslog
    가상 호스트 수정 - Access Log 추가 설정
  6. [pipeline] 탭을 선택하면 가상 호스트별로 pipeline을 설정할 수 있다. 자세한 내용은 "가상 호스트별 액세스 로그 설정"을 참고한다.

    figure webmanager config virtualhost modify pipeline
    가상 호스트 수정 - pipeline 추가 설정
콘솔 툴 사용

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

4.3. 삭제

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

WebAdmin 사용

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

  1. WebAdmin 메인 화면에서 Master Server를 선택한 후 JEUS Master 화면 상단 메뉴에서 [서버]를 선택한다.

  2. 서버 화면의 목록에서 서버를 선택한 후 설정 화면에서 [Engine] > [Web Engine] > [Virtual Host]을 선택한다.

  3. Virtual Host 화면의 가상 호스트 목록에서 삭제할 가상 호스트의 [삭제] 버튼을 클릭한다. (가상 호스트 추가 - 추가 적용 결과 참고)

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

    figure webmanager config virtualhost delete
    가상 호스트 삭제 - 삭제 확인

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

콘솔 툴 사용

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