메인 컨텐츠로 가기

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

사람을 위한 자동화: 전개 자동화 패턴, Part 1

원클릭 전개 패턴

Paul Duvall, CTO, Stelligent
Paul Duvall
Paul Duvall은 상품성을 갖춘 소프트웨어를 개발하는 데 필요한 지원을 제공하는 컨설팅 회사인 Stelligent의 CTO이다. Addison-Wesley Signature Series 중 하나인 Continuous Integration: Improving Software Quality and Reducing Risk(Addison-Wesley Professional, 2007년, Jolt Award 2008 수상)의 공동 저자이며 UML 2 Toolkit(Wiley, 2003년) 및 No Fluff Just Stuff Anthology(Pragmatic Programmers, 2007년)에도 도움을 주었다.

요약:  Java™ 전개는 복잡하고, 오류가 발생하기 쉬우며, 수작업으로 진행되기 때문에 소프트웨어를 사용자에게 제공하기 전까지 많은 시간이 지연되기도 합니다. 2편의 기사로 구성된 사람을 위한 자동화 시리즈의 Part 1에서는 자동화 전문가인 필자가 Java 애플리케이션에 대한 원클릭 전개 기능을 제공하는 신뢰할 수 있고, 반복 가능하며 일관된 전개 프로세스를 개발하는 데 도움이 되는 주요 패턴들에 대해 설명합니다.

이 연재 자세히 보기

원문 게재일:  2009 년 1 월 13 일 번역 게재일:   2009 년 5 월 12 일
난이도:  초급 영어로:  보기 PDF:  A4 and Letter (79KB | 13 pages)Get Adobe® Reader®
페이지뷰:  3004 회
의견:  


소프트웨어 전개는 프로덕션 전 단계에서 대충 수행할 수 있는 필요악으로 간주되기도 한다. 그러나 개발 주기의 다른 부분뿐 아니라 전개 부분에 있어서도 소프트웨어 엔지니어링 원칙을 적용해야 한다. 수작업으로 적용할 경우 전개는 반복적이면서 많은 오류가 발생할 수 있는 프로세스가 된다. 빌드 자동화를 통해 오류를 줄이고 소프트웨어 개발 시간을 단축할 수 있는 것처럼 전개 프로세스도 자동화를 통해 오류를 줄이고 소프트웨어 전달 시간을 단축할 수 있다.

사람을 위한 자동화 기획 기사로 실린 "자동화를 통한 신속한 전개"에서는 소프트웨어를 여러 대상 환경에 원격으로 전개하는 기술을 살펴보았다. 2편의 기사로 구성된 이 시리즈에서는 수준을 높여서 자동화된 전개에 대해 설명한다. 소프트웨어 개발에 대한 패턴이 있는 것처럼 전개에 대한 패턴도 있으며, 필자는 지난 수 년 동안 이들 패턴을 분류해 보았다. Part 1에서는 다음과 같은 8가지 전개 패턴을 예제와 함께 설명한다.

  • 집중식 저장소에서 모든 구성 파일 관리하기: 스크립트를 이용한 전개를 통해 작업 소프트웨어를 생성할 수 있다.

  • 스크립트를 이용한 전개: 모든 전개 조치를 스크립트로 작성하므로 사용자 개입 없이 전개를 실행할 수 있다.

  • 단일 명령: 전개 복잡도를 줄이고 전개 프로세스의 헤드리스 실행을 보장한다.

  • 토큰을 이용한 구성: 구성 파일에 변경 가능한 정보를 반복적으로 삽입할 수 있는 방법을 제공한다.

  • 외부화된 구성: 대상 환경에 따라 달라지는 정보를 한 번만 입력하면 된다.

  • 템플리트 검증 도구: 모든 대상 환경 특성이 동일하도록 보장한다.

  • 헤드리스 실행: 자동화된 프로세스를 통해 여러 시스템에 안전하게 액세스할 수 있는 방법을 제공한다.

  • 통합 전개: 여러 대상 환경에서 실행할 수 있는 단일 전개 스크립트를 활용한다.

Part 2에서는 다른 여러 가지 전개 패턴에 대해 설명한다.

이 시리즈의 정보

개발자는 일반 사용자를 위해 프로세스를 자동화하는 작업을 수행하지만 정작 자신의 개발 프로세스를 자동화할 수 있는 기회를 간과하는 개발자도 많다. 이러한 개발자를 위해 사람을 위한 자동화 시리즈에서는 소프트웨어 개발 프로세스 자동화의 실제 사례를 살펴보고 자동화를 성공적으로 적용할 수 있는 시기방법에 대해 설명한다.

그림 1에서는 이 기사에서 다루는 전개 패턴 간의 관계를 보여 준다.


그림 1. 전개 자동화 패턴
전개 자동화 패턴

이 기사에서 설명하는 순서에 따라 각 패턴에 대한 설명을 읽게 되면 그림 1에서 설명하는 상호 관계를 이해할 수 있다.

버전 제어 저장소에서 모든 파일 관리하기

이름: 저장소

패턴: 전개 컨텍스트에서 사용되는 모든 구성 파일 및 도구를 포함한 모든 파일을 버전 제어 저장소에서 관리한다.

안티 패턴: 일부 팀에서는 이 정보를 액세스가 통제된 공유 드라이브에 저장한다. 로컬 시스템에만 정보를 저장해 놓은 후 대상 환경에 복사하는 방법을 사용하는 팀도 있다.

일반적인 규칙에 따르면 개발 팀에서 작업 소프트웨어를 만드는 데 필요한 모든 파일을 체크인하는 것이 좋다. 예외적으로 이 규칙이 적용되지 않는 경우도 있지만 대부분의 경우에는 이 규칙이 적용된다. 전개 컨텍스트에서 일부 팀은 실수로 서버 및 서버 구성을 고정 자산으로 간주하고 변경하지 않기도 한다. 대용량 바이너리를 체크인하는 데에 따른 제약이 있기도 하지만 구성, 데이터베이스 스크립트 및 모든 빌드 및 전개 스크립트를 버전 제어 저장소에서 관리해야 한다. 저장소 패턴은 다음에 설명할 스크립트를 이용한 전개 패턴 및 특히, 단일 명령 패턴에서 많은 도움이 된다.


모든 전개 프로세스를 스크립트화하기

이름: 스크립트를 이용한 전개

패턴: 모든 전개 프로세스를 한 스크립트로 작성한다.

안티 패턴: 일부 팀에서는 웹 컨테이너 설치 및 구성 등의 작업을 수동으로 구성할 수 있다. 특정 환경을 기반으로 하는 컨테이너를 수정하기 위해 해당 컨테이너에서 제공하는 GUI 기반 관리 도구를 사용하는 경우도 있다. 구성을 수동으로 수정하는 작업이 처음에는 간단할 수도 있지만 1주일에 여러 차례에 걸쳐서 많은 대상 환경에 대한 여러 전개를 수행할 경우에는 적합한 방법이 아니다. 또한 GUI 기반 관리 도구를 처음 사용할 때는 전개 작업에 매우 유용할 수 있다. 하지만 이 방법도 많은 사람이 이러한 프로시저를 반복해서 수행해야 하므로 오류가 발생하기 쉽고 적합한 방법이 되지 못한다.

Listing 1에서 보여 주는 스크립트를 이용한 전개 패턴에서는 스크립트를 이용한 전개를 통해 Tomcat 웹 컨테이너를 시작 또는 다시 시작하는 프로세스를 자동화한다. 이 프로세스는 Apache Ant 빌드 스크립트 언어로 작성되었다.


Listing 1. Tomcat 웹 컨테이너 시작 예제

<available file="@{tomcat.home}/server/@{tomcat.server.name}/bin" 
   property="tomcat.bin.exists"/>
<if>
  <isset property="tomcat.bin.exists"/>
<then>
  <echo message="Starting tomcat instance at @{tomcat.home} with start_tomcat" />
  <exec executable="@{tomcat.home}/server/@{tomcat.server.name}/bin/start_tomcat" 
   osfamily="unix" />
</then>
<else>
  <echo message="Starting tomcat instance at @{tomcat.home} with startup.sh" />
  <exec osfamily="unix" executable="chmod" spawn="true">
    <arg value="+x" />
    <arg file="@{tomcat.home}/bin/startup.sh" />
    <arg file="@{tomcat.home}/bin/shutdown.sh" />
  </exec>
		
  <exec executable="sh" osfamily="unix" dir="@{tomcat.home}/bin" spawn="true">
    <env key="NOPAUSE" value="true" />
    <arg line="startup.sh" />
  </exec>

    <exec osfamily="windows" executable="cmd" dir="@{tomcat.home}/bin" spawn="true" >
      <env key="NOPAUSE" value="true" />
        <arg line="/c startup.sh" />
    </exec>
    <sleep seconds="15" />
    </else>
  </if>

이 프로세스를 스크립트로 작성했으므로 이 경우에는 Tomcat의 GUI 관리 콘솔에서 마우스를 클릭할 필요가 없어졌다. 게다가 스크립트로 작성되었기 때문에 헤드리스 프로세스를 통해 자동화된 종합 전개의 일부로 실행할 수도 있다.


단일 명령으로 전개 실행하기

이름: 단일 명령

패턴: 전개자 또는 헤드리스 프로세스가 단일 명령을 입력하여 사용자를 위한 작업 소프트웨어를 생성할 수 있다.

안티 패턴: 일부 전개 프로세스에서는 사람이 파일 복사, 구성 파일 수정, 서버 다시 시작, 암호 설정 및 기타 반복적이고 오류가 발생하기 쉬운 조치를 수행하기 위해 여러 명령과 프로시저를 입력해야 한다. 운이 좋은 경우 이러한 조치를 수행하는 과정을 안내하는 단계별 프로시저 설명서가 제공될 수도 있지만 그렇다고 하더라도 사람이 전개 프로시저를 수행해야 하는 경우에는 오류의 위험성이 상존하고 여러 대상 환경에 소프트웨어를 릴리스하는 동안 많은 시간이 지연될 수 있다.

개발과 프로덕션은 서로 다르다

개발 또는 QA 환경에서 소프트웨어가 작동하더라도 프로덕션 환경에서는 소프트웨어가 작동하지 않을 수 있으며 이러한 현상은 환경 간의 잠재적 차이로 인해 발생한다. 바로 이 때문에 전개의 모든 부분을 스크립트로 작성해야 하는 것이다.

전개를 작성할 때 자신의 팀, 조직, 회사 또는 시스템의 다른 사용자가 클라이언트인 경우도 종종 있다. 전개를 실행하는 과정이 복잡할수록 다른 사용자 또는 헤드리스 프로세스에서 오류 없이 전개를 성공적으로 실행할 수 있는 가능성이 낮아진다. Listing 2에서는 전개를 실행하는 간단한 단일 명령 예제를 보여 준다.


Listing 2. Ant를 사용한 단일 명령 전개

ant -Dproperties.file=$USERHOME/projects/petstore/properties/dev-install.properties \
  deploy:remote:install

Listing 2의 명령은 다른 시스템에 원격으로 소프트웨어를 전개하기 위해 환경 관련 .properties 파일을 함께 전달하면서 deploy:remote:install이라는 Ant 태스크를 실행한다. 이 작업은 SCP(Secure Copy Protocol)를 사용하여 파일을 안전하게 복사하고, SSH(Secure Shell)를 통해 원격 시스템에서 안전하게 명령을 실행하고, 웹 컨테이너를 설치, 구성 및 다시 시작하고, 다른 프로세스에 대한 호스트 기능을 제공하는 등의 조치를 사용자의 간섭 없이 수행한다. 물론 사용자가 명령을 입력할 수 있기는 하지만 매우 간단한 명령이므로 지속적인 통합 또는 빌드 관리 서버와 같은 헤드리스 프로세스에서 쉽게 실행할 수 있다.


구성 파일에 변경 가능한 정보 삽입하기

이름: 토큰을 이용한 구성

패턴: 토큰 값을 구성 파일에 입력된 후 저장소에 체크인된 외부화된 구성 특성을 기반으로 스크립트를 이용한 전개 동안 토큰 값을 바꾼다.

안티 패턴: 대상 관련 데이터를 각 환경의 구성 파일에 입력한다.

Listing 3은 웹 컨테이너와 데이터베이스 서버 간의 구성을 관리하는 XML 파일이다. 이 파일에서는 @ 기호를 사용하여 토큰을 배치했다. 자동화된 전개 프로세스 동안 스크립트가 실행되면서 이러한 토큰이 외부화된 구성 파일의 실제 값으로 바뀐다.


Listing 3. 토큰을 이용한 웹 컨테이너 구성 파일

<datasources>
  <local-tx-datasource>
    <jndi-name>@application.context.name@</jndi-name>
    <use-java-context>false</use-java-context>
    <connection-url>@database.url@</connection-url>
    <user-name>@database.user@</user-name>
    <password>@database.password@</password>
    <driver-class>@database.driver@</driver-class>
  </local-tx-datasource>
</datasources>

환경 관련 값이 될 항목을 토큰으로 지정하게 되면 스크립트를 이용한 전개와 통합 전개를 통해 여러 환경을 지원할 수 있다.


모든 환경 관련 특성 추출하기

이름: 외부화된 구성

패턴: 애플리케이션 구성의 모든 변수 값을 빌드 타임 특성으로 외부화한다.

안티 패턴: 일부 개발자는 각 대상 환경별로 이러한 값을 수동으로 하드코딩하거나 GUI 도구를 사용하여 동일한 작업을 수행한다.

Listing 4에서는 코드 베이스를 통해 애플리케이션 관련 구성 파일에 종종 포함되어 있는 일부 특성을 보여 준다. 모든 변수 값을 단일 .properties 파일로 모아 놓으면 데이터(변수 특성)와 동작(전개 스크립트)을 분리할 수 있다. 다시 말해서, 대상 환경과 상관 없이 자동화된 전개 프로세스가 항상 동일한 방법으로 실행된다.


Listing 4. 애플리케이션 관련 파일과 분리된 예제 특성

authentication.type=db
application.url=http://${tomcat.server.hostname}:${tomcat.server.port}/brewery-webapp
database.type=mysql
database.server=localhost
database.port=3306
database.name=mydb
database.user=myuser!
database.password=mypa$$!
database.url=jdbc:mysql://${database.server}:${database.port}/${database.name}
tomcat.server.hostname=localhost
tomcat.server.name=default
tomcat.web.password=pa$$123!
tomcat.cobraorb.port=12748

Listing 4의 값은 소스 코드, 서버 구성, XML, .properties 및 기타 파일에 흩어져 있다. 더구나 이 데이터는 시스템 전체에서 중복되기 때문에 디버깅하기에 까다로운 복잡한 전개 문제를 일으킬 수 있다. 이 많은 소스에 흩어져 있는 이 정보를 단일 .properties 파일로 추출하게 되면 발생 가능한 여러 가지 전개 문제를 줄일 수 있다.


헤드리스 실행을 통해 보안 강화하기

이름: 헤드리스 실행

패턴: 명령을 입력하지 않고 여러 시스템과 안전하게 통신한다.

안티 패턴: 각 시스템에 각기 다른 사용자로 로그인하여 시스템에 수동으로 액세스한 후 파일을 복사하고, 값을 구성하는 등의 작업을 수행한다.

이름이 투박하기는 하지만 헤드리스 실행은 자동화된 프로세스를 통해 원격으로 다른 시스템에 액세스해야 하는 경우 매우 효과적으로 사용할 수 있는 방법이다. PKI(Public Key Infrastructure)를 사용하여 일반적으로 개발자, 빌드 엔지니어, SCM(Software Configuration Management) 또는 운영자에게 의존하게 되는 명령을 자동화된 솔루션으로 만들 수 있다. 그림 2에서는 개인 키 파일이 빌드 시스템 및 SSH에 설치되어 있으며 특정 값이 각각의 대상 관련 .properties 파일에 정의되어 있다. 이 파일에는 일반적으로 개인 키 파일 이름 및 위치, SSH 포트 번호 및 호스트 이름이 있다. 대상 시스템은 공용 SSH 키 파일을 호스트하여 SSH 핸드셰이크를 완료한다.


그림 2. SSH 키를 사용하여 헤드리스 실행 패턴 구현하기
SSH 키를 사용하여 헤드리스 실행 패턴 구현하기

이 방법을 사용할 경우에는 스크립트를 이용한 전개에서 사용자의 개입 없이 빌드 환경의 프로세스를 대상 환경에 실행할 수 있다.


모든 환경에서 특성이 동일한지 검증하기

이름: 템플리트 검증 도구

패턴: 모든 대상 환경 특성의 기반이 되는 단일 템플리트 파일을 작성한다.

안티 패턴: 일부 개발자는 수동 검증 또는 시도 및 오류(전개 실패 시 원인 확인) 방법을 사용하거나 파일을 "숨겨진" 채로 시스템에 둔다.

모든 대상 환경의 속성이 완전히 동일하도록 보장해야 하지만 자동화된 환경에서 이를 검증할 수 있는 방법이 필요하다. 모든 대상 환경 파일을 검증하는 단일 템플리트 .properties 파일을 사용하면 실행 중인 환경에 관계 없이 모든 속성이 동일하도록 보장할 수 있다. 그림 3의 빌드 스크립트에서는 template.properties와 대상 관련 .properties 파일(dev.properties, qa.properties 등)의 속성(값이 아님)을 비교하는 Ant 태스크를 실행한다. 서로 다른 점이 발견되면 전개가 실패한다.


그림 3. 템플리트 검증 도구 패턴의 구현
템플리트 검증 도구 패턴의 구현

Listing 5에서는 그림 3에서 설명한 template.properties 파일의 예제를 보여 준다. 값은 관련이 없기 때문에 이 파일에는 속성만 있다.


Listing 5. 값이 아닌 속성이 포함된 템플리트 파일

db.database=
db.username=
db.password=
db.hostname=
db.driver=
db.port=
db.url=

Listing 6에서는 그림 3에서 설명한 dev.properties(또는 qa.properties 등) 파일의 일부를 보여 준다. 이 파일에는 속성 값이 있다. 값은 대상 환경과 관련된다.


Listing 6. 템플리트 파일을 기반으로 하는 대상 환경 특성 파일

db.database=brewery
db.username=root
db.password=p@ssword
db.hostname=dev1.domain.com
db.driver=com.mysql.jdbc.Driver
db.port=3306
db.url=jdbc:mysql://${db.hostname}:${db.port}/${db.database}


여러 대상 환경에 한 번에 전개하기

이름: 통합 전개

패턴: 다양한 플랫폼 및 대상 환경에서 실행할 수 있는 단일 전개 스크립트를 작성한다.

안티 패턴: 각각의 대상 환경 또는 특정 시스템에 대해 각기 다른 전개 스크립트를 사용한다.

일부 전개 프로세스가 특정 환경에서 실행될 수 있기는 하지만 모든 프로세스는 모든 대상 환경에서 실행할 수 있어야 한다. 예를 들어, 동일한 스크립트를 이용한 전개가 개발, 테스트, 스테이지 및 프로덕션 환경에서 실행되지만 서로 다른 외부화된 구성 파일을 사용한다. 외부화된 구성 속성은 템플리트 검증 도구를 사용하여 검증된다.

그림 4에서는 여러 대상 환경에 전개할 수 있는 단일 전개 스크립트를 보여 준다.


그림 4. 단일 전개, 여러 대상 환경
단일 전개, 여러 대상 환경

추가 전개 패턴

전개는 자동화에 적합한 소프트웨어 작성 과정의 한 부분이다. 전개를 자동화하면 신뢰할 수 있고 반복 가능한 프로세스의 장점 즉, 정확도, 속도 및 제어를 향상시킬 수 있다. 이 기사에서는 소프트웨어 전개를 자동화하는 데 효과적인 8가지 패턴을 살펴보았다. Part 2에서는 원격 전개, 처분 가능한 컨테이너, 전개 테스트 및 환경 롤백을 포함한 여러 가지 패턴을 추가로 설명한다.


참고자료

교육

제품 및 기술 얻기

  • Ant: Ant를 다운로드하여 예측 가능하고 반복 가능한 방식으로 소프트웨어 빌드를 시작하자.

토론

필자소개

Paul Duvall

Paul Duvall은 상품성을 갖춘 소프트웨어를 개발하는 데 필요한 지원을 제공하는 컨설팅 회사인 Stelligent의 CTO이다. Addison-Wesley Signature Series 중 하나인 Continuous Integration: Improving Software Quality and Reducing Risk(Addison-Wesley Professional, 2007년, Jolt Award 2008 수상)의 공동 저자이며 UML 2 Toolkit(Wiley, 2003년) 및 No Fluff Just Stuff Anthology(Pragmatic Programmers, 2007년)에도 도움을 주었다.

잘못된 도움말 신고

부정사용 신고

감사합니다. 이 항목은 운영자가 관심을 표시했습니다.


잘못된 도움말 신고

부정사용 신고

제출실패 신고. 나중에 다시 실행해주세요.


디벨로퍼웍스 로그인


IBM ID가 필요하세요?
IBM ID를 잊으셨습니까?


비밀번호를 잊으셨습니까?
비밀번호 변경

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

화면상에 보여지는 닉네임을 정하세요.

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

3개의 &이나 대쉬를 포함해주시고 31글자내로 제한해주세요.


developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


아티클 순위

의견

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=20
Zone=자바
ArticleID=388515
ArticleTitle=사람을 위한 자동화: 전개 자동화 패턴, Part 1
publish-date=01132009
author1-email=paul.duvall@stelligent.com
author1-email-cc=jaloi@us.ibm.com

태그

Help
검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오.

태그를 더 많이 보거나 적게 보기 위해 슬라이더 막대를 사용하십시오.

인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다.

내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.

검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오. 인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다. 내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.