IBM®
메인 컨텐츠로 가기
    Korea [국가변경]    이용약관
 
 
   
        제품    서비스 & 솔루션    고객지원 & 다운로드    회원 서비스    
메인 컨텐츠로 가기

한국 developerWorks  >  자바 | 오픈 소스  >

사람을 위한 자동화: 마법사 기반 설치 프로그램 사용하기

IzPack으로 GUI 설치 프로그램 만들기

developerWorks
문서 옵션

JavaScript가 필요한 문서 옵션은 디스플레이되지 않습니다.

영어원문

영어원문


제안 및 의견
피드백

난이도 : 초급

Paul Duvall, CTO, Stelligent

옮긴이 : 백기선 dwkorea@kr.ibm.com

원문 게재일 : 2008 년 11 월 25 일
번역 게재일 : 2009 년 1 월 20 일

소프트웨어 설치는 많은 사용자에게 보통 고통스러운 일에 해당합니다. 여러분이 생성한 설치 패키지(소프트웨어 개발의 "마지막 일정")는 사용자에게 채택되거나 쓰레기통에 버려지는 갈림길에서 예전보다 나아질 수 있습니다. 이번 사람을 위한 자동화 기사에서, 자동화 전문가 Paul Duvall은 무료로 이용할 수 있는 오픈 소스 IzPack 도구를 사용하여 마법사 기반 설치 프로그램을 만들어 여러분의 소프트웨어를 사용자가 간단하게 설치할 수 있게 하는 방법을 살펴보겠습니다.

내 경험을 전반적으로 볼 때, 나는 소프트웨어 개발 전체 생명 주기에 참여해왔다. 요구 사항 도출, 설계, 개발 그리고 테스트뿐만 아니라 배포, 빌드 관리, 문서화, 설치 같은 활동에도 참여했다. 요즘 애자일을 많이 채택하면서 이 부류가 좀 더 많아졌고 일반화되었다. 하지만 내가 참여했던 애자일 프로젝트에서 효율적인 배포와 설치가 항상 최우선 과제는 아니었다. 이것이 바로 아이러니다. 잠재적인 고객이 여러분의 소프트웨어를 쉽게 사용할 수 없거나 아예 사용할 수 없다면, 여러분은 그들을 잃을 것이기 때문이다. 여러분의 소프트웨어를 간단하게 설치하는 방법을 제공하는 것은 고객을 유지하고 더 끌어오는데 정말로 중요하다.

본 연재에 대하여

개발자로서 우리는 사용자의 프로세스를 자동화하는 일을 한다. 그렇지만 개발자 중 많은 사람이 개발 프로세스를 자동화하는 기회를 간과한다. 이를 위해 사람을 위한 자동화는 소프트웨어 개발 프로세스를 자동화하는 실용적인 용례를 살펴보고 자동화를 성공적으로 언제, 어떻게 적용할지 가르치는 데 중점을 둔 연재다.

나는 수년에 걸쳐 여러 설치 프로그램 도구를 사용해왔다. 대규모 프로젝트에서 내 팀은 올해 초에 일을 시작했고, 엔터프라이즈 수준의 설치 프로그램을 만들어 달라는 매우 상세한 요구사항을 만족시켜야 했다. 우리는 Antigen, AntInstaller, Denova, install4j, InstallAnywhere, IzPack, NSIS와 여러 가지를 살펴봤다. 우리가 가진 요구사항을 바탕으로 다음과 같은 이유로 IzPack을 사용하기로 결정했다.

  • 여러 플랫폼에서 동작한다. 우리는 윈도우(Windows®), 리눅스(Linux®), 매킨토시(Macintosh)를 지원해야 했다.

  • IzPack은 우리 팀이 매우 경험이 많은 자바(Java™) 언어를 사용한다.

  • 아파치 앤트 스크립트를 실행할 수 있다. 우리는 소프트웨어 개발에서 앤트 스크립트 작성에 많은 시간을 투자했다.

  • IzPack은 무료로 다운로드하여 사용할 수 있다.

IzPack은 2001년부터 사용할 수 있었다. 마법사 기반 설치 프로그램을 만드는 여러 기능을 제공한다. 본 기사에서, 나는 이 도구를 사용하여 설치 프로그램을 만드는 방법을 보여줄 것이다. 패널을 정의하고, 검증기 스크립트를 작성하고, 리소스를 설정하는 등의 예제를 제공하겠다.

IzPack 다운로드하고 설치하기

IzPack 문서

가장 먼저 살펴봐야 할 하위 폴더는 doc 폴더다. 여기에는 HTML, PDF, Javadoc 버전의 문서들이 있다. 이 문서들은 IzPack에 스크립트를 어떻게 작성하는지 살펴볼 때 여러분의 동료가 될 것이다.

IzPack 다운로드와 설치는 매우 간단하다. 별로 놀랍지 않게도 IzPack은 IzPack을 사용해 컴퓨터에 IzPack을 설치한다. IzPack 웹 사이트를 참조하여 IzPack JAR 파일을 다운로드하라(참고자료 참조).

자바 런타임 환경(JRE)을 실행하여 IzPack을 설치해야 한다. 커맨드 창을 열고 다음을 입력한다. java -jar IzPack-install-4.1.0.jar 적당한 버전으로 수정해 입력하라.

마법사 기반 설치 프로그램이 어디에 IzPack을 설치하고 싶은지와 같은 몇 가지 기본 설치 정보를 요구할 것이다. 일단 IzPack을 설치하면, 예제 설치 프로그램을 가지고 실행해보는 것은 쉽다.




위로


예제 스크립트 수정

IzPack은 완전한 예제 설치 스크립트를 제공한다. 그것을 기반으로 사용하여 설치 프로그램을 작성하는 것이 설치 프로그램을 가장 빠르게 만드는 방법이다. IzPack을 설치한 최상위 디렉터리에는 하위 디렉터리가 몇 개 있다. bin, doc, lib 등이다. 예제 설치 프로그램은 sample이라는 하위 폴더에 있다. 그 안에 설치 프로그램을 만들 때 필요한 모든 것이 들어있다. 나는 이 예제 디렉터리를 복사해 원래 내용을 변경하지 않고 내용을 수정해볼 수 있게 했다. 그림 1은 예제 디렉터리의 내용을 보여준다.


그림 1. IzPack 파일 목록
IzPack 파일 목록

그림 1에 있는 각각의 파일에 대한 설명은 다음과 같다.

  • antActionSpec.xml: 빌드 관련 앤트 스크립트를 실행하는 파일
  • install.jar: IzPack 컴파일을 할 떄 생성한 설치 JAR 파일. 이것이 사용자가 실행하는 설치 프로그램 파일이다.
  • install.xml: IzPack 주요 설치 스크립트. IzPack 설치 프로그램에서 사용하는 모든 리소스는 이 스크립트로 시작한다.
  • Licence.txt: 여러분의 설치 프로그램에 대한 라이선스 파일
  • Readme.txt: 설치를 진행할 소프트웨어 사용자를 위한 readme 파일
  • userInputSpec.xml: IzPack 관련 XML 스크립트로 사용자가 설치 프로그램 패널에 정보를 입력할 때 행동(검증, 기본 값, 필드 크기 등)을 정의한다.

다음으로 install.xml 스크립트를 살펴보면서 IzPack을 좀 더 자세히 들여다 보겠다.

리소스

리소스는 스크립트, 이미지, 라이선스, 설치 프로그램을 구성하는 여러 파일을 정의한다. 나는 install.xml 스크립트에 <resources> XML 엘리먼트를 정의했다. <resources> 엘리먼트 안에 내 설치 프로그램이 필요로 하는 여러 파일을 정의할 수 있다. Listing 1을 보자.


Listing 1. 리소스 파일을 IzPack install.xml에 정의하기
<resources>
  <res id="LicencePanel.licence" src="Licence.txt"/>
  <res id="InfoPanel.info" src="Readme.txt"/>
  <res id="AntActionsSpec.xml" src="antActionSpec.xml" />
  <res id="userInputSpec.xml" src="userInputSpec.xml" />
</resources>

IzPack의 리소스를 설치 프로그램이 필요로 하는 모든 파일을 정의한 "부품표(bill of material)"의 일종으로 생각할 수 있다.

패널

패널은 사용자가 설치 마법사 각 단계에서 보는 것이다. IzPack은 여러 종류의 패널을 제공한다. 따라서 그것들 중에서 필요로 하는 것을 기반으로 수정하면 된다. 그림 2에서 나는 IzPack의 HelloPanel을 수정하여 몇 가지 기본 정보를 사용자에게 제공했다.


그림 2. IzPack이 제공하는 커스텀 마법사 기반 GUI 설치
IzPack이 제공하는 커스텀 마법사 기반 GUI 설치

표준 패널에는 LicensePanel, UserInputPanel, PacksPanel과 그 외 몇 가지가 있다. install.xml 파일 안에 <panels> 엘리먼트를 사용해 보여주려는 패널을 정의한 다음 설치 프로그램을 스크립팅할 때 사용할 패널 템플릿을 정의한다. Listing 2의 예제에서 어떻게 패널 템플릿을 정의하는지 보여준다.


Listing 2. 설치 프로그램에서 보여줄 패널 정의하기

<panels>
  <panel classname="HelloPanel"/>
  <panel classname="InfoPanel"/>
  <panel classname="LicensePanel"/>
  <panel classname="UserInputPanel" id="UserInputPanel.0" />
  <panel classname="TargetPanel"/>
  <panel classname="PacksPanel"/>
  <panel classname="InstallPanel"/>
  <panel classname="FinishPanel"/>
</panels>

아마도 가장 자주 사용할 패널 타입은 UserInputPanel일 것이다. 이 패널 템플릿을 사용하여 사용자가 특정 주요 정보를 입력하게 할 수 있다. 여기에는 사용자의 연락처 정보, 인증 정보, 디렉터리 위치 등을 포함할 수 있을 것이다. 사용자에게 그들의 특정 환경에 따라 몇 가지 입력 패널을 제공해야 할지도 모른다. 우리 팀의 경우 사용자가 데이터베이스에 접근하여 여러 JBoss 컨테이너를 설정할 필요가 있었기 때문이다. 따라서 사용자에게 사이트 관련 정보를 보여주는 패널을 사용했다.

Listing 3은 userInputSpec.xml에 있는 예제로, Listing 1에서 리소스로 정의했다. 이 예제에서는 사용자 관련 정보를 수집하여 특정 DB에 접근한다.


Listing 3. 설치 프로그램의 특정 패널의 속성 정의하기
<panel order="0">
<field type="title" txt="Configuring your database connection" bold="true" size="1" />
<field type="staticText" align="left" txt="Connect to an existing database..."/>
<field type="divider" align="top"/>

<field type="text" variable="database.hostname">
  <spec txt="Database Host Name:" id="databasehostname.label" size="40" set=""/>
  <validator class="com.izforge.izpack.util.NotEmptyValidator" 
      txt=" Database Hostname is a required field" />
</field>
...
</panel>

패널의 order 속성은 0으로 설정했다. 이는 Listing 2의 패널 집합에서 정의한 UserInputPanel의 숫자와 일치한다.

user-input 패널에서, 사용자를 위한 정보 텍스트를 정의할 수 있다. 또한, NotEmptyValidator를 추가하여 사용자가 유효한 값을 입력하도록 했다. 이렇게 하면 사용자가 필요한 정보를 입력하지 않아 설치 에러가 발생하는 것을 막을 수 있다. Listing 3에 있는 UserInputPanel은 그림 3처럼 보일 것이다.


그림 3. 사용자 입력 패널
사용자 입력 패널

사용자는 보통 얼마나 쉽게 정보를 입력하고 유용한 메시지를 보여주는지에 따라 설치 프로그램의 효율성을 판단할 것이다. 따라서 사용자가 쉽게 사용할 수 있도록 각별한 주의를 기울여야 한다.

IzPack은 개발 팀이 구현한 소프트웨어 실제 설치 정도를 나타내는 모든 컴포넌트를 가리키는 데 팩(pack)이라는 용어를 사용한다. 모든 다른 IzPack 구성요소(패널, 사용자 입력, 검증기 등)는 이 팩을 실행하기 위한 준비물이다. 프로젝트에서 우리는 팩을 사용하여 몇 가지 일을 했다. 앤트에서 미리 작성해둔 ZIP 설치 배포판을 다운로드하고 그것을 실행한다. 이 과정은 앞서 커맨드 라인에서 실행하던 것을 재사용하는 것이다. Listing 4는 <pack>을 정의한다.


Listing 4. install.xml에 <pack> 정의하기
<packs>
  <pack name="download_install" id="download_install" 
    installGroups="ap" required="no">
    <description>The base files</description>
    <file src="autopeople.zip.file" 
      targetdir="$SYSTEM_user_home/@{installer.dir}"/>
    <file src="build.xml" 
      targetdir="$SYSTEM_user_home/@{installer.dir}"/>
    <file src="property-template" 
      targetdir="$SYSTEM_user_home/@{installer.dir}">
      <excludes>**/.svn/**</excludes>
    </file>	
  </pack>	

그림 4는 팩 설치 진행 상황을 보여준다.


그림 4. 팩 실행하기
팩 실행하기

팩은 팩(Pack)을 IzPack에 넣는다! 사용자 검증, 진단, 환경 관련 정보를 얻는 앞단의 작업을 했다면, 여러분의 설치 패키지를 사용자가 쉽게 이용할 수 있을 것이다.




위로


앤트 스크립트 실행하기

우리 팀은 앤트를 사용하여 배포 기반 설치 프로그램을 만드는 데 많은 시간을 투자했다. 우리는 IzPack에 있는 이 기능을 전부 다시 구현하고 싶지 않았다. 다행히도, IzPack은 기존 앤트 파일을 호출하는 기능을 제공한다. Listing 1에서 정의한 리소스를 다시 살펴보면, antActionSpec.xml을 리소스로 등록한 것을 볼 수 있다. Listing 5는 antActionSpec.xml 스크립트 일부를 보여준다.


Listing 5. antActionSpec.xml에서 팩 행동 실행하기

<antactions> 
  <pack name="download_install">
    <antcall buildfile="$SYSTEM_user_home/${installer.dir}/build.xml"
	  order="afterpack"
	  verbose="yes"
	  logfile="$SYSTEM_user_home/${installer.dir}/antlog_installer.txt"
	  inheritall="false"
      messageid="AntAction.download-install">
      <target name="install"/>
	  <property name="install.path" value="$SYSTEM_user_home/${installer.dir}"/>   
	</antcall>
  </pack>
...
</antactions>

이 부분에서 가장 익숙한 부분은 build.xml을 실행하는 부분이다. 이것은 기존에 있던 앤트 빌드 스크립트로 설치 ZIP 파일을 다운로드하고 압축을 풀고 웹 컨테이너를 설치하고 설정하는 등의 설치 작업을 수행한다. antActionSpec.xml은 기존 앤트 스크립트를 재사용할 수 있는 방법을 제공한다.




위로


설치 프로그램 컴파일하기

마지막 단계는 IzPack 컴파일(compilation)이다. install.xml을 작성했고 그와 관련된 스크립트를 작성했다면, 설치 프로그램을 생성할 준비가 된 것이다. Listing 6은 한 줄짜리 명령어로 install.jar를 생성하는 코드를 보여준다(여기서 파일 이름은 원하는 대로 수정할 수 있다).


Listing 6. 설치 프로그램 만들기

compile ../sample/install.xml -b ../sample

Listing 6의 명령어는 IzPack의 bin 하위 디렉터리에서 실행한다고 가정한다. sample은 IzPack에 들어있는 예제 하위 디렉터리를 나타낸다. 설치 프로그램이 일단 생성되면, 예제 하위 디렉터리에 생성된 install.jar 파일에 java -jar install.jar를 실행하여 확인해볼 수 있다.




위로


사람을 위한 설치 프로그램

이 글에서, IzPack에 있는 여러 컴포넌트를 사용하여 사용자가 쓰기 간편한 설치 패키지를 만드는 방법을 설명했다. 클라이언트 기반 소프트웨어를 설치하는 사용자이거나, 여러 서버를 설치하고 설정할 필요가 있는 원격 사이트의 사용자이거나 엔터프라이즈 규모의 도구를 설치하고 설정하는 운영팀일 수도 있다. 소프트웨어가 설치하기 쉽다면 신용을 얻을 것이다. 특히 힘겨운 설치가 악명 높은 복잡한 환경에서 말이다. 설치시에 손수 해야 할 단계가 많거나 실질적으로 불가능하다면 격노와 소프트웨어 배포에 대한 자신감 부족으로 사용자를 빠르게 잃을 것이다. IzPack 같은 도구로 설치를 간편하게 하는 것은 잠재적인 고객을 얻고 유지하는 데 도움이 될 것이다.



참고자료

교육

제품 및 기술 얻기
  • IzPack: IzPack을 다운로드하여 플랫폼에 독립적인 설치 프로그램을 만들기 시작하라.

  • Ant: 앤트를 다운로드하고 예측 가능하며 반복적인 방법으로 소프트웨어를 만들기 시작하라.


토론


필자소개

Paul Duvall

Paul Duball은 Stelligent Incorporated의 CTO로, 개발팀이 배포 준비가 된 소프트웨어를 도출할 수 있도록 돕는 애자일 컨설팅을 하고 있다. Paul Duball은 Addison-Wesley 시그너처 시리즈 책인, Continuous Integration: Improving Software Quality and Reducing Risk(Addison-Wesley Professional, 2007년, 2008 졸트 상 수상작)의 공동 저자이기도 하다. 또 UML 2 Toolkit(Wiley, 2003년)과 No Fluff Just Stuff Anthology(Programatic Programmers, 2007년)에도 기여했다.




기사에 대한 평가


보다 나은 서비스를 제공하기 위함이오니 잠시 짬을 내어 이 양식을 제출하여 주십시오.



 


 


 


이 문서 북마킹 하기

mar.gar.in mar.gar.in naver naver eolin eolin del.icio.us del.icio.us





위로


Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both. 기타 회사, 제품, 및 서비스명은 다른 상표나 서비스 마크일 수 있습니다.

developerWorks 콘텐트를 다른 사이트에 전재하기:
developerWorks 콘텐트에 대한 저작권은 IBM에 있습니다. IBM의 서면 허가나 원본 저자의 허락이 없이는 전재를 금합니다. 저희 콘텐트를 전재하시려면 IBM developerWorks 담당자 에게 문의하십시오.
    IBM 소개 개인정보 보호정책 문의