제2장 Deploy

내용 목차

2.1. Deployment Descriptor(DD)
2.2. 디렉터리 구조
2.3. Deploy 작업과 대상
2.4. 애플리케이션 Deploy

본 장에서는 디플로이의 작업, 대상 등 디플로이와 관련된 전반적인 사항에 대해 설명한다.

2.1. Deployment Descriptor(DD)

Java EE 애플리케이션은 EAR(Enterprise ARchive .ear 파일) 형태로 배포된다. 이 파일에는 EJB 모듈(EJB .jar 파일), 웹 애플리케이션 모듈(.war 파일), 리소스 어댑터 모듈(.rar 파일)과 기타 필요한 Java 클래스를 포함하고 있다. 또한 하나의 모듈로 구성된 Standalone 모듈도 Java EE 애플리케이션의 한 종류이다. 이러한 애플리케이션의 서비스들을 시작하기 위해 JEUS에 모듈 파일을 올리고 제어하는 모든 동작을 Deployment라고 한다.

애플리케이션 서버에 배치하기 위한 모듈 또는 애플리케이션을 생성하기 위해서는 DD가 필요하다. DD는 Java EE 표준 DD와 JEUS DD가 있다.

각 모듈과 애플리케이션에 필요한 DD는 다음과 같다.

[표 2.1] Deploy Descriptor(Deployment Descriptor)

 Java EE 표준 DDJEUS DD
애플리케이션application.xmljeus-application-dd.xml
EJB 모듈ejb-jar.xmljeus-ejb-dd.xml
웹 애플리케이션 모듈web.xmljeus-web-dd.xml
애플리케이션 클라이언트application-client.xmljeus-client-dd.xml
리소스 어댑터 모듈 ra.xmljeus-connector-dd.xml
웹 서비스webservices.xmljeus-webservices-dd.xml

각 모듈마다 Java EE 표준 DD 이외에 JEUS를 위한 DD를 별도로 가지고 있는 것처럼 Application Descriptor에 대해서도 이에 대응하는 jeus-application-dd.xml이 존재한다. 이 파일은 EAR의 META-INF에 위치한다. 또한 Standalone 모듈에서도 존재할 수 있는데, 웹 애플리케이션 모듈에 대해서는 모듈 Archive 내의 WEB-INF에 존재하고 다른 모듈에 대해서는 META-INF 내에 존재한다. 이 파일은 애플리케이션에 대한 정교한 설정을 하기 위해 사용한다. 만약 이 파일이 EAR이나 Standalone 모듈에 포함되어 있지 않으면 기본 설정으로 디플로이가 된다.

참고

Java EE 표준 DD에 대한 보다 자세한 내용은 Java EE 5의 스펙을 참고한다. 각 모듈에 해당하는 JEUS DD는 JEUS의 해당 안내서를 참고한다.

jeus-application-dd.xml은 jeus-main.xsd의 <application> 항목으로 정의되어 있으며, jeus-application-dd.xml의 예는 다음과 같다.

[예 2.1] <<jeus-application-dd.xml>>

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<application xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
    <name>myApp</name>
    <path>myApplication.ear</path>
    <deployment-type>EAR</deployment-type>
    <ejb-component>
        <uri>ejb.jar</uri>
        <fast-deploy>true</fast-deploy>
    </ejb-component>
    <web-component>
        <uri>web.war</uri>
        <context-root>/web</context-root>
    </web-component>
</application>

다음은 <application> 태그의 설정 항목에 대한 설명이다.

  • 기본 설정

    <application> 항목의 각 설정 중 기본적인 설정을 나열하면 다음과 같다.

    Element설명
    <path>

    애플리케이션의 경로를 설정한다.

    상대 경로일 경우 디플로이될 엔진 컨테이너의 webhome 애플리케이션 디렉터리에서의 상대 경로가 되고, 절대 경로일 경우 절대 경로 그대로 사용된다. 애플리케이션의 Archive 파일 경로가 오거나 그 Archive가 풀려진 디렉터리 경로가 올 수 있다.

    <deployment-type>

    애플리케이션의 타입을 지정한다. 이 타입에 따라 EAR 애플리케이션인지 Standalone 모듈인지가 결정된다.

    다음의 2가지 타입이 존재한다.

    • EAR: EAR 애플리케이션을 디플로이할 때 사용한다.

    • COMPONENT: Standalone 모듈을 디플로이할 때 사용한다.

  • 모듈 설정

    <application> 하위에는 애플리케이션에 포함된 각 모듈들의 설정이 들어간다. 이는 <client-component>, <ejb-component>, <connector-component>, <web-component> 등으로 설정된다. EAR 애플리케이션을 디플로이할 때 각 모듈에 대한 설정을 할 필요가 없다면 이 Element들을 설정하지 않아도 된다.

    하지만 Standalone 모듈의 경우에는 그 애플리케이션 모듈에 해당하는 Element가 항상 존재해야 한다.

    • 공통 설정

      태그설명
      <uri>

      Archive 파일 형태로 디플로이될 경우에는 해당 모듈의 Archive 파일 이름이 지정되고 디렉터리 형태로 디플로이될 경우에는 해당 모듈의 디렉터리 이름이 지정된다.

      Standalone 모듈의 경우에는 uri를 지정할 필요가 없다.

    • 세부 설정

      태그설명
      <auto-deploy>애플리케이션에 대해 Archive 파일이나 Java EE 표준 DD가 변경되었을 경우 자동적으로 Redeploy를 실행한다. 이에 대해서는 “제3장 애플리케이션 작성 및 Deploy”에서 설명한다.
      <class-ftp-unit>

      애플리케이션에 포함된 EJB 모듈의 클래스를 class ftp를 통해서 클라이언트에게 전달할 때의 단위로 CLASS와 JAR의 2가지 단위가 있다.

      (기본값: JAR)

      <security-domain>애플리케이션에서 사용할 JEUS security domain이다.
      <role-permission>애플리케이션 범위에서 사용할 principal-role mapping을 지정한다.
      <java-security-permission>J2SE security manager를 사용할 경우 이 애플리케이션에 할당할 permission들을 지정한다.
      <context-root>

      standalone 웹 모듈 또는 웹 모듈을 포함한 EAR 애플리케이션을 디플로이할 경우 <web-component>의 <context-root>를 통하여 <context-path>를 설정할 수 있는 기능을 제공한다. <context-path> 설정은 다음 파일에도 설정이 가능하고, 나열 순서로 우선순위를 갖는다.

      1. JEUSMain.xml의 <web-component>의 <context-root>

      2. jeus-application-dd.xml의 <web-component>의 <context-root>

      3. application.xml의 <context-root>

      4. jeus-web-dd.xml의 <context-path>

      WebAdmin 또는 jeusadmin을 통하여 동적으로 디플로이하는 경우 옵션으로 <context-root>를 지정할 수 있으며 이는 다른 것보다 우선순위가 높다. <context-path>에 대해서는 JEUS Web Container 안내서”의 “6.3.2. Deployment Descriptor(DD) 파일 설정”을 참고한다.

      참고

      1. <security-domain>, <role-permission>, <java-security-permission>에 대한 자세한 설명은 "JEUS Security 안내서"를 참고한다.

      2. <application> 하위 태그의 설정에 대한 자세한 설명은 "JEUS Reference Book"을 참고한다.

2.2. 디렉터리 구조

애플리케이션을 디플로이할 때 사용되는 디렉터리 구조는 다음과 같다.

[그림 2.1] JEUS 애플리케이션 디렉터리

JEUS 애플리케이션 디렉터리


JEUS가 설치된 JEUS_HOME 디렉터리에는 webhome의 app_home 디렉터리와 autodeploy 디렉터리가 존재한다.

app_home

JEUS가 application(archive 또는 directory)을 찾는 기본 디렉터리이다. -Djeus.apphome으로 대체 경로 설정이 가능하며 각 컨테이너는 JEUSMain.xml의 관련 설정을 통해 경로 대체 및 확장을 할 수 있다.

autodeploy

이 디렉터리로 Java EE 애플리케이션을 복사하면 자동으로 디플로이한다. 이 디렉터리는 시스템 프로퍼티 –Djeus.deploy.autodeploy.dir로 설정된다.

참고

JEUS 5에서 사용하던 deploy_home이 JEUS 6에서는 autodeploy로 변경되었다. 따라서 JEUS 6에서는 deploy_home을 사용할 수 없다.

2.3. Deploy 작업과 대상

일반적으로 Deploy 툴에서는 다음과 같은 Deploy 작업들을 지원하고 있다.

구분설명
Deploy디플로이에 필요한 파일들을 대상 서버(target server)로 복사하고, 애플리케이션을 실행시키는 작업이다.
Start대상 서버에 배포(distribute)되어 있는 애플리케이션을 동작시키는 작업이다.
Stop대상 서버에 배치되어 실행 중인 애플리케이션을 일시 정지시키는 작업이다. 이때 애플리케이션을 대상 서버에서 삭제하지 않는다. 또한 애플리케이션 이름으로 start하거나 Redeploy할 수도 있다.
Undeploy배치되어 실행 중인 애플리케이션을 정지시키고, 대상 서버에서 애플리케이션을 제거하는 작업이다.
Redeploy디플로이되어 실행 중인 애플리케이션을 내용이 변경되었을 경우, 변경된 내용을 현재 애플리케이션에 반영하여 다시 디플로이하는 작업이다. 모든 애플리케이션을 재배치할 때 디플로이 작업이 하나라도 실패하면, 모든 애플리케이션은 정지된다.

디플로이 대상은 Java EE 애플리케이션이나 Standalone 모듈을 배치할 서버이다. JEUS에서의 디플로이 대상은 다음과 같다.

  • 엔진 컨테이너

    JEUS에서 노드를 구성하는 핵심 요소가 바로 엔진 컨테이너(Engine Container)이다. 엔진 컨테이너는 Java EE 애플리케이션들의 실행을 책임지는 각 엔진(engine)들을 관리하는 책임이 있다. 따라서, JEUS에서는 기본적으로 엔진 컨테이너에 애플리케이션이나 Standalone 모듈을 배치할 수 있다. 즉, 엔진 컨테이너가 디플로이 대상(deployment target)이 될 수 있다.

    엔진 컨테이너는 JEUSMain.xml의 <node> 태그의 하위 태그인 <engine-container> 태그에 설정한다.

    엔진 컨테이너에 대한 자세한 내용은 JEUS Server 안내서”의 “1.4. 엔진 컨테이너”를 참고한다.

  • 클러스터

    JEUS에서는 노드(node)가 다른 노드들과 커넥션(connection)을 형성하고 있는 클러스터(Cluster)를 지원하고 있다. 즉, 각각의 노드에 속한 엔진 컨테이너들도 커넥션을 형성하고 있다. 따라서, 이런 클러스터 또한 디플로이 대상(deployment target)이 될 수 있다.

    JEUS 클러스터링에 대한 자세한 내용은 JEUS Server 안내서”의 “제4장 JEUS 클러스터링”을 참고한다.

  • 가상 호스트

    JEUS에서는 가상 호스트(virtual host)라는 개념을 도입해서 하나의 노드에 여러 개의 JEUS Manager가 실행되고 이들이 충돌 없이 클러스터링 될 수 있다. 즉, 노드 이름과 base port를 한 쌍의 identity로 사용하여 임의의 가상 노드명(virtual node name)을 지정하고, 이 가상 노드명을 실제 노드명처럼 사용하는 것이다.

    가상 호스트 내에서 엔진 컨테이너와 엔진을 일반 노드와 마찬가지로 설정할 수 있다. 따라서 가상 호스트 역시 디플로이 대상(deployment target)이 될 수 있다.

    참고

    가상 호스트에 대한 자세한 내용은 "JEUS Server 안내서"를 참고한다.

2.4. 애플리케이션 Deploy

JEUS에서는 크게 3가지 형태의 디플로이 방식을 지원하고 있다.

  • Runtime Deploy

    Runtime Deploy는 엔진이 기동되어 있는 상태에서 애플리케이션 또는 모듈을 디플로이하는 것이다. JEUS의 툴인 jeusadmin과 WebAdmin을 이용하여 Runtime Deploy를 할 수 있다.

    Runtime Deploy에 대한 자세한 내용은 “3.2. WebAdmin을 이용한 Deploy”“3.3. 콘솔 툴을 이용한 Deploy”를 참고한다.

  • Boot-time Deploy

    Boot-time Deploy는 애플리케이션을 JEUSMain.xml의 <application> 태그에 등록하여, 각 엔진이 시작할 때 등록된 애플리케이션들이 자동으로 디플로이되는 것을 말한다. JEUS의 툴인 jeusadmin과 WebAdmin을 이용하여 Boot-time Deploy를 할 수 있다.

    Boot-time Deploy에 대한 자세한 내용은 “3.2. WebAdmin을 이용한 Deploy”“3.3. 콘솔 툴을 이용한 Deploy”를 참고한다.

  • Auto Deploy

    Auto Deploy는 지정된 디렉터리 또는 애플리케이션을 주기적으로 검사하면서 변경된 내용이 있을 경우 자동으로 디플로이를 시도하는 기능이다. 이 기능을 사용하면 애플리케이션을 수동으로 디플로이할 필요가 없으므로 애플리케이션을 개발 중인 경우나 잦은 애플리케이션 업데이트가 필요한 경우 유용하게 사용할 수 있다. 보다 자세한 내용은 “3.5. Auto Deploy”에서 설명한다.