제4장 애플리케이션 작성 및 Deploy

내용 목차

4.1. 애플리케이션 작성
4.2. Deploy 명령
4.3. WebAdmin을 사용한 애플리케이션 제어 및 모니터링
4.3.1. 애플리케이션을 도메인에 Install
4.3.2. 도메인에서 애플리케이션 Uninstall
4.3.3. 애플리케이션 Deploy
4.3.4. 애플리케이션 Redeploy
4.3.5. 애플리케이션 Undeploy
4.3.6. 애플리케이션 시작
4.3.7. 애플리케이션 중지
4.3.8. 서비스 중인 애플리케이션에 서버 추가
4.3.9. 서비스 중인 애플리케이션에서 서비스 중인 서버 삭제
4.3.10. 애플리케이션 정보 확인
4.4. 콘솔 툴을 이용한 애플리케이션 제어 및 모니터링
4.4.1. 관련 명령어
4.4.2. 애플리케이션 Deploy
4.4.3. 애플리케이션 정보 확인
4.5. Staging Mode Deploy
4.6. Deployment Plan을 이용한 Deployment
4.6.1. Deployment Plan 설정 및 동작 방식
4.6.2. Deployment Plan Install
4.6.3. Install한 Deployment Plan 확인
4.6.4. Deployment Plan을 적용한 Deploy
4.6.5. 애플리케이션에 적용된 Deployment Plan 확인
4.6.6. Deployment Plan Uninstall
4.6.7. Deployment Plan Redeploy

본 장에서는 Java EE 애플리케이션 파일(EAR)을 작성하고 이를 JEUS에 deploy하는 방법에 대해 설명한다. 또한 JEUS에서 제공하는 애플리케이션을 deploy할 수 있는 툴을 사용하여 JEUS 서버에 애플리케이션을 deploy하는 방법과 그 외 관련된 작업에 대해 설명한다.

4.1. 애플리케이션 작성

본 절에서는 작성된 각각의 모듈을 포함하는 애플리케이션 작성 방법 중 jar 유틸리티를 사용해서 Java EE 애플리케이션을 직접 작성하는 방법에 대해서만 설명한다.

EAR 파일을 작성하기 전에, 우선 포함될 모듈을 작성해야 한다. EAR 파일에 포함되는 모듈은 EJB 모듈인 JAR 파일과 웹 애플리케이션 모듈인 WAR 파일, 리소스 어댑터 모듈인 RAR 파일 등이 있다. 모듈 파일을 작성하는 자세한 내용에 대해서는 각 해당 안내서에서 다루고 있으므로 해당 안내서를 참고한다.

다음은 애플리케이션 작성 환경에 대한 설명이다.

  • myApp.ear이라는 EAR 파일을 작성한다. 이 파일은 ejb.jar라는 EJB 모듈과 web.war라는 웹 애플리케이션 모듈, appclient.jar 애플리케이션 클라이언트 모듈을 포함하고 있다.

  • 애플리케이션 myApp.ear을 먼저 도메인의 DAS인 "adminServer"로 install하고, 서버 "server1"에 deploy한다.

다음의 순서로 애플리케이션을 작성한다.

  1. EAR 파일에 포함될 JAR, WAR, RAR 파일을 작성한다.

  2. JAR, WAR, RAR 파일과 같은 디렉터리에서 META-INF 디렉터리를 생성한다.

  3. application.xml 파일을 생성(EAR 파일의 모듈을 포함시킨다)해서 META-INF 디렉터리에 복사한다.

    다음은 application.xml의 예이다.

    <?xml version="1.0" encoding="UTF-8"?>
    <application version="6"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
            http://java.sun.com/xml/ns/javaee/application_6.xsd">
        <description>Application description</description>
        <display-name>Sample application</display-name>
        <module>
            <ejb>ejb.jar</ejb>
        </module>
        <module>
            <web>
                <web-uri>web.war</web-uri>
                <context-root>hello</context-root>
            </web>
        </module>
        <module>
            <java>appclient.jar</java>
        </module>
    </application>

  4. 다음과 같이 jar 유틸리티를 사용해서 명령을 실행하면 myApp.ear 파일이 생성된다.

    > jar cf myApp.ear ejb.jar web.war appclient.jar META-INF

    주의

    META-INF 디렉터리가 대문자인 것에 주의한다. 소문자로 작성할 경우에는 문제가 발생한다.

4.2. Deploy 명령

콘솔 툴, WebAdmin을 통해서 제공하는 Deploy 관련 툴에서는 다음과 같은 작업들을 지원한다. 해당 작업들은 DeploymentManager에서 수행 가능하다.

구분설명
Distribute애플리케이션 파일을 대상 서버나 클러스터로 복사하고, 애플리케이션을 서비스하기 위한 사전 작업을 한다. 대상으로 설정한 서버나 클러스터 중 하나라도 distribute에 실패하면 전체 작업을 실패로 간주하고 distribute에 성공한 서버에서 모두 undeploy한다.
Deploy

애플리케이션 파일을 대상 서버로 복사하고, 애플리케이션을 서비스하기 위한 사전 작업을 한다. 이 작업이 성공하면 애플리케이션을 실행시킨다. 대상으로 설정한 서버나 클러스터 중 하나라도 distribute에 실패하면 전체 작업을 실패로 간주하고 distribute에 성공한 서버에서 모두 undeploy한다.

Start 작업에서 실패한 서버가 있더라도 하나라도 서비스 가능한 상태가 있으면 애플리케이션 Start 작업은 성공이다.

Start대상 서버에 distribute(배포)되어 있는 애플리케이션을 동작시키는 작업이다. Start 작업에서 실패한 서버가 있더라도 하나라도 서비스 가능한 상태가 있으면 애플리케이션 Start 작업은 성공이다.
Stop대상 서버에 배치되어 실행 중인 애플리케이션을 일시정지시키는 작업이다. 이때 애플리케이션을 대상 서버에서 삭제하지 않는다. 또한 애플리케이션 이름으로 start하거나 redeploy할 수도 있다.
Undeploy배치되어 실행 중인 애플리케이션을 정지시키고, deploy되어 있는 대상 서버나 클러스터에서 애플리케이션을 제거하는 작업이다.
Redeploy

deploy되어 실행 중인 애플리케이션의 내용이 변경된 경우에 그 내용을 현재 애플리케이션에 반영하여 다시 deploy하는 작업이다.

모든 애플리케이션을 재배치할 때 Deploy 작업이 하나라도 실패하면 모든 애플리케이션은 정지된다.

다음 작업들은 JEUS에서만 제공하는 Deploy 작업이다. 이 작업은 콘솔 툴이나 WebAdmin을 통해서만 해야 한다.

구분설명
Add Application Target

deploy나 distribute된 애플리케이션에 대상으로 특정 서버 또는 클러스터를 추가한다. 이미 서비스되고 있는 애플리케이션을 서비스하는 대상을 확장하려고 할 때 사용하는 작업이다.

대상은 여러 서버 또는 여러 클러스터를 설정할 수 있고, 이 작업이 대상으로 설정한 서버나 클러스터에서 실패한 경우 전체 작업 실패로 간주하고 기존에 서비스되고 있던 서버를 제외한 새로 추가하려는 서버에서는 모두 undeploy된다.

Remove Application Target

deploy나 distribute된 애플리케이션에서 대상으로 설정된 특정 서버 또는 클러스터를 삭제한다. 이미 서비스되고 있는 애플리케이션을 서비스하는 대상을 축소하려고 할 때 사용하는 작업이다.

대상은 여러 서버 또는 여러 클러스터를 설정할 수 있다.

4.3. WebAdmin을 사용한 애플리케이션 제어 및 모니터링

WebAdmin은 JEUS를 전반적으로 관리하기 위해 제공되는 웹 기반의 관리 툴이다.

WebAdmin의 왼쪽 메뉴에서 [Applications]를 선택하면 도메인에 존재하는 애플리케이션을 관리할 수 있는 Deployed Application 화면으로 이동한다. WebAdmin에서 애플리케이션을 deploy하거나 새로운 애플리케이션을 도메인에 install할 때 또는 도메인에 존재하는 애플리케이션의 정보를 조회할 때 모두 이 화면에서부터 시작해야 한다.

[그림 4.1] WebAdmin Deployed Application 화면

WebAdmin Deployed Application 화면

이제 WebAdmin을 통해 앞장에서 살펴본 myApp.ear 애플리케이션을 도메인에 install, deploy, 조회하는 방법에 대해 살펴보기로 한다.

주의

애플리케이션을 제어하는 작업(deploy, distribute, undeploy, start, stop)은 도메인에 설정변경 Lock을 가져오지 않은 상태에서만 가능하다. 만약 [Lock & Edit] 버튼을 통해 Lock을 가져온 상태라면 [Activate changes] 버튼을 선택하여 변경 중인 모든 설정을 반영하거나, [Undo all changes] 메뉴를 선택하여 변경했던 설정을 취소하고 난 후 애플리케이션 제어 작업을 진행해야 한다.

4.3.1. 애플리케이션을 도메인에 Install

다음은 애플리케이션을 도메인에 install하는 과정에 대한 설명이다.

  1. WebAdmin의 왼쪽 메뉴에서 [Applications]를 선택하면 Deployed Application 화면으로 이동한다. 해당 화면에서 도메인에 존재하는 애플리케이션의 정보를 확인할 수 있다.

    애플리케이션 목록 상단에 위치한 [install] 버튼을 클릭하면 도메인에 새로운 애플리케이션을 install할 수 있는 화면으로 이동한다.

  2. [Install] 버튼을 클릭하면 나타나는 화면에서 애플리케이션 ID와 애플리케이션 파일의 경로 등의 install 관련 정보를 입력하고 [확인] 버튼을 클릭한다.

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

    항목설명
    Idinstall할 애플리케이션에 부여할 ID를 지정한다. 이 값을 주지 않은 경우에는 애플리케이션 파일 이름을 변경하여 ID로 사용한다. 애플리케이션 ID는 입력하지 않아도 만들어 주지만, 관리의 편의상 입력하는 것을 권장한다.
    Pathinstall할 애플리케이션 파일의 경로를 입력한다. [찾아보기] 버튼으로 애플리케이션 파일을 선택할 수 있다.
    Force동일한 ID를 가진 애플리케이션이 이미 도메인에 존재할 경우 덮어쓸지 여부를 설정한다. 이미 deploy되어 있는 애플리케이션 내용이 변경되어 파일을 업데이트해야 하는 경우에 사용할 수 있다.
    UpgradeJEUS 6.x 이하 버전의 JEUS DD를 사용하는 경우 JEUS 7.x에 맞는 DD로 변경할지 여부를 설정한다.

  3. install 작업을 마치고 나면 화면 상단에 그 결과가 나타난다. 명령이 성공적으로 수행되었다면 애플리케이션 목록에서 해당 애플리케이션을 확인할 수 있다. 이때 애플리케이션은 INSTALLED 상태가 된다.

4.3.2. 도메인에서 애플리케이션 Uninstall

애플리케이션이 도메인에 더 이상 사용되지 않는다면 도메인에서 삭제할 수 있다. 애플리케이션이 INSTALLED 상태이거나 DEPLOYED 상태인 경우에 애플리케이션에 Uninstall 작업을 할 수 있다.

다음은 애플리케이션을 도메인에서 Uninstall하는 과정에 대한 설명이다.

  1. WebAdmin의 왼쪽 메뉴에서 [Applications]를 선택하면 Deployed Application 화면으로 이동한다. 도메인에서 삭제하려고 하는 애플리케이션을 선택하고 애플리케이션 목록 하단에 위치한 [uninstall] 버튼을 클릭한다.

  2. [uninstall] 버튼을 클릭한 뒤 나타나는 팝업에서 [확인] 버튼을 클릭하면 애플리케이션 Uninstall 작업이 진행된다. [취소] 버튼을 클릭하면 작업은 취소되고, 애플리케이션은 그대로 INSTALLED 상태로 남아있게 된다.

  3. Uninstall 작업이 완료되면 화면 상단에 그 결과가 나타난다. 명령이 성공적으로 수행되었다면 애플리케이션 목록에서 해당 애플리케이션에 대한 정보는 확인할 수 없다.

4.3.3. 애플리케이션 Deploy

install된 애플리케이션에 deploy 명령을 통해 애플리케이션이 서비스되도록 한다. 본 절에서는 애플리케이션을 deploy하는 3가지 방법에 대해 설명한다.

  • 도메인에 install한 애플리케이션 Deploy

  • 애플리케이션 저장소에 있는 애플리케이션 Deploy

  • path를 지정하여 Deploy

도메인에 install한 애플리케이션 Deploy

다음은 WebAdmin에서 도메인에 install한 애플리케이션을 deploy하는 과정에 대한 설명이다.

  1. WebAdmin의 왼쪽 메뉴에서 [Applications]를 선택하면 Deployed Application 화면으로 이동한다. 애플리케이션 목록에서 deploy하고자 하는 애플리케이션을 체크박스에서 선택하고, 애플리케이션 목록 하단에 위치한 [deploy] 버튼을 클릭한다.

  2. 'Server' 항목에서 deploy할 대상 서버를 선택하고 [확인] 버튼을 클릭하면 애플리케이션 Deploy가 진행된다.

    만약 Deploy가 아니라 distribute까지만 진행하고 싶다면 고급 선택사항'Only Distribute' 항목을 체크하고 [확인] 버튼을 클릭한다. 이 경우 애플리케이션을 서비스하기 위해서는 별도로 애플리케이션 Start 작업이 필요하다.

  3. Deploy 작업이 완료되면 화면 상단에 그 결과가 나타난다. 명령이 성공적으로 수행되었다면 애플리케이션 목록에서 보여지는 해당 애플리케이션의 상태는 RUNNING이 된다. distribute만 진행했다면 애플리케이션의 상태는 DISTRIBUTED가 된다.

애플리케이션 저장소에 있는 애플리케이션 Deploy

애플리케이션 저장소를 추가하고 나면 저장소에 존재하는 애플리케이션을 deploy한다. 애플리케이션 저장소의 기능과 저장소를 추가, 삭제하는 방법에 대한 자세한 내용은 “1.5.1. 애플리케이션 저장소 추가/삭제/조회”를 참고한다.

애플리케이션 저장소에 위치하는 애플리케이션을 Deploy 하는 방법은 도메인에 install된 애플리케이션을 deploy하는 것과 동일하다. 애플리케이션 Deploy 작업이 완료되면 화면 상단에 그 결과가 나타나고, 명령이 성공적으로 수행되었다면 애플리케이션 목록에서 보여지는 해당 애플리케이션의 상태는 RUNNING이 된다.

path를 지정하여 Deploy

다음은 상위 디렉터리를 애플리케이션 저장소로 추가할 수 없는 경우에 path 옵션을 설정하고 deploy하는 방법에 대한 설명이다. DAS가 존재하는 머신에 있는 애플리케이션의 절대 경로를 설정하고 deploy하는 기능에 대한 자세한 내용은 “1.6. path를 지정하여 Deploy”를 참고한다.

다음은 WebAdmin으로 path를 지정하여 deploy하는 방법에 대한 설명이다.

  1. WebAdmin의 왼쪽 메뉴에서 [Applications]를 선택하면 Deployed Application 화면으로 이동한다. 애플리케이션 목록 상단에 위치한 [deploy] 버튼을 클릭하면 도메인에 새로운 애플리케이션을 deploy할 수 있는 화면으로 이동한다.

  2. 'Path' 항목에 deploy할 애플리케이션이 위치하는 절대경로를 입력한다. [입력] 버튼을 클릭하면 DAS에 존재하는 애플리케이션의 경로를 선택할 수 있다.

    'Server' 항목에서 deploy할 대상 서버인 'server1'을 선택하고 [확인] 버튼을 클릭하면 애플리케이션 Deploy가 진행된다.

    필요하다면 고급 선택사항 영역에서 Deploy 옵션을 설정할 수 있다.

  3. Deploy 작업을 마치고 나면 화면 상단에 그 결과가 나타난다. 명령이 성공적으로 수행되었다면 애플리케이션 목록에서 보여지는 해당 애플리케이션의 상태는 RUNNING이 된다.

4.3.4. 애플리케이션 Redeploy

애플리케이션이 수정되면 deploy 명령을 통해 애플리케이션이 서비스되도록 할 수 있다. 자세한 내용은 “2.2. Graceful Redeployment”를 참고한다.

다음은 애플리케이션 Redeploy 과정에 대한 설명이다.

  1. WebAdmin의 왼쪽 메뉴에서 [Applications]를 선택하면 Deployed Application 화면으로 이동한다. 애플리케이션 목록에서 redeploy하고자하는 애플리케이션을 선택하고, 목록 오른쪽에 위치 [redeploy] 버튼을 클릭한다.

  2. 'Timeout' 항목에 Graceful Redeploy Timeout과 그외 필요한 Redeploy 옵션을 설정하고 [확인] 버튼을 클릭하면 애플리케이션 redeploy가 진행된다.

  3. Redeploy 작업이 완료되면 화면 상단에 그 결과가 나타난다.

4.3.5. 애플리케이션 Undeploy

도메인에서 서비스되고 있는 애플리케이션 서비스를 중단하고 애플리케이션을 내리려면 undeploy 명령을 통해 가능하다.

다음은 애플리케이션을 undeploy하는 과정에 대한 설명이다.

  1. WebAdmin의 왼쪽 메뉴에서 [Applications]를 선택하면 Deployed Application 화면으로 이동한다. 애플리케이션 목록에서 undeploy하려고 하는 애플리케이션을 체크박스에서 선택하고, 애플리케이션 목록 하단에 위치한 [undeploy] 버튼을 클릭한다.

  2. 'Timeout' 항목을 설정해서 애플리케이션이 처리 중인 서비스를 보장해주도록 할 수 있다. 아무 옵션도 설정하지 않으면 5분(300초) 동안 애플리케이션은 처리 중인 요청이 모두 완료될 때까지 undeploy를 진행하지 않는다. Graceful Undeploy를 위해 Timeout을 설정하고 [확인] 버튼을 클릭하면 undeploy가 진행된다. 애플리케이션의 Graceful Undeploy에 대한 설명은 “2.1. Graceful Undeployment”를 참고한다.

  3. Undeploy 작업이 완료되면 화면 상단에 그 결과가 나타난다. 명령이 성공적으로 수행되었다면 애플리케이션 목록에서 보여지는 해당 애플리케이션의 상태는 INSTALLED가 된다.

4.3.6. 애플리케이션 시작

애플리케이션을 deploy할 때 'Only Distribute' 옵션을 주고 distribute만 수행했거나, 서비스 중인 애플리케이션을 stop 명령을 수행하여 DISTRIBUTED 상태인 애플리케이션을 다시 서비스하도록 하려면 Start 작업을 수행해야 한다.

다음은 중지된 애플리케이션이 서비스를 시작하도록 하는 과정(start)에 대한 설명이다.

  1. WebAdmin의 왼쪽 메뉴에서 [Applications]를 선택하면 Deployed Application 화면으로 이동한다. 애플리케이션 목록에서 서비스를 시작하려고 하는 DISTRIBUTED 상태인 애플리케이션을 체크박스에서 선택하고, 애플리케이션 목록 하단에 위치한 [start] 버튼을 클릭한다.

  2. 애플리케이션 Start 작업이 완료되면 화면 상단에 그 결과가 나타난다. 명령이 성공적으로 수행되었다면 애플리케이션 목록에서 보여지는 해당 애플리케이션의 상태는 RUNNING이 된다.

4.3.7. 애플리케이션 중지

서비스 중인 애플리케이션에 stop 명령을 수행하여 애플리케이션 서비스를 잠시 중지할 수 있다.

다음은 애플리케이션이 서비스를 중지하는 과정(stop)에 대한 설명이다.

  1. WebAdmin의 왼쪽 메뉴에서 [Applications]를 선택하면 Deployed Application 화면으로 이동한다. 애플리케이션 목록에서 서비스를 중지하려고 하는 애플리케이션을 체크박스에서 선택하고, 애플리케이션 목록 하단에 위치한 [stop] 버튼을 클릭한다.

  2. [stop] 버튼을 누르면 나타나는 팝업화면에서 [확인] 버튼을 클릭하면 애플리케이션의 서비스가 중지되어 이후에 들어오는 요청에 대해서는 처리되지 않는다. [취소] 버튼을 클릭하면 애플리케이션 서비스 중지 작업은 취소된다.

  3. 애플리케이션 Stop 작업이 완료되면 화면 상단에 그 결과가 나타난다. 명령이 성공적으로 수행되면 애플리케이션 목록에서 보여지는 해당 애플리케이션의 상태는 DISTRIBUTED가 된다.

4.3.8. 서비스 중인 애플리케이션에 서버 추가

애플리케이션 서비스를 확장하기 위해 애플리케이션을 서비스할 대상에 서버나 클러스터를 추가하는 기능을 제공한다. 이미 도메인에 존재하는 애플리케이션을 특정 서버에만 deploy할 수는 없기 때문에 서비스 대상을 추가(add-target)하는 별도의 명령을 지원한다. 애플리케이션에 서비스 대상을 추가하는 명령(add-target)은 애플리케이션이 RUNNING 상태이거나 DISTRIBUTED 상태일 때 가능하다.

참고

애플리케이션 서비스 대상에 서버를 추가하려면 서버가 하나 더 존재해야 한다. 서버를 추가하는 방법은 JEUS Server 안내서”의 “2.2. 서버 추가”를 참고한다.

다음은 서비스 중인 애플리케이션에 서버를 추가하는 과정에 대한 설명이다.

  1. WebAdmin의 왼쪽 메뉴에서 [Applications]를 선택하면 Deployed Application 화면으로 이동한다. 애플리케이션 목록에서 애플리케이션을 서비스하는 서버를 추가하기 위해 애플리케이션을 선택하고, 목록 오른쪽에 위치한 [add-target] 버튼을 클릭한다.

  2. 'Server' 항목에서 애플리케이션서비스 대상에 추가할 서버를 선택하고 [확인] 버튼을 클릭하면 해당 서버에 애플리케이션 Deploy가 진행된다.

  3. Deploy 대상 추가 작업이 완료되면 화면 상단에 그 결과가 나타난다.

  4. 명령이 성공적으로 수행되었다면 애플리케이션 목록에서 해당 애플리케이션을 선택하여 'Server''Running Servers' 항목에 선택한 서버가 추가되어 있는 것을 확인할 수 있다.

4.3.9. 서비스 중인 애플리케이션에서 서비스 중인 서버 삭제

애플리케이션 서비스를 축소하기 위해 애플리케이션을 서비스하고 있는 대상에서 서버나 클러스터를 삭제하는 기능을 제공한다. 이미 도메인에 존재하는 애플리케이션을 특정 서버에만 undeploy할 수 없기 때문에 서비스 대상을 삭제(remove-target)하는 별도의 명령을 지원한다. 애플리케이션에 서비스 대상을 삭제하는 명령은 애플리케이션이 RUNNING 상태 또는 DISTRIBUTED 상태일 때 가능하다.

다음은 서비스 중인 애플리케이션에서 서비스 중인 서버를 삭제하는 과정에 대한 설명이다.

  1. WebAdmin의 왼쪽 메뉴에서 [Applications]를 선택하면 Deployed Application 화면으로 이동한다. 애플리케이션 목록에서 서비스를 중지하려고하는 애플리케이션을 선택하고, 목록 오른쪽에 위치한 [remove-target] 버튼을 클릭한다.

  2. 'Servers' 항목에서 더 이상 애플리케이션 서비스를 하지 않은 서버를 선택하고 [확인] 버튼을 클릭하면 해당 서버에만 애플리케이션 Undeploy가 진행된다.

  3. 애플리케이션 서비스 대상 삭제 작업이 완료되면 화면 상단에 그 결과가 나타난다.

  4. 명령이 성공적으로 수행되었다면 애플리케이션 목록에서 해당 애플리케이션을 선택하여 'Server''Running Servers' 항목에 선택한 서버가 삭제된 것을 확인할 수 있다.

4.3.10. 애플리케이션 정보 확인

WebAdmin에서는 애플리케이션에 대해서 다음의 두 가지의 정보를 확인할 수 있다.

  • 애플리케이션이 어떻게 deploy되어 있는가?

  • 애플리케이션이 어떻게 구성되어 있는가?

애플리케이션의 Deploy 정보 확인

애플리케이션이 어떤 서버나 클러스터에 어떤 속성으로 deploy되어 있는지를 확인할 수 있다.

다음은 WebAdmin에서 애플리케이션의 Deploy 정보를 확인하는 방법이다.

  1. WebAdmin의 왼쪽 메뉴에서 [Applications]를 선택하면 Deppoyed Application 화면으로 이동한다. 애플리케이션 목록에서 애플리케이션 ID를 클릭하면 애플리케이션 정보를 확인할 수 있다.

  2. 확인할 수 있는 정보는 애플리케이션의 ID, 애플리케이션이 DAS 상 위치하고 있는 경로, 애플리케이션 타입, 그리고 JEUS에서 제공하는 deploy할 때 설정하는 옵션 정보들이다. deploy 옵션에 대한 자세한 설명은 WebAdmin에서 항목 설명이나 JEUS Reference Book”의 “4.2.6.4. deploy-application”을 참고한다.

애플리케이션 구성 모듈 정보 확인

애플리케이션이 어떻게 구성되어 있는지 실제 애플리케이션의 모듈 정보를 확인할 수 있다.

EAR일 경우에는 EAR 애플리케이션을 구성하고 있는 모듈 리스트를 확인할 수 있다. 애플리케이션을 구성하는 모듈 중 하나를 선택하면 해당 모듈에 대한 자세한 구성 정보를 확인할 수 있다. 이 정보는 EJB나 웹 모듈에 대해서만 확인 가능하다.

EJB 모듈을 선택하면 EJB Bean 리스트를 확인할 수 있고, 웹 모듈을 선택하면 서블릿 리스트를 확인할 수 있다.

WebAdmin의 왼쪽 메뉴에서 [Applications]를 선택하면 Deppoyed Application 화면으로 이동한다. 애플리케이션 목록에서 애플리케이션 ID를 클릭하면 다음과 같이 deploy된 애플리케이션 정보를 확인할 수 있다.

[그림 4.2] WebAdmin에서 애플리케이션의 Deploy 정보 확인

WebAdmin에서 애플리케이션의 Deploy 정보 확인


애플리케이션 Deploy 정보 화면에서 애플리케이션 정보의 'Running Servers'에서 특정 서버를 클릭하면 애플리케이션 구성 정보를 확인할 수 있다.

[그림 4.3] WebAdmin에서 애플리케이션의 구성 정보 확인

WebAdmin에서 애플리케이션의 구성 정보 확인

EAR 애플리케이션인 경우에는 위와 같이 애플리케이션을 구성하는 모듈 리스트를 확인할 수 있을 뿐만 아니라 애플리케이션을 구성하고 있는 EJB 모듈과 WEB 모듈의 정보도 확인할 수 있다.

참고

모듈의 정보는 EJB나 WEB일 경우에만 확인할 수 있다. 클라이언트 모듈이나 리소스 모듈인 경우에는 모듈 정보를 확인하는 기능을 제공하지 않는다.

  • EJB 모듈 정보 확인

    다음은 EAR 애플리케이션인 myApp를 구성하는 EJB 모듈 'ejb'에 대한 정보를 확인하는 방법이다.

    1. 애플리케이션 myApp의 모듈 목록에서 'ejb'를 선택하면 EJB 모듈을 구성하고 있는 Bean 리스트를 확인할 수 있다.

      [그림 4.4] WebAdmin에서 EJB 모듈 정보 확인

      WebAdmin에서 EJB 모듈 정보 확인


    2. 모듈 'ejb'의 Bean 목록에서 'HelloBean'을 선택하면 HelloBean의 세부 정보를 확인할 수 있다.

      [그림 4.5] WebAdmin에서 EJB 모듈의 Bean 정보 확인

      WebAdmin에서 EJB 모듈의 Bean 정보 확인


  • WEB 모듈 정보 확인

    다음은 EAR 애플리케이션인 myApp를 구성하고 있는 WEB 모듈 'web'에 대한 정보를 확인하는 방법이다.

    1. 애플리케이션 myApp의 모듈 목록에서 'web'을 선택하면 웹 모듈을 구성하고 있는 서블릿 리스트를 확인할 수 있다.

      [그림 4.6] WebAdmin에서 WEB 모듈의 서블릿 정보 확인

      WebAdmin에서 WEB 모듈의 서블릿 정보 확인


    2. 'Command' 컬럼의 [thread-info] 버튼을 클릭하면 WEB 모듈의 요청 스레드에 대한 정보를 확인할 수 있다.

      [그림 4.7] WebAdmin에서 WEB 모듈의 서블릿 요청 스레드 정보 확인

      WebAdmin에서 WEB 모듈의 서블릿 요청 스레드 정보 확인


4.4. 콘솔 툴을 이용한 애플리케이션 제어 및 모니터링

본 절에서는 콘솔 툴 명령어 중 애플리케이션 Deploy에 관련된 명령어와 이를 통해 애플리케이션을 deploy하는 방법에 대해서 설명한다.

4.4.1. 관련 명령어

JEUS를 직접 관리할 수 있는 콘솔 툴을 통해 DAS에 연결하여 서버나 클러스터의 제어 및 모니터링을 할 수 있으며, 애플리케이션을 deploy할 수도 있다.

다음은 콘솔 툴에서 사용하는 애플리케이션의 Deploy 관련 명령어이다.

[표 4.1] 애플리케이션 관련 명령어

명령어설명
distribute-application애플리케이션을 deploy할 수 있도록 배치 대상에 애플리케이션을 복사하고, 애플리케이션 서비스를 위한 사전 준비작업을 한다.
deploy-application

애플리케이션을 deploy한다.

Deploy란 Deploy 대상에 애플리케이션을 복사하고(Distribute), 애플리케이션의 서비스를 시작(Start)하는 것이다.

Deploy가 성공적으로 완료되면 RUNNING 상태가 되며, Distribute 완료 후 서비스 단계에서 장애가 발생하면 DISTRIBUTED 상태에 머물러 있다.

start-applicationDISTRIBUTED 상태에 있는 애플리케이션을 실행한다. 작업이 수행되는 동안에는 STARTING 상태로 성공적으로 완료되면 RUNNING 상태가 된다.
stop-applicationRUNNING 상태에 있는 애플리케이션을 정지한다. 작업이 수행되는 동안에는 STOPPING 상태로 성공적으로 완료되면 DISTRIBUTED 상태가 된다.
redeploy-applicationDeploy가 완료된 애플리케이션에 변경된 내용이 있는 경우 변경 내용을 반영하여 다시 deploy한다. Deploy와 같은 단계로 이루어지며 각 단계에서의 상태 또한 같다.
undeploy-application애플리케이션 서비스를 종료하고 배치 대상에서 애플리케이션을 제거한다.
application-info도메인에 존재하는 애플리케이션의 정보를 출력한다.
add-application-targetdeploy되어 있는 애플리케이션에 서비스 대상을 추가한다. 서비스 대상은 서버나 클러스터가 될 수 있다.
remove-application-targetdeploy되어 있는 애플리케이션에서 서비스 대상을 삭제한다. 서비스 대상은 서버나 클러스터가 될 수 있다.

참고

콘솔 툴에 대한 설명 및 각 명령어에 대한 자세한 내용은 JEUS Reference Book”의 “4.2. jeusadmin”을 참고한다.

4.4.2. 애플리케이션 Deploy

콘솔 툴을 통한 Run-time Deploy 방법은 다음의 사항을 가정하여 설명한다.

  • 애플리케이션은 “4.1. 애플리케이션 작성”에서 작성한 myApp.ear을 사용한다.

  • JEUS의 도메인 이름은 'domain1'이고, 애플리케이션을 deploy할 서버는 'server1'이다.

참고

deploy-application 명령을 수행할 때 사용할 수 있는 옵션에 대한 자세한 내용은 JEUS Reference Book”의 “4.2.6.4. deploy-application”을 참고한다.

JEUS에서는 콘솔 툴에서 애플리케이션을 Run-time Deploy할 경우 애플리케이션의 위치에 따라 다음의 3가지 방법을 제공한다. 각 방법은 deploy, stop, start, redeploy, undeploy의 순서대로 deploy 명령어를 실행하며, 각 명령어를 실행한 뒤에는 applist를 수행하여 각 단계에서의 애플리케이션 상태를 확인한다.

  • 도메인에 install한 애플리케이션 Deploy

  • 애플리케이션 저장소에 있는 애플리케이션 Deploy

  • path를 지정하여 Deploy

도메인에 install한 애플리케이션 Deploy

install-application 명령을 통해 애플리케이션을 도메인에 install하여 INSTALL_HOME(DOMAIN_HOME/.applications)에 위치시킨다. 이때 애플리케이션의 ID를 옵션으로 줄 수 있다. ID를 주지 않은 경우는 myApp_ear이 애플리케이션의 ID가 된다. 애플리케이션이 도메인에 install되고 난 후에 deploy-application 명령어를 사용해 대상 서버에 애플리케이션을 deploy한다.

[예 4.1] 콘솔 툴에서 도메인에 install한 애플리케이션 Deploy

----------------------------------------------------------------
 using deploy command for application with install application
----------------------------------------------------------------
[DAS]domain1.adminServer>install-application -id myApp /usr/apphome/myApp.ear
Successfully installed the application [myApp].

[DAS]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+-----------+-------+----------+-----------+------------------------+
| Applicati|Application| State |  Server  |  Cluster  |    Application Path    |
|  on ID   |   Type    |       | Targets  |  Targets  |                        |
+----------+-----------+-------+----------+-----------+------------------------+
| myApp    |           | INSTAL|          |           | ${INSTALL_HOME}/myApp/m|
|          |           |LED    |          |           |yApp.ear                |
+----------+-----------+-------+----------+-----------+------------------------+
================================================================================

[DAS]domain1.adminServer>deploy myApp -servers server1
deploy the application for the application [myApp] succeeded.

[DAS]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+------------+---------+----------+-----------+---------------------+
| Applicati| Application|  State  |  Server  |  Cluster  |   Application Path  |
|  on ID   |    Type    |         | Targets  |  Targets  |                     |
+----------+------------+---------+----------+-----------+---------------------+
| myApp    | EAR        | RUNNING | server1  |           | ${INSTALL_HOME}/myAp|
|          |            |         |          |           |p/myApp.ear          |
+----------+------------+---------+----------+-----------+---------------------+
================================================================================

[DAS]domain1.adminServer>stop-application myApp
stop the application for the application [myApp] succeeded.

[DAS]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+-----------+--------+----------+----------+------------------------+
| Applicati|Application|  State |  Server  |  Cluster |    Application Path    |
|  on ID   |   Type    |        | Targets  | Targets  |                        |
+----------+-----------+--------+----------+----------+------------------------+
| myApp    | EAR       | DISTRIB| server1  |          | ${INSTALL_HOME}/myApp/m|
|          |           |UTED    |          |          |yApp.ear                |
+----------+-----------+--------+----------+----------+------------------------+
================================================================================

[DAS]domain1.adminServer>start-application myApp
start the application for the application [myApp] succeeded.

[DAS]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+------------+---------+----------+-----------+---------------------+
| Applicati| Application|  State  |  Server  |  Cluster  |   Application Path  |
|  on ID   |    Type    |         | Targets  |  Targets  |                     |
+----------+------------+---------+----------+-----------+---------------------+
| myApp    | EAR        | RUNNING | server1  |           | ${INSTALL_HOME}/myAp|
|          |            |         |          |           |p/myApp.ear          |
+----------+------------+---------+----------+-----------+---------------------+
================================================================================

[DAS]domain1.adminServer>redeploy-application myApp
redeploy application on das for the application [myApp] succeeded.

[DAS]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+------------+---------+----------+-----------+---------------------+
| Applicati| Application|  State  |  Server  |  Cluster  |   Application Path  |
|  on ID   |    Type    |         | Targets  |  Targets  |                     |
+----------+------------+---------+----------+-----------+---------------------+
| myApp    | EAR        | RUNNING | server1  |           | ${INSTALL_HOME}/myAp|
|          |            |         |          |           |p/myApp.ear          |
+----------+------------+---------+----------+-----------+---------------------+
================================================================================

[DAS]domain1.adminServer>undeploy myApp
Undeploying [myApp] (This may take time due to graceful undeployment) ..........
undeploy the application for the application [myApp] succeeded.
successfully undeployed (elapsed = 415ms)

[DAS]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+-----------+-------+----------+-----------+------------------------+
| Applicati|Application| State |  Server  |  Cluster  |    Application Path    |
|  on ID   |   Type    |       | Targets  |  Targets  |                        |
+----------+-----------+-------+----------+-----------+------------------------+
| myApp    | EAR       | INSTAL|          |           | ${INSTALL_HOME}/myApp/m|
|          |           |LED    |          |           |yApp.ear                |
+----------+-----------+-------+----------+-----------+------------------------+
================================================================================

[DAS]domain1.adminServer>uninstall-application myApp
uninstall the application for the application [myApp] succeeded. : Successfully deleted [myApp].

[DAS]domain1.adminServer>application-info
No applications exist in this domain.
Application information for the domain [domain1].
================================================================================
+------------+---------------+-------+------------+-------------+--------------+
| Application|  Application  | State |   Server   |   Cluster   |  Application |
|     ID     |     Type      |       |  Targets   |   Targets   |     Path     |
+------------+---------------+-------+------------+-------------+--------------+
(No data available)
================================================================================


애플리케이션 저장소에 있는 애플리케이션 Deploy

애플리케이션 저장소를 추가하고 나면 저장소에 존재하는 애플리케이션을 deploy한다. 애플리케이션 저장소의 기능과 저장소를 추가, 삭제하는 방법에 대한 자세한 내용은 “1.5.1. 애플리케이션 저장소 추가/삭제/조회”를 참고한다.

다음은 콘솔 툴을 사용해서 애플리케이션 저장소에 있는 애플리케이션 deploy하는 예제이다.

[예 4.2] 콘솔 툴에서 애플리케이션 저장소에 있는 애플리케이션 Deploy

[DAS]domain1.adminServer>add-application-repository /home/ckek81/apps
Successfully performed the ADD operation for An application repository.
Check the results using "add-application-repository or list-application-repositories"

[DAS]domain1.suok>list-application-repositories
Application Repositories
================================================================================
+------------------------------------------------------------------------------+
|                        Path to Application Repository                        |
+------------------------------------------------------------------------------+
| /home/ckek81/apps                                                            |
+------------------------------------------------------------------------------+
================================================================================

[DAS]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+-----------+-------+----------+-----------+------------------------+
| Applicati|Application| State |  Server  |  Cluster  |    Application Path    |
|  on ID   |   Type    |       | Targets  |  Targets  |                        |
+----------+-----------+-------+----------+-----------+------------------------+
| exploded |           | INSTAL|          |           | /home/ckek81/apps/explo|
|          |           |LED    |          |           |ded                     |
+----------+-----------+-------+----------+-----------+------------------------+
================================================================================

[DAS]domain1.adminServer>deploy exploded -servers server1
deploy the application for the application [exploded.war] succeeded.

[DAS]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+------------+---------+----------+-----------+---------------------+
| Applicati| Application|  State  |  Server  |  Cluster  |   Application Path  |
|  on ID   |    Type    |         | Targets  |  Targets  |                     |
+----------+------------+---------+----------+-----------+---------------------+
| exploded | WAR        | RUNNING | server1  |           | /home/ckek81/apps/ex|
|          |            |         |          |           |ploded               |
+----------+------------+---------+----------+-----------+---------------------+
================================================================================


path를 지정하여 Deploy

다음은 상위 디렉터리를 애플리케이션 저장소로 추가할 수 없는 경우에 path 옵션을 설정하고 deploy하는 방법에 대한 설명이다. DAS가 존재하는 머신에 있는 애플리케이션의 절대 경로를 설정하고 deploy하는 기능에 대한 자세한 내용은 “1.6. path를 지정하여 Deploy”를 참고한다.

다음은 콘솔 툴을 사용해서 path를 지정하여 deploy하는 방법이다.

[예 4.3] 콘솔 툴에서 path를 지정하여 Deploy

[DAS]domain1.adminServer>deploy -path /home/ckek81/Desktop/myapp/examples.ear -servers server1
deploy the application for the application [/home/ckek81/Desktop/myapp/examples.ear] succeeded.

[DAS]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+---------+-----------+---------+---------+----------+-------------------------+
| Applicat|Application|  State  |  Server |  Cluster |     Application Path    |
| ion ID  |   Type    |         | Targets | Targets  |                         |
+---------+-----------+---------+---------+----------+-------------------------+
| examples| EAR       | RUNNING | server1 |          | /home/ckek81/Desktop/mya|
|.ear     |           |         |         |          |pp/examples.ear          |
+---------+-----------+---------+---------+----------+-------------------------+
================================================================================

4.4.3. 애플리케이션 정보 확인

콘솔 툴의 application-info 명령어를 통해 myApp.ear 애플리케이션에 대한 정보를 조회할 수 있다.

다음은 콘솔 툴에서 애플리케이션 정보를 확인하는 예제이다. 각 옵션에 대한 자세한 설명은 JEUS Reference Book”의 “4.2.6.3. application-info”를 참조한다.

[예 4.4] 콘솔 툴에서 애플리케이션 정보 확인

[DAS]domain1.adminServer> application-info
Application information for the domain [domain1].
================================================================================
+----------+------------+---------+----------+-----------+---------------------+
| Applicati| Application|  State  |  Server  |  Cluster  |   Application Path  |
|  on ID   |    Type    |         | Targets  |  Targets  |                     |
+----------+------------+---------+----------+-----------+---------------------+
| myApp    | EAR        | RUNNING | server1  |           | ${INSTALL_HOME}/myAp|
|          |            |         |          |           |p/myApp.ear          |
+----------+------------+---------+----------+-----------+---------------------+
================================================================================

[DAS]domain1.adminServer>application-info -id myApp -server server1
Application information for the server [server1] in the domain [domain1].
================================================================================
+------------+-----------------+-------------+------+------------+-------------+
| Application| Application Name| Application | State|   Server   |   Cluster   |
|     ID     |                 |    Type     |      |  Targets   |   Targets   |
+------------+-----------------+-------------+------+------------+-------------+
| myApp      | myApp           | ear         | RUNNI| server1    |             |
|            |                 |             |NG    |            |             |
+------------+-----------------+-------------+------+------------+-------------+
================================================================================

[DAS]domain1.adminServer>application-info -id myApp -server server1 -detail
Application name : myApp
Application [myApp]
===============================================================
+-------------+---------------------------------+-------------+
| Module Name |        Unique Module Name       | Module Type |
+-------------+---------------------------------+-------------+
| ejb         | myApp#ejb                       | EJB         |
| appclient   | myApp#appclient                 | CAR         |
| web         | myApp#web                       | WAR         |
+-------------+---------------------------------+-------------+

To view detailed information about EJBs or web modules in an EAR, use the "-module" or "-type" option.
===============================================================

[DAS]domain1.adminServer>application-info -id myApp -server server1 -detail -module ejb
Application name : myApp
General information about the EJB module [ejb].
==============================================================
+-------------+----------------------------------------------+
| Module Name |              Unique Module Name              |
+-------------+----------------------------------------------+
| ejb         | myApp#ejb                                    |
+-------------+----------------------------------------------+
==============================================================

Beans
================================================================================
+-----------+-------------------------+-------------------+--------------------+
| Bean Name |           Type          | Local Export Name | Remote Export Name |
+-----------+-------------------------+-------------------+--------------------+
| HelloBean | StatelessSessionBean    |                   |                    |
+-----------+-------------------------+-------------------+--------------------+
================================================================================

[DAS]domain1.adminServer>application-info -id myApp -server server1 -detail -type war
Application name : myApp
There are no EJBs in this module.
General information about the web module [web].
===============================================================
+-------------+--------------------------------+--------------+
| Module Name |       Unique Module Name       | Context Path |
+-------------+--------------------------------+--------------+
| web         | myApp#web                      | /hello       |
+-------------+--------------------------------+--------------+
===============================================================

Servlets
================================================================================
+---------+------------------+-------+-------+-----------+---------+-----------+
|   Name  |       Class      | State | Count | Attribute | RegType |URLPatterns|
+---------+------------------+-------+-------+-----------+---------+-----------+
| HelloSer| dvt.deployment.se| READY |     0 | SYNC      | WEB_XML | /HelloServ|
|vlet     |rvlet.HelloServlet|       |       |           |         |let        |
+---------+------------------+-------+-------+-----------+---------+-----------+
================================================================================

Filters
================================================================================
+------+-------+--------------+-----------+----------------------+-------------+
| Name | Class |   Attribute  |  RegType  |      URLPatterns     |   Servlets  |
+------+-------+--------------+-----------+----------------------+-------------+
(No data available)
================================================================================

Listeners
================================================
+------+------+--------------------------------+
| Name | Type |             RegType            |
+------+------+--------------------------------+
(No data available)
================================================

EJBs
================================================================================
+-----------+------+-------------------------+---------------------------------+
| Bean Name | Type |    Local Export Name    |        Remote Export Name       |
+-----------+------+-------------------------+---------------------------------+
(No data available)
================================================================================

[DAS]domain1.suok>application-info -id myApp -server server1 -detail -module ejb -bean HelloBean
bean HelloBean
Application name : myApp
Module name : ejb
Bean name: HelloBean
================================================================================
+---------------+-----------+-------------------+--------------+---------------+
|      Name     |  (Count)  | WaterMark(High:Low| Bound(Upper:L| Time(Max:Min:T|
|               |           |       :Cur)       |    ower)     |     otal)     |
+---------------+-----------+-------------------+--------------+---------------+
| create        | times(0)  |                   |              |               |
+---------------+-----------+-------------------+--------------+---------------+
| remove        | times(0)  |                   |              |               |
+---------------+-----------+-------------------+--------------+---------------+
| timed-rb      | transactio|                   |              |               |
|               |n(0)       |                   |              |               |
+---------------+-----------+-------------------+--------------+---------------+
| request       | request(0)|                   |              |               |
+---------------+-----------+-------------------+--------------+---------------+
| active-bean   |           | bean(0:0:0)       |              |               |
+---------------+-----------+-------------------+--------------+---------------+
| rolledback    | transactio|                   |              |               |
|               |n(0)       |                   |              |               |
+---------------+-----------+-------------------+--------------+---------------+
| total-bean    |           | bean(0:0:0)       |              |               |
+---------------+-----------+-------------------+--------------+---------------+
| comitted      | transactio|                   |              |               |
|               |n(0)       |                   |              |               |
+---------------+-----------+-------------------+--------------+---------------+
| MethodReadyCou|           | bean(0:0:0)       |              |               |
|nt             |           |                   |              |               |
+---------------+-----------+-------------------+--------------+---------------+
| active-thread |           | thread(0:0:0)     |              |               |
+---------------+-----------+-------------------+--------------+---------------+
| total-remote-t|           |thread(100:100:100)|              |               |
|hread          |           |                   |              |               |
+---------------+-----------+-------------------+--------------+---------------+
================================================================================

application-info 명령은 도메인에 존재하는 모든 애플리케이션의 정보를 출력한다. 기본적으로 출력되는 정보는 다음과 같다.

항목설명
Application ID애플리케이션의 ID이다. 이 값은 도메인에서 유일해야 한다.
Applicatio Type

애플리케이션의 종류로 5가지 중 하나가 될 수 있다.

  • EAR : 애플리케이션

  • EJB : EJB 모듈

  • WAR : 웹 애플리케이션 모듈

  • RAR : 리소스 어댑터 모듈

  • CAR : 애플리케이션 클라이언트 모듈

state

애플리케이션이 도메인에서의 상태로 다음 4가지 중 하나가 될 수 있다.

  • INSTALLED

  • DISTRIBUTED

  • RUNNING

  • DEPLOYED

각 상태에 대한 자세한 설명은 “1.1.3. 애플리케이션 상태”를 참고한다.

Server Target애플리케이션이 deploy되어 있는 대상 서버이다.
Cluster Target애플리케이션이 deploy되어 있는 대상 클러스터이다.
Application PathDAS에 존재하는 애플리케이션 파일의 경로를 나타낸다

4.5. Staging Mode Deploy

exploded 모듈 형태의 애플리케이션은 파일을 압축하여 다른 머신의 MS에 deploy할 수 있다. 이를 Staging Mode Deploy라고 한다. 애플리케이션 파일이 애플리케이션 저장소에 위치하거나 DAS가 존재하는 머신에 있는 절대 경로를 설정하고 deploy할 수 있다. Staging Mode Deploy 기능에 대한 자세한 내용은 “1.7. Staging Mode Deploy”를 참고한다.

WebAdmin 사용

다음은 WebAdmin을 사용해서 path를 지정하여 deploy하는 방법에 대한 설명이다.

  1. WebAdmin의 왼쪽 메뉴에서 [Applications]를 선택하면 Deployed Application 화면으로 이동한다. 애플리케이션 목록에서 INSTALLED상태의 exploded 애플리케이션을 선택하고 애플리케이션 목록 하단에 위치한 [deploy] 버튼을 클릭하거나, 애플리케이션 목록 상단에 위치한 [deploy] 버튼을 클릭해 [deploy] 버튼을 클릭해 'Path' 항목을 입력한다.

  2. 'Server' 항목에서 deploy할 대상 서버를 선택한다.

  3. Deploy 정보 입력 화면의 고급 선택사항에서 'Staging' 항목을 체크하고 [확인] 버튼을 클릭하면 애플리케이션 Deploy가 진행된다.

    [그림 4.8] WebAdmin - Staging Mode Deploy

    WebAdmin - Staging Mode Deploy


  4. Deploy 작업이 완료되면 화면 상단에 그 결과가 나타난다. 명령이 성공적으로 수행되었다면 애플리케이션 목록에서 해당 애플리케이션의 상태는 RUNNING이 된다.

  5. server1 로그에서 애플리케이션이 Staging Mode로 deploy된 것을 확인할 수 있다.

    ...
    [2013.05.28 23:17:48][2] [server1-40] [WEB-1032] Distributed the web context [exploded] information
    - Virtual host    : DEFAULT_HOST
    - Context path    : /exploded
    - Document base   : /home/ckek81/development/jeus/jeus7/trunk/target/
    jeus/domains/domain1/servers/server1/.workspace/deployed/exploded/exploded_war___
    ...

콘솔 툴 사용

다음은 콘솔 툴을 사용한 Stagind Mode Deploy 방법이다. deploy 명령을 staging 옵션을 지정하여 수행한다.

[예 4.5] 콘솔 툴에서 Staging Mode Deploy

[DAS]domain1.adminServer>deploy exploded -servers server1 -staging
deploy the application for the application [exploded] succeeded.

[DAS]domain1.adminServer>application-info
Application information for the domain [domain1].
================================================================================
+----------+------------+---------+----------+-----------+---------------------+
| Applicati| Application|  State  |  Server  |  Cluster  |   Application Path  |
|  on ID   |    Type    |         | Targets  |  Targets  |                     |
+----------+------------+---------+----------+-----------+---------------------+
| exploded | WAR        | RUNNING | server1  |           | /home/ckek81/apps/ex|
|          |            |         |          |           |ploded               |
+----------+------------+---------+----------+-----------+---------------------+
| myApp    | EAR        | RUNNING | server1  |           | ${INSTALL_HOME}/myAp|
|          |            |         |          |           |p/myApp.ear          |
+----------+------------+---------+----------+-----------+---------------------+
================================================================================

4.6. Deployment Plan을 이용한 Deployment

Deployment Plan은 Deploy Time에 애플리케이션의 DD의 내용을 수정할 수 있는 애플리케이션 외부의 설정 파일이다.

JEUS는 XML 형식의 Deployment Plan을 정의하며 EJB, 웹 애플리케이션, EAR의 표준 DD와 JEUS DD에 Deployment Plan를 적용할 수 있도록 지원한다. 애플리케이션을 deploy할 때 Deployment Plan 사용에 대해 명시하면 Deploy Time에 DD와 Deployment Plan의 설정을 merge하여 최종 애플리케이션 설정을 확정한 뒤 Deploy를 수행한다.

본 절에서는 Deployment Plan의 설정 방법과 동작 방식에 대해 설명한다. 또한 WebAdmin과 콘솔 툴에서 Deployment Plan을 이용한 Deploy 방법에 대해 설명한다.

4.6.1. Deployment Plan 설정 및 동작 방식

Deployment Plan의 작성 예제를 통해 설정 방법과 동작 방식에 대해 설명한다.

Deployment Plan 설정

다음은 Deployment Plan의 작성 예이다.

<?xml version="1.0" encoding="UTF-8"?>
<jeus-deployment-plan xmlns="http://www.tmaxsoft.com/xml/ns/jeus"
                      xmlns:jeus="http://www.tmaxsoft.com/xml/ns/jeus"
                      xmlns:javaee="http://java.sun.com/xml/ns/javaee"
                      xmlns:j2ee="http://java.sun.com/xml/ns/j2ee">
    <descriptors>
        <!-- For standalone EJB -->
        <descriptor>
            <uri>META-INF/ejb-jar.xml</uri>
            <configurations>
                <configuration>
                    <action>REPLACE</action>
                    <xpath>//j2ee:ejb-name[.='ByeBean']</xpath>
                    <value>
                        <![CDATA[<ejb-name>HiBean</ejb-name>]]>
                    </value>
                </configuration>
                <configuration>
                    <action>DELETE</action>
                    <xpath>/child::j2ee:ejb-jar/child::j2ee:enterprise-beans/
child::j2ee:session/child::j2ee:local-home[.='HelloHomeLocal']</xpath>
                </configuration>
                <configuration>
                    <action>APPEND_CHILD</action>
                    <xpath>/child::j2ee:ejb-jar/descendant::j2ee:session[2]</xpath>
                    <value>
                        <![CDATA[<transaction-type>Bean</transaction-type>]]>
                    </value>
                </configuration>
                <configuration>
                    <action>INSERT_BEFORE</action>
                    <xpath>/j2ee:ejb-jar/j2ee:enterprise-beans/j2ee:session/
j2ee:ejb-name[.='HelloBean']/../j2ee:transaction-type</xpath>
                    <value>    
                        <![CDATA[<session-type>Stateless</session-type>]]>
                    </value>
                </configuration>
            </configurations>
        </descriptor>
        <descriptor>
            <uri>META-INF/jeus-ejb-dd.xml</uri>
            <configurations>
                <configuration>
                    <action>REPLACE</action>
                    <xpath>/jeus:jeus-ejb-dd/jeus:beanlist/jeus:jeus-bean/
jeus:export-name[.='ByeBean']</xpath>
                    <value>
                        <![CDATA[<export-name>HiBean</export-name>]]>
                    </value>
                </configuration>
                <configuration>
                    <action>DELETE</action>
                    <xpath>/jeus:jeus-ejb-dd/jeus:beanlist/jeus:jeus-bean/
jeus:local-export-name[.='HelloBeanLocal']</xpath>
                </configuration>
                <configuration>
                    <action>APPEND_CHILD</action>
                    <xpath>/jeus:jeus-ejb-dd/jeus:beanlist/jeus:jeus-bean</xpath>
                    <value>
                        <![CDATA[<jeus-rmi>false</jeus-rmi>]]>
                    </value>
                </configuration>
                <configuration>
                    <action>INSERT_BEFORE</action>
                    <xpath>/jeus:jeus-ejb-dd/jeus:beanlist/jeus:jeus-bean/
jeus:ejb-name[.='HiBean']/../jeus:jeus-rmi</xpath>
                    <value>
                        <![CDATA[<thread-max>100</thread-max>]]>
                    </value>
                </configuration>
            </configurations>
        </descriptor>
        <!-- For standalone web application -->
        <descriptor>
            <uri>WEB-INF/web.xml</uri>
            <configurations>
                <configuration>
                    <action>REPLACE</action>
                    <xpath>/child::javaee:web-app/child::javaee:servlet-mapping/
child::javaee:servlet-name[.='HiServlet']</xpath>
                    <value>
                        <![CDATA[<servlet-name>HelloServlet</servlet-name>]]>
                    </value>
                </configuration>
                <configuration>
                    <action>DELETE</action>
                    <xpath>//javaee:load-on-startup</xpath>
                </configuration>
                <configuration>
                    <action>APPEND_CHILD</action>
                    <xpath>/javaee:web-app/descendant::javaee:login-config</xpath>
                    <value>
                        <![CDATA[<auth-method>BASIC</auth-method>]]>
                    </value>
                </configuration>
                <configuration>
                    <action>INSERT_BEFORE</action>
                    <xpath>/javaee:web-app/javaee:env-entry/
javaee:env-entry-value[.='value1']</xpath>
                    <value>
                        <![CDATA[<env-entry-type>java.lang.String</env-entry-type>]]>
                    </value>
                </configuration>
            </configurations>
        </descriptor>
        <descriptor>
            <uri>WEB-INF/jeus-web-dd.xml</uri>
            <configurations>
                <configuration>
                    <action>REPLACE</action>
                    <xpath>//jeus:enable-jsp</xpath>
                    <value>
                        <![CDATA[<enable-jsp>true</enable-jsp>]]>
                    </value>
                </configuration>
                <configuration>
                    <action>DELETE</action>
                    <xpath>/jeus:jeus-web-dd/child::jeus:max-instance-pool-size</xpath>
                </configuration>
                <configuration>
                    <action>INSERT_BEFORE</action>
                    <xpath>/jeus:jeus-web-dd/descendant::jeus:enable-jsp</xpath>
                    <value>
                        <![CDATA[<context-path>/hello</context-path>]]>
                    </value>
                </configuration>
                <configuration>
                    <action>APPEND_CHILD</action>
                    <xpath>//jeus:jeus-web-dd</xpath>
                    <value>
                        <![CDATA[<webinf-first>false</webinf-first>]]>
                    </value>
                </configuration>
            </configurations>
        </descriptor>
        <!-- For EAR -->
        <descriptor>
            <uri>META-INF/application.xml</uri>
            <configurations>
                <configuration>
                    <action>REPLACE</action>
                    <xpath>/javaee:application/javaee:library-directory</xpath>
                    <value>
                        <![CDATA[<library-directory>mylib</library-directory>]]>
                    </value>
                </configuration>
            </configurations>
        </descriptor>
        <descriptor>
            <uri>ejb.jar/META-INF/ejb-jar.xml</uri>
            <configurations>
                <configuration>
                    <action>REPLACE</action>
                    <xpath>/javaee:ejb-jar/javaee:enterprise-beans/
javaee:session/javaee:ejb-class</xpath>
                    <value>
                        <![CDATA[<ejb-class>HelloBean</ejb-class>]]>
                    </value>
                </configuration>
            </configurations>
        </descriptor>
            <descriptor>
            <uri>web.war/WEB-INF/web.xml</uri>
            <configurations>
                <configuration>
                    <action>REPLACE</action>
                    <xpath>/javaee:web-app/javaee:servlet-mapping/
javaee:servlet-name</xpath>
                    <value>
                        <![CDATA[<servlet-name>HelloServlet</servlet-name>]]>
                    </value>
                </configuration>
            </configurations>
        </descriptor>
    </descriptors>
</jeus-deployment-plan>      

다음은 <descriptor>의 하위 태그에 대한 설명이다.

  • <descriptor>

    <descriptor>는 여러 <configuration> 태그로 이루어져 있다.

    • <configuration>

      <configuration>은 target DD에 적용할 하나의 설정 단위로 하위에 <action>, <xpath>, <value> 태그로 구성된다.

      태그설명
      <action>

      DD의 특정 태그에 대해서 어떤 설정을 변경할 것인지를 명시한다.

      다음은 설정값에 대한 설명이다.

      • DELETE : DD의 특정 태그를 삭제한다.

      • REPLACE : DD의 특정 태그를 임의의 태그로 대체한다.

      • APPEND_CHILD : DD의 특정 태그의 last child로써 임의의 태그를 추가한다.

      • INSERT_BEFORE :DD의 특정 태그의 previous sibling으로서 임의의 태그를 삽입한다.

      <xpath>

      DD의 특정 태그를 xpath expression으로 지정한다. 이때 <xpath> 표준에 따라 <xpath> 경로에 위치하는 모든 태그는 XML Name Space를 통해 qualified name으로 표현되어야 한다. 이를 위해 Deployment Plan에 각 DD의 XML Name Space를 Name Space Prefix와 함께 선언한다.

      예를 들어 JEUS DD에 있는 임의의 태그를 <xpath>로 지정할 경우 <xpath> 경로에 위치하는 모든 태그는 JEUS XML Name Space(http://www.tmaxsoft.com/xml/ns/jeus)와 함께 qualified name으로 표현될 필요가 있다. Deployment Plan에서는 JEUS XML Name Space를 'jeus' Prefix로 매칭시켜 놓았으므로 <xpath> 경로에 위치하는 모든 태그의 이름 앞에 'jeus' Prefix를 붙여 qualified name을 표현한다.

      <value>

      <value>는 <action> 값이 REPLACE, APPEND_CHILD, INSERT_BEFORE인 경우에만 유효하다.

      <action> 값에 따른 설정값은 다음과 같다.

      • REPLACE : <xpath>로 지정한 태그를 대체할 새로운 태그를 설정한다.

      • APPEND_CHILD : <xpath>로 지정한 태그에 last child로 추가할 태그를 설정한다.

      • INSERT_BEFORE : <xpath>로 지정한 태그의 previous sibling으로 삽입할 태그를 설정한다.

      <value> 값으로 설정되는 태그는 일반적으로 depth를 갖는 XML fragment 형태를 가정하므로 <value> 값은 특별히 CDATA section으로 표현한다. CDATA section에 action 수행을 위해 필요한 XML fragment를 그대로 적는다.

Deployment Plan 동작 방식

위의 작성 예제를 바탕으로 태그별 동작 방식에 대해 설명한다.

  • <descriptor>

    Deployment Plan은 여러 개의 <descriptor> 태그로 이루어져 있다.

    <descriptor> 단위로 target이 되는 DD를 지정하며 이를 위해 <uri> 태그를 사용한다. 애플리케이션 파일을 루트(root)로 가정하고 그로부터 정해지는 DD의 상대 경로를 <uri> 값으로 명시하여 target DD를 결정한다.

    • 예를 들어 Standalone EJB 모듈의 표준 DD는 애플리케이션 루트로부터 항상 META-INF/ejb-jar.xml에 위치하며 JEUS DD는 META-INF/jeus-ejb-dd.xml에 위치한다. 그러므로 위의 Deployment Plan의 첫 번째 <descriptor>는 그것의 <uri> 값으로부터 Standalone EJB 모듈의 표준 DD를 위한 것이고 두 번째 <descriptor>는 그것의 <uri> 값으로부터 Standalone EJB 모듈의 JEUS DD를 위한 것임을 알 수 있다. Stanalone 웹 애플리케이션이나 EAR에 대해서도 동일한 규칙이 적용된다.

    • <uri> 값이 'ejb.jar/META-INF/ejb-jar.xml'인 <descriptor>는 EAR에 속한 EJB 모듈(파일 이름이 ejb.jar)을 위한 것이고, <uri> 값이 'web.war/WEB-INF/web.xml'인 <descriptor>는 EAR에 속한 WEB 모듈(파일 이름이 web.war)을 위한 것이다.

    • 하나의 Deployment Plan은 여러 개의 서로 다른 애플리케이션 Deploy를 위해 사용될 수 있다. deploy하는 애플리케이션의 DD와 <uri> 값이 매칭되어 유효한 것으로 판단되는 <descriptor>만 선택되어 해당 애플리케이션을 deploy할 때 적용되는 방식이므로 그 외의 <descriptor>는 Deploy에 전혀 영향을 주지 않는다.

  • <configuration>

    다음은 첫 번째 <descriptor> 설정을 예로 들어 설명한 것으로 <descriptor>의 설정에 의해 DD에 실제적으로 수정되는 사항에 대한 설명이다.

    • 첫 번째 <descriptor>는 앞서 언급했듯이 Standalone EJB 모듈의 표준 DD를 조작한다. 가정 먼서 수행되는 조작 action은 특정 태그의 대체로써 첫 번째 <configuration>으로 표현되어 있다. 값이 'ByeBean'이라는 <ejb-name> 태그를 값이 'HiBean'인 <ejb-name> 태그로 대체하고 있음을 확인할 수 있다.

    • 두 번째 <configuration>은 값이 'HelloHomeLocal'인 <local-home> 태그의 삭제를 표현한다.

    • 세 번째 <configuration>은 두 번째 <session> 태그의 last child로써 <transaction> 태그를 추가함을 표현한다.

    • 네 번째 <configuration>은 <ejb-name> 태그의 값이 'HelloBean'인 <session> 태그의 previous sibling으로써 <session-type> 태그를 삽입함을 표현한다.

4.6.2. Deployment Plan Install

Deployment Plan을 이용하여 deploy를 하기 위해서는 우선 Deployment Plan을 도메인에 install해야 한다. 애플리케이션과 유사하게 Deploy에 이용할 수 있는 Deployment Plan 또한 도메인에 install된 것들에 한한다. Deployment Plan을 install할 때는 도메인에서의 Deployment Plan의 식별자를 설정할 수 있다.

Deployment Plan은 WebAdmin 또는 콘솔 툴을 사용해서 install할 수 있다.

WebAdmin 사용

다음은 WebAdmin을 사용해서 Deployment Plan을 install하는 과정에 대한 설명이다.

  1. WebAdmin의 왼쪽 메뉴에서 [Applications]를 선택하면 Deployed Application 화면으로 이동한다. 해당 화면에서 [plan] 버튼을 클릭하면 Deployment Plan 화면으로 이동한다.

  2. Deployment Plan 화면에서 [install] 버튼을 클릭하여 install할 Deployment Plan의 경로를 설정하고 적절한 식별 이름을 입력한 후 [확인] 버튼을 클릭한다.

  3. 입력한 식별 이름으로 Deployment Plan이 install된 것을 확인할 수 있다.

콘솔 툴 사용

콘솔 툴에서 install-deployment-plan 명령을 통해 Deployment Plan을 install할 수 있다.

[DAS]domain1.adminServer>installdp -path /home/dev/plans/jeus-deployment-plan.xml -name plan1
Installing the deployment plan [plan1] was successful.

install-deployment-plan 명령의 사용 방법에 대한 자세한 내용은 JEUS Reference Book”의 “4.2.6.8. install-deployment-plan”을 참고한다.

4.6.3. Install한 Deployment Plan 확인

WebAdmin 또는 콘솔 툴을 사용해서 Install한 Deployment Plan을 확인할 수 있다. 각각의 Deploymnet Plan은 install할 때 설정한 Deployment Plan의 식별자로 구분되며 Deployment Plan별로 그것이 적용된 애플리케이션 목록이 표시된다. Deployment Plan의 실제 파일 내용도 화면에 출력할 수 있다.

WebAdmin 사용

다음은 WebAdmin을 사용해서 Install한 Deployment Plan을 확인하는 과정에 대한 설명이다.

  1. WebAdmin의 왼쪽 메뉴에서 [Applications]를 선택하면 Deployed Application 화면으로 이동한다. 해당 화면에서 [plan] 버튼을 클릭하면 Deployment Plan 화면으로 이동한다.

  2. Deployment Plan 화면에서 install된 Deployment Plan의 목록이 조회된다.

  3. 조회된 목록에서 특정 Deployment Plan의 이름을 클릭하면 내용을 확인할 수 있다.

콘솔 툴 사용

콘솔 툴에서 deployment-plan-info 명령을 통해서 도메인에 install한 Deployment Plan이 적용된 애플리케이션의 목록을 조회할 수 있고, 특히 특정 Deployment Plan을 지정하면 해당 Deployment Plan의 내용을 화면에서 확인할 수 있다.

  • Deployment Plan의 목록 조회

    [DAS]domain1.adminServer>dpinfo
    The list of deployment plans installed in the domain and the applications to which each deployment plan applies
    ===========================================================
    +------------------------------------------+--------------+
    |              Deployment plan             | Applications |
    +------------------------------------------+--------------+
    | plan1                                    |              |
    +------------------------------------------+--------------+
    ===========================================================
  • 특정 Deployment Plan의 내용 조회

    [DAS]domain1.adminServer>dpinfo -name plan1
    <?xml version="1.0" encoding="UTF-8"?>
    <jeus-deployment-plan xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
       ...
    </jeus-deployment-plan>

참고

deployment-plan-info 명령 사용 방법에 대한 자세한 내용은 JEUS Reference Book”의 “4.2.6.5. deployment-plan-info”를 참고한다.

4.6.4. Deployment Plan을 적용한 Deploy

WebAdmin 또는 콘솔 툴을 사용해서 Install한 Deployment Plan을 적용하여 Deploy를 수행할 수 있다.

WebAdmin 사용

다음은 WebAdmin을 사용해서 Deployment Plan을 적용한 Deploy 과정에 대한 설명이다.

  1. WebAdmin의 왼쪽 메뉴에서 [Applications]를 선택하면 Deployed Application 화면으로 이동한다. 해당 화면에서 deploy할 애플리케이션을 선택하고 [deploy] 버튼을 클릭한다.

  2. 팝업되는 Deploy 항목 설정화면에서 'plan' 항목에 설치된 plan의 식별 이름을 입력하고 [확인] 버튼을 클릭한다.

  3. 화면 상단에 Deploy가 성공적으로 완료되었다는 메시지가 표시되고, 애플리케이션의 상태가 RUNNING으로 변경된 것을 확인할 수 있다.

콘솔 툴 사용

콘솔 툴에서 deploy-application 명령을 통해 Deployment Plan을 이용한 Deploy를 수행할 수 있다.

[DAS]domain1.adminServer>deploy webapp -all -plan plan1
deploy the application for the application [webapp] succeeded.

4.6.5. 애플리케이션에 적용된 Deployment Plan 확인

WebAdmin 또는 콘솔 툴을 사용해서 임의의 애플리케이션에 어떤 Deployment Plan이 적용되었는지 확인할 수 있다.

WebAdmin 사용

다음은 WebAdmin을 사용해서 애플리케이션에 적용된 Deployment Plan을 확인하는 과정에 대한 설명이다.

  1. WebAdmin의 왼쪽 메뉴에서 [Applications]를 선택하면 Deployed Application 화면으로 이동한다. 해당 화면에서 정보를 확인할 애플리케이션 ID를 클릭하면 상세 정보를 확인할 수 있다.

  2. 선택한 애플리케이션에 대한 상세 정보에는 적용된 Deployment Plan도 포함된다.

콘솔 툴 사용

콘솔 툴에서 application-info 명령을 통해 애플리케이션에 적용된 Deployment Plan을 확인할 수 있다.

[DAS]domain1.adminServer>appinfo -id webapp -detail
Application information for the domain [domain1].
================================================================================
+------+-------+-----+------+-------+--------------+----------+----------+-----+
| Appli| Applic|State|Server|Cluster|    Running   | Applicati| Applicati| Plan|
|cation| ation |     |Target|Targets|   Servers    | on Path  | on Time  |Name |
|  ID  | Type  |     |  s   |       |              |          |          |     |
+------+-------+-----+------+-------+--------------+----------+----------+-----+
|webapp| WAR   | RUNN| ALL  | ALL   | server1,serve| ${INSTALL| Tue May  |plan1|
|      |       |ING  |      |       |r2,server3,adm|_HOME}/web|28        |     |
|      |       |     |      |       |inServer      |app/deploy|22:45:13  |     |
|      |       |     |      |       |              |ment_plan_|KST 2013  |     |
|      |       |     |      |       |              |web.war   |          |     |
+------+-------+-----+------+-------+--------------+----------+----------+-----+
================================================================================

4.6.6. Deployment Plan Uninstall

WebAdmin 또는 콘솔 툴을 사용해서 Deployment Plan을 도메인에서 uninstall할 수 있다. Uninstall된 Deployment Plan은 도메인에서 더 이상 유효하지 않으며 당연히 deploy할 때도 사용할 수 없다.

WebAdmin 사용

다음은 WebAdmin을 사용해서 설치된 Deployment Plan을 uninstall하는 과정에 대한 설명이다.

  1. WebAdmin의 왼쪽 메뉴에서 [Applications]를 선택하면 Deployed Application 화면으로 이동한다. 해당 화면에서 [plan] 버튼을 클릭하면 Deployment Plan 화면으로 이동한다.

  2. Deployment Plan 화면에 install된 Deployment Plan 목록이 조회된다. 삭제를 원하는 Deployment Plan에 대하여 [uninstall] 버튼을 클릭한다.

  3. 화면 상단에 Deployment Plan의 uninstall이 성공적으로 완료되었다는 메시지가 표시된다.

콘솔 툴 사용

콘솔 툴에서 uninstall-deployment-plan 명령을 통해 Deployment Plan을 uninstall할 수 있다.

[DAS]domain1.adminServer>uninstalldp plan1
Uninstalling the deployment plan was successful.

참고

uninstall-deployment-plan 명령의 사용 방법에 대한 자세한 내용은 JEUS Reference Book”의 “4.2.6.17. uninstall-deployment-plan”를 참고한다.

4.6.7. Deployment Plan Redeploy

Deployment Plan을 이용해서 deploy한 애플리케이션은 redeploy할 때 기본적으로 기존의 Deployment Plan이 그대로 적용된다. 그러나 redeploy할 때 Deployment Plan을 새롭게 설정하면 새로운 Deployment Plan을 적용하여 redeploy할 수 있다.