JBoss EAP 6과 친해지기 21탄 - 애플리케이션 배포
본문 바로가기
IT 이야기/JBoss EAP

JBoss EAP 6과 친해지기 21탄 - 애플리케이션 배포

by 찬찬이 아빠 2021. 1. 11.
반응형
  1. 스탠드얼론 모드에서 배포

스탠드얼론 모드에서는 관리도구를 사용하여 배포합니다. 간편한 배포 방법으로는 배포 스캐너를 이용할 수 있는 것이 스탠드얼론 모드의 특징입니다.

 

스탠드얼론 모드에서 배포 상태는 다음 그림과 같습니다.

스탠드얼론 모드의 배포 상태

 

 

 

  • STOPPED : 애플리케이션이 서버에 배포되어 있지만 사용하지 않는 상태
  • OK : 애플리케이션이 서버에 배포되어 사용하고 있는 상태

 

배포 상태는 CLI의 deployment-info 명령어를 사용하여 확인할 수 있습니다. 아래와 같이 배포된 exmample.war 애플리케이션의 상태가 OK인 것을 확인할 수 있습니다.

[standalone@localhost:9999 /] deployment-info --name=example.war
NAME		RUNTIME-NAME	PERSISTENT	ENABLED	STATUS
example.war	example.war	true	true	OK

 

 

 

  2. 도메인 모드에서 배포

도메인 모드에서는 관리도구르르 사용해 도메인 컨트롤러를 경유하여 배포합니다. 또, 도메인 환경에서는 배포스캐너를 지원하지 않습니다. 배포 대상도 스탠드얼론 모드와 달라, 애플리케이션 배포가 서버가 아니라 서버 그룹을 대상으로 배포합니다.

 

이 때문에 배포 상태도 스탠드얼론 모드의 환경 상태와는 다릅니다. 도메인 모드에서의 배포 상태는 아래와 같습니다.

도메인 모드의 배포 상태

 

 

 

  • not added : 레파지토리에 애플리케이션이 등록된 상태로 어느 서버 그룹에도 할당되어 있지 않은 상태
  • added : 레파지토리에 애플리케이션이 등록된 상태로 몇 개의 서버 그룹에 할당되어 있지만, 사용하지 않도록 설정되어 있기 때문에 애플리케이션에 접근할 수 없는 상태
  • enabled : 레파지토리에 애플리케이션이 등록된 상태로 서버 그룹에 할당되어 사용하고 있는 상태
[domain@localhost:9999 /] deployment-info --name=example.war
NAME		RUNTIME-NAME
example.war	example.war

SERVER-GROUP		STATE
main-server-group	enabled
other-server-group	not added

 

 

 

  3. 배포 방식 비교

JBoss의 애플리케이션 배포 방법은 Managed 방식과 Unmanaged 방식이 있습니다. 또, Archive 방식과 Exploded 방식이 있습니다.

 

Archive 방식과 Exploded 방식의 차이점은 애플리케이션 파일의 구성 방법에 있습니다. Archive 방식압축된 파일을 사용하는 배포방법이며, Exploded 방식애플리케이션의 압축을 풀어놓은 디렉터리를 사용하는 방식입니다.

 

JBoss EAP 내부적으로 배포할 파일을 관리하는지 여부에 따라 Managed, Unmanaged 방식으로 구분합니다. 관리 콘솔의 Deployments에서 파일을 업로드하여 배포하거나, CLI에서 특정 애플리케이션을 직접 배포할 경우 내부적으로 data 디렉터리에 파일을 보관하여 배포합니다. 이렇게 JBoss가 애플리케이션을 관리하는 경우를 Managed 방식으로 Archive 방법만 사용할 수 있습니다. 도메인 모드에서도 콘솔이나 CLI에서 Managed 방식으로 배포하면 다른 머신에 있더라도 호스트 컨트롤러에 애플리케이션을 JBoss가 내부적으로 복사하고 배포합니다.

 

반대로 Unmanaged 방식은 사용자가 직접 애플리케이션 파일을 관리하는 방식입니다. 여러 머신을 사용하는 도메인 모드에서 Unmanaged 방식을 사용하면, 사용자가 직접 각각의 머신에 애플리케이션 파일을 복사해야 합니다.

 

애플리케이션의 크기 매우 큰 경우에는 각각의 머신에 사용자가 직접 애플리케이션을 배포하는 Unmanaged 방식을 사용하는 것이 좋습니다. 또, JSP 파일 등 특정 파일만 변경하여 배포하고자 할 경우엔 Exploded 방식을 사용해야 합니다.

 

 

 

  4. CLI에서 배포

CLI에서 배포하려면 deploy 명령어를 사용합니다.

 

(1) CLI에서 애플리케이션 배포

deploy 명령을 실행하여  /CLOUD/APP/example.war을 배포하는 예제입니다.

[standalone@localhost:9999 /] deploy /CLOUD/APP/example.war
[standalone@localhost:9999 /] deploy -l
NAME		RUNTIME-NAME	ENABLED	STATUS
example.war	example.war	true	OK

 

(2) CLI에서 애플리케이션 제거

스탠드얼론 모드에서는 애플리케이션에 대해 undeploy 명령어를 실행하기만 하면 배포된 애플리케이션이 삭제됩니다.

[standalone@localhost:9999 /] undeploy example.war

 

도메인 모드에서는 배포된 example.war 애플리케이션을 main-server-group에서 제거하기 위해 remove 명령어를 사용합니다.

[domain@localhost:9999 /] /server-group=main-server-group/deployment=example.war:remove
{
	"outcome" => "success",
    "result" => undefined,
    "server-groups" => {"main-server-group" => {"host" => {"master" => {
    	"server-one" => {"response" => {"outcome" => "success"}},
        "server-two" => {"response" => {"outcome" => "success"}}
    }}}}
}

 

 

  4. 관리 콘솔에서 배포

관리 콘솔에서 애플리케이션을 배포하려면 'Runtime' -> 'Server' -> 'Manage Deployments'를 선택합니다.

 

(1) 관리 콘솔에서 Deployments 선택

Runtime → Server Manage Deployments를 선택합니다.

 

(2) 배포할 애플리케이션 선택

Choose File 버튼을 클릭하여 배포한 파일을 선택합니다.

 

(3) 배포 파일 저장

Save 버튼을 클릭하여 배포 파일을 저장합니다.

 

(4) 애플리케이션 Enable

배포할 APP를 클릭하고 En/Disable 버튼을 클릭합니다.

 

(5) 배포 완료

배포할 APP가 활성화 됩니다.

 

(6) 애플리케이션 확인

웹 브라우저에서 http;//localhost:8080/example/을 입력하여 배포한 애플리케이션을 확인합니다.

 

 

 

  6. Unmanaged 배포

JBoss EAP 6 서버에 애플리케이션을 배포할 때 WAR나 EAR로 패키징된 하나의 파일을 사용하지 않고 별도의 디렉터리(Exploded)에 보관된 애플리케이션을 사용할려고 할 때 사용하는 방법이 Unmanaged 배포 방법입니다. 대부분 미들웨어 벤더는 운영 환경에서 JSP를 체크하여 컴파일하는 것을 권장하지 않지만, 특정 JSP 변경 파일만 빠르게 운영 환경에 반영하려는 요구 사항이 많습니다. 이 경우 압축이 풀린 디렉터리 형태로 배포해야 합니다. 이런 배포 방식을 JBoss에서는 Unmanaged 배포라고 합니다.

 

도메인 모드에서 여러 호스트에서 Unmanaged 형식으로 배포하려면 각 호스트에 같은 디렉터리에 먼저 애플리케이션이 복사되어 있어야 합니다. 예를 들어 example.war 라는 압축을 풀어놓은 디렉터리를 사용하면 됩니다.

 

(1) 관리 콘솔에서 배포

① 관리 콘솔에서 Deployments 선택

Runtime Server Manage Deployments를 선택합니다.

 

② 배포할 애플리케이션 경로 입력

'Path에는 압축이 풀린 디렉터리 경로를 입력합니다. 'Is Archive?' 체크 박스는 선택하지 않습니다. example.war 파일이 압축 파일인 경우에는 체크 박스를 선택합니다.  'Name'은 JBoss에서 관리에 사용하는 이름이며, 'Runtime Name'은 실제 배포될 이름입니다. 

 

③ 애플리케이션 Enable

배포할 APP를 클릭하고 En/Disable 버튼을 클릭합니다.

 

④ 배포 완료

배포할 APP가 활성화 됩니다.

 

⑤ 애플리케이션 확인

웹 브라우저에서 http;//localhost:8080/example/을 입력하여 배포한 애플리케이션을 확인합니다.

 

 

(2) CLI에서 배포

CLI에서 배포하는 여러 가지 명령들은 아래와 같습니다.

 

① 스탠드얼론 모드에서 Exploded 디렉터리 배포 방법

[standalone@localhost:9999 /] /deployment=example.war:add(runtime-name="example.war", contents={{"path"=>"/CLOUD/APP/example.war", "archive"=>false}])
{ "outcome" => "success" }

[standalone@localhost:9999 /] /deployment=example.war:deploy
{ "outcome" => "success" }

 

 

② 스탠드얼론 모드에서 애플리케이션 undeploy, 제거 방법

[standalone@localhost:9999 /] /deployment=example.war:undeploy
{"outcome" => "success"}

[standalone@localhost:9999 /] /deployment=example.war:remove
{"outcome" => "success"}

 

③ 도메인 모드에서 Exploded 배포 디렉터리 추가

[domain@localhost:9999 /] /deployment=example.war:add(runtime-name="example.war", content=[{"path"=>"/CLOUD/APP/example.war","archive"=>false}])

 

④ 도메인 모드에서 서버 그룹에 배포

[domain@localhost:9999 /] deploy --name=example.war --server-groups=main-server-group

 

⑤ 도메인 모드에서 애플리케이션 서버 그룹 undeploy

[domain@localhost:9999 /] undeploy example.war --server-groups=main-server-group

 

 

  7. 배포 스캐너를 이용한 배포

새로운 애플리케이션을 배포하기 위해 특정 디렉터리를 모니터링하는 모듈이 '배포스캐너' 입니다.

 

배포 스캐너는 두 가지 방법으로 배포를 제어합니다. 첫 번째는 배포 디렉터리에 있는 배포 파일(WAR, EAR, JAR, SAR 파일)을 주기적으로 스캔하여 배포하는 '자동 배포' 방법입니다. 두 번째는 주기적인 스캔을 통한 배포를 이용하지 않고, 마커 파일을 이용하여 수동으로 배포를 제어하는 '수동 배포' 방법입니다. 배포 스캐너는 도메인 모드에서는 사용할 수 없습니다.

 

(1) 자동 배포

배포 스캐너는 배포 디렉터리($jboss.server.base.dir/deployments)를 주기적으로 체크하고 있다가 새로운 애플리케이션이나 변경이 있으면 로드하여 배포, 재배포합니다. 자동 배포는 애플리케이션의 개발 시점에서는 매우 편리한 기능이지만, 운영 환경에서는 자동 배포하지 않도록 설정을 변경해야 합니다. 배포 스캐너에 대한 설정 변경은 CLI를 사용하여 /subsystem=deployment-scanner 서브시스템에서 할 수 있습니다.

 

다음은 CLI 명령을 사용하여 배포 스캐너의 설정을 확인하는 방법입니다.

[standalone@localhost:9999 /] cd subsystem=deployment-scanner
[standalone@localhost:9999 subsystem=deployment-scanner] : read-resource9
{
	"outcome" => "success",
    "result" => {"scanner" => {"default"=> {
    	"auto-deploy-exploded" => false
        "auto-deploy-xml" => false,
        "auto-deploy-zipped" => true,
        "deployment-timeout" => 600,
        "path" => "deployments",
        "relative-to" => "jboss.server.base.dir",
        "scan-enable" => "true,
        "scan=interval" => 5000
    }}}
}

 

배포 스캐너에서 설정할 수 있는 파라미터는 다음과 같습니다.

파라미터 데이터 타입 설명
name STRING 스캐너의 이름, 기본값은 'default'
path STRING 스캐너가 감시하는 파일 시스템의 경로
 - relative-to가 설정되지 않은 경우 : 절대경로
 - relative-to가 설정된 경우 : 상대 경로
relative-to STRING 디렉터리의 지정
환경 변수 등에 설정한 경로를 참조하는 경로로 기본값은 'jboss.server.base.dir'
scan-enabled BOOLEAN 스캔을 사용할 것인지를 지정
scan-interval INT 스캔 간격을 밀리 세컨드로 지정
1 이상의 값을 지정했을 경우에만 스캔이 실행됨
auto-deploy-zipped BOOLEAN 압축된 애플리케이션 컨텐츠를 .dodeploy 마커 파일을 사용하지 않고 배포할 것인지를 지정
auto-deploy-exploded BOOLEAN exploded(압축이 풀린) 형식인 애플리케이션 컨텐츠를 .dodeploy 마커 파일을 사용하지 않고 배포할 것인지를 지정
애플리케이션을 배포하는 중 컨텐츠가 수정될 수 있기 때문에 이 방식을 사용하는 것은 권장하지 않음
deployment-timeout LONG 배포의 타임아웃
기본값 : 60초

 

① 스캔 간격

스캔 간격(scan-interval)은 배포 스캐너가 디렉터리 스캔 간격을 지정하는 항목입니다. 스캔 간격을 0으로 설정하면 자동 배포는 사용할 수 없습니다. 서버 시작 시 배포 및 마커 파일로 수동 배포 제어를 할 수 있습니다.

 

다음에 스캔 간격(scan-interval)을 0으로 설정하는 CLI 예제입니다.

[standalone@localhost:9999 subsystem=deployment-scanner] cd scanner=default
[standalone@localhost:9999 scanner=default] :write-attribute(name=scan-interval,value=0)
{ "outcome" => "success" }

 

② 배포 스캐너 사용 설정

배포 스캐너의 scan-enabled 속성은 배포 스캐너 기능을 사용할 것인지를 지정하는 항목입니다.

 

이 설정은 standalone*.xml 파일의 deployment-scanner 서브시스템의 scan-enabled 항목을 설정하면 됩니다. 서버 시작 시에만 배포하고 싶은 경우, scan-enabled 항목을 false로 설정합니다.

[standalone@localhost:9999 scanner=default] :write-attribute(name=scan-enabled,value=false)
{ "outcome" => "success" }

 

 

(2) 수동 배포

배포 스캐너는 애플리케이션 배포 디렉터리에 있는 컨텐츠 자체는 감시하지 않습니다. 대신 스캐너는 마커 파일 시스템을 사용하여 그 마커 파일을 추가, 삭제하는 것을 명령어로 스캐너에 전달하여 컨텐츠를 배포, 제거 합니다.

 

① 마커 파일

마커 파일(Marker Files)은 관련하는 컨텐츠의 파일명 뒤의 확장자(extension)르르 추가하여 만듭니다. 예를 들어, example.war 파일의 배포하기 위한 마커 파일명은 example.war.dodeploy가 됩니다. 마커 파일은 파일 내에 내용이 없는 0 바이트 비어있는 파일을 만들면 됩니다. 리눅스에서는 touch 명령을 이용하여 파일을 만들 수 있습니다. 예를 들면 'touch example.war.dodeploy' 명령은 빈 파일을 생성합니다.

 

마커 파일의 확장자의 종류는 다음과 같습니다.

확장자 설명 작업 주체
.dodeploy 애플리케이션을 배포하라고 알립니다.
이미 배포했을 경우엔 재배포 합니다.
사용자가 작성하는 파일입니다.
관리자가 배포 시 작성
.skipdeploy 이 애플리케이션은 자동 배포를 사용하지 않는다는 것을 뜻합니다.
exploded 애플리케이션을 업데이트할 때, 재배포되지 않도록 할 때 사용할 수 있습니다.
관리자가 작성
.isdeploying 애플리케이션이 배포 중임을 나타내는 파일입니다.
배포 스캐너가 작성하는 파일입니다.
시스템에서 자동 생성
.deployed 애플리케이션 배포가 완료되었음을 나타냅니다.
배포 스캐너가 작성하는 파일로 사용자가 이 파일을 삭제햇을 경우엔 컨텐츠가 배포되지 않습니다.
시스템에서 자동 생성
.failed 애플리케이션 배포 중 오류가 발생하여 배포 실패한 것을 나타냅니다.
배포 스캐너가 작성하는 파일로 파일 안에 배포 오류 메시지가 들어있습니다.
시스템에서 자동 생성
.isundeploying .dodeploy 파일이 삭제되어 애플리케이션이 undeploy되고 있는 상태를 나타냅니다.
배보 스캐너가 작성하는 파일입니다.
undeploy가 완료되면, 이 마커 파일은 삭제됩니다. 
시스템에서 자동 생성
.undeployed 애플리케이션이 undeploy된 상태를 나타냅니다. 시스템에서 자동 생성
.pending 서버에서 애플리케이션을 배포하고 있거나, 문제가 생겨 애플리케이션 배포 명령을 서버에 보내지 못한 상태를 나타냅니다. 시스템에서 자동 생성

 

② 배포 스캐너를 사용한 새로운 애플리케이션 배포

아래와 같이 배포 스캐너의 'scan-enabled=true' 속성을 확인합니다.

[standalone@localhost:9999 scanner=default] /subsystem=deployment-scanner/scanner=default:read-resource(recursive=true)
{
	"outcome" => "success",
    "result" => {
    	"auto-deploy-exploded" => false,
        "auto-deploy-xml" => true,
        "auto-deploy-zipped" => true,
        "deployment-timeout" => 600,
        "path" => "deployments",
        "relative-to" => "jboss.server.base.dir",
        "scan-enabled" => true,
        "scan-interval" => 5000
    }
}

 

  • 컨텐츠를 deployments 디렉터리에 복사
$ cp /CLOUD/APP/example.war $JBOSS_HOME/standalone/deployments
$ ls
README.txt	example.war

 

  • 마커 파일 작성
$ cd $JBOSS_HOME/standalone/deployments
$ touch example.war.dodeploy

 

  • 배포 확인
$ ls
README.txt	example.war	example.war.deployed

 

  • 배포 삭제
$ rm -rf $JBOSS_HOME/standalone/deployments/example.war
$ ls
README.txt	example.war.undeployed

 

 

 

참고서적 : 거침없이 배우는 JBoss

반응형

댓글