본문 바로가기

2.분석 및 설계

설치 패키지 작성시 고려사항

설치 패키지란 시스템에 프로그램 설치를 쉽게하기 위한 프로그램이다. 가장 간단한 방법은 해당 프로그램을 압축해서 다시 압축을 풀고 사용하면된다. 이렇게 하면 쉽지만, 컴맹이 이를 하려면 매우 어렵니다. 압축 푸는 것도 쉽지 않다. 그리고 어디에 압축을 풀지도 모른다. 실행하기 위해 조금만 복잡한 과정을 거치면 거의 포기상태로 들어간다.

그래서, 실행하면 단계별로 설치할 것과 설치에 필요한 사항을 물어보고, 설치되는 과정을 보여주면서 사용자가 프로그램을 쉽게 설치하도록 도와준다. 또한, 필요 없는 프로그램인 경우 프로그램 제거도 해준다. 얼마나 좋은가?

추가로 가정하기를 윈도우는 C드라이브에 설치되었다고 가정한다. 만약 다른 드라이브에 설치되었다면 환경변수 %systemroot%를 참고하면 윈도우가 설치된 드라이브를 알 수 있다.

작성일: 2009.07.31 (http://ospace.tistory.com/), ospace114@empal.com

설치 절차

설치 패키지를 만들기 위해서 설치 과정에 대해 어느정도 익숙해지는 것이 좋다. 이에 대해 아주 좋은 그림이 있다.

출처: http://namoda.springnote.com/pages/2763758

위의 그림은 InstallShild 제품을 기본으로 작성된 것이다. 최근 가장많이 사용하는 설치 패키지 제작 도구가 InstallShild와 NSIS이다. InstallShild는 유료이고 NSIS는 무료이다. 당연히 InstallShild가 기능도 많고 지원도 잘된다. NSIS은 무료이지만 기능도 뒤지지 않고 공개로 무료사용 가능한 플러그인이 제공되고 소스도 있기 때문에 실력이 된다면 입맛에 맞게 수정하여 사용할 수도 있다. 물론 라이센스를 잘 살펴봐야겠지만...

때에 따라서 자기가 직접 설치 프로그램을 제작하는 경우도 있다. 어렵게 생각할지도 모르지만, 위저드 형태의 대화상자 혹은 새로운 행태의 화면으로 필요한 데이터를 입력 받고 파일을 복사하고 필요한 처리를 하면된다. 추가로 제거하는 것도 포함이 되야한다. 바로 이게 설치 프로그램이다.

설치 단계는 총 4단계로 구분된다. 초기화 단계, 인터뷰 단계, 실행 단계, 종료 단계로 나눌 수 있다.

  • 초기화 단계: 설치를 위한 엔진을 로딩하는 단계
  • 인터뷰 단계: 사용자로 부터 설치에 필요한 정보를 입력받는 단계
  • 실행 단계: 실제 설치하는 단계
  • 종료 단계: 설치완료 후에 필요한 부가적 작업을 실행하는 단계

그리고 설치되는 데이터는 다양하다. 물론 기본적으로 설치되어야할 프로그램도 포함된다. 그 외에 단축 아이콘, 레지스트리, 설정 파일 등을 기록하거나 생성할 수 있다.

설치관련 정보

프로그램 추가/제거 관리를 위한 정보 등록

여기서는 운영체제에서 설치에 관련된 정보를 기록하는 곳을 알아볼 것이다. 일단 Windows를 먼저 살펴보겠다.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

App Paths는 주요 실행 파일명이 등록이 된다. 먼저 해당 프로그램 실행파일 명으로 키가 생성되고 값으로 해당 실행 파일이 있는 완전한 경로가 등록된다.

Key: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\MyProduct.exe
Value(Default): C:\Program Files\SuperMap\MyProduct\MyProduct.exe

물론 실제 저장되는 값은 약간 틀릴 수 있다.
Uninstall은 설치 제거할 때는 필요로 하는 정보를 기록한다. 기록되는 정보는 다음과 같다.

  • DisplayName: 프로그램 설치/제거에 표시되는 내용
  • UninstallString: 제거 실행 프로그램이 있는 완전한 경로
  • DisplayIcon: 제거에서 보이는 아이콘. 보통 실행파일명에 같이 있다.
  • DispalyVersion: 프로그램 설치/제거에 표시되는 버전 번호
  • URLInfoAbout: 제품관련 웹사이트 URL
  • Publisher: 공급자 이름

이정도면 레지스트리에 기록되는 설치 과련 정보이다. 이는 실제 프로그램 실행과는 아무런 관련이 없으며, 나중에 프로그램 제거시 혹은 프로그램 설치/제거에서 프로그램 패키지 관리시 사용되는 정보이다.

프로그램 관련된 정보는 보통 HKEY_LOCAL_MACHINE혹은 HKEY_CURRENT_USER에 밑에 아래와 같은 경로에 기록된다.

Software\My Company\My Product\Version

My Company를 생략하고 Version는 하나의 값으로 저장되는 경우도 있다. 보통 HEKY_LOCAL_MACHINE에 등록해준다. HEKY_CURRENT_USER는 현재 사용 중이 사용자에게만 해당된다.

자동 실행

자동 실행하고자 하면, 다음 레지스트리 경로에 해당 실행 파일 혹은 단축 아이콘을 전체 경로를 포함하여 등록하면 된다.

HKEY_LOCAL_MACHINE\Softwre\Microsoft\Windows\CurrentVersion\Run

해당하는 키에 적당한 이름과 해당 실행파일 명과 경로를 포함한 전체 경로를 추가해주면 된다.

자동 실행하는 방법은 위의 레지스트리에 추가하는 것 외에 서비스로 등록하는 방법도 있다. 이는 내용이 많기에 여기서는 다루지는 않겠다. 서비스 등록은 좀 복잡하고 등록하는 서비스 종류에 따라서 선택이 필요하다. 일반 어플리케이션이라면 거의 고정될 것이다. 서비스는 등록도 중요하지만 나중에 제거하는 것도 필요하다.

서비스로 등록되는 프로그램의 안전성은 매우 중요하다. 서비스가 일반 GUI 프로그램보다 콘솔형태의 프로그램에 가깝게 작동하고 시스템이 작동하는 시간동안 지속적으로 동작한다. 일단 이정도로만 이야기하고 이에 대해서는 다른 곳에 검색하면 잘 나와있다.

설치하기

파일 복사

설치는 간단하다. 일반적으로 파일 복사하는 것이다. 간혹 단축 아이콘이나 URL 연결 아이콘 등을 만들어 줄 수도 있다. 추가로 COM과 같은 파일은 윈도우에 등록하는 절차가 필요하다. COM을 등록하기 위해서는 regsvr32.exe을 사용하지 패키지 제작 스크립트에서는 이런 등록 기능을 제공한다.

설치되는 위치는 대부분 알겠지만 Program Files에 위치한다. 예를 들어 프로그램 명이 Japa2라고 하면,

C:\Program Files\Japa2

가 된다. M$에서는 위의 경로 명에 대해서 추천하는 명명방법이 있다. 프로그램 명 대신에 아래 같은 형식을 가진다.

제조사\프로그램 이름\버전

위의 권고 일뿐이고 임의로 사용할 수 있다. 그래도 최소한 프로그램 이름 정도는 넣어주는게 좋을 듯한다. 본인은 프로그램 이름만 잘 구분할 수 있도록 작성하였다. 만약 여러 프로그램이 배포 가능하다면 제조사 정도는 넣어주면 될 듯한다. 버전은 굳이 넣어줄 필요는 없을 것 같다. 제조사를 넣는 대표적인 프로그램이 알약을 만드는 이스트 소프트웨어 제품들이다.

프로그램 등록

추가로 복사되 되면 [시작]->[모든 프로그램]에서 보이는 프로그램 목록에 설치된 프로그램을 추가해줘야한다. 추가하는 방법은 "시작 메뉴" 밑에 "프로그램"이라는 폴더에 프로그램 명에 해당하는 폴더를 생성하고 그 폴더 안에 실행 프로그램이나 기타 단축 아이콘을 생성해주면 된다. 혹은 "All User"에 추가하면 된다.

보통 "시작 메뉴"폴더는 개인 사용자 폴더에 있다. 예를 들어 자신의 사용자 ID가 ospace라고 하면,

C:\Documents and Settings\ospace\시작 메뉴\프로그램

에 단축 아이콘을 생성하면 된다. 기타 도움말이나 다른 링크 들을 추가해도 된다. 위의 "프로그램" 폴더는 특정 개인에게만 보이도록 추가된다. 만약 전체 사용자에게 공통적으로 보이려고 하면 아래 "All Users"라는 곳에 추가해야 한다. 이에 대한 추가되는 경로는 다음과 같다.

C:\Documents and Settings\All Users\시작 메뉴\프로그램\

위에 추가가 되면 모든 사용자에게 설치된 프로그램이 보이게된다.

설정파일 복사 위치

그리고, 필요에 따라서 사용자 폴더에 일부 설정 파일이 복사 될 수 있다. 복사되는 위치도 사용자 별로 다르다. 이는 Vista가 되면서 보안으로 인해 더이상 Program Files에 저장될 수 없다. 현지 임시로 호환성을 주기 위해 Program Files에 저장하려고 하면 각 사용자 폴더에 임의 위치에 데이터가 저장된다. 때에 따라서 설정 정보가 레지스트리에 저장될 수도 있다.

이런 설정 정보는 프로그램에서 추가할 수 있지만, 설치할 때에도 필요할 수 있다. 관련 레지스트리 정보는 다음과 같다.

HKEY_LOCAL_MACHINE\SOFTWARE\제조사\프로그램 이름\버전
HKEY_CURRENT_USER\SOFTWARE\제조사\프로그램 이름\버전

제조사\프로그램 이름\버전은 앞의 내용과 같다. 알아서 잘 활용하시길. 당연히 HKLM은 시스템 전체에 해당하는 정보이고 HKCU는 해당 사용자에 대한 정보이다. HKCU에 저장한 후에 다른 사용자로 들어가면 설정된 정보에 접근은 불가능하다. 이에 대한 자세한 내용은 참조[1]를 참고하길 바란다.

처음 설치부터 공통으로 사용되는 설정 데이터야 Program Files 밑에 넣으면 되지만 각 사용자에 대한 설정 값은 다른 곳에 위치한다. 사용자 ID가 ospace라고 하면 각각의 대한 경로는 다음과 같다. 아래는 XP를 기준으로 작성되었다.

C:\Program Files\SOFTWARE\제조사\프로그램 이름\버전
C:\Documents and Settings\ospace\Application Data\제조사\프로그램 이름\버전

전자는 익숙한 위치일 것이다. 대부분 프로그램이 설치되는 위치이다. 그러나 주의 할 것은 Vista가 되면서 해당 폴더는 읽을 수만 있고, 쓰기할 때에는 관리자 권한이 필요하다. 그리고 Vista인 경우는 해당 폴더 위치가 약간 변경이 된다. Program Files 위치는 같으나 사용자 폴더가 다르다.

C:\Users\ospace\Application Data\제조사\프로그램 이름\버전

적당한 위치에 설정 파일도 복사했다면 어느정도 작업이 대부분 마무리가 되었다.

앞에 순서는 굳이 정해진 것은 없지만, 일반적으로

  1. 파일 복사
  2. 시작 프로그램 등록
  3. 프로그램 설치/제거위한 레지스트리 등록
  4. 프로그램 정보 레지스트리 등록

위의 순서 중에 일부 부분은 빠질 수도 있다. 이렇게 해서 설치가 거의 완료 되었다.

설치완료

마지막으로 완료 단계이다. 여기서는 성공적으로 설치가 완료되었으며, 설치 종료 후 어떤 작업을 할지 물어보는 정도이다. 예를 들어 Readme.txt 등을 열어 볼 것인지, 프로그램을 실행할 것인지에 대한 여부를 물어본다. 물어보지 않을 수도 있다. 이건 마음대로..

제거하기

설치하는 것보다 중요한 것이 프로그램 제거하는 것이다. 언인스톨, 프로그램 제거. 정말로 쉽지 않다. 프로그램이 커지고 레지스트리 여기저기 건들게되고, 제대로 제거되지 않거나, 잘못 제거되면 운영체제 환경이나 다시 설치시 실행에 문제의 영향도 있다. 즉, 깨끗이 확실히 제거되어야 한다. 그렇다고 모두 강제적으로 제거할 수도 없다.

또한 프로그램 개발자와 패키저가 다르다면 치명적 오류가 발생할 수도 있다. 이때 프로그램이 외부에 참조하거나 기록하는 데이터에 대해서 명확히 규정하지 않으면, 쓸데 없는 데이터를 지우거나 지원야하는데 지우지 않는 경우도 발생하기도 한다.

같은 사람이라도 프로그램 개발할 때에는 잘 하다가 패키지로 파일 설치 나 제거할 때에는 깜빡 잊고 안하는 경우도 흔하다. 문서화가 잘되어서 이런 부분을 꼼꼼히 잘 체크할 수 있다면 문제가 없지만, 한국 환경에서 어디 여유있게 문서를 작성하고 여유있는 테스트 시간을 주는데가 있을까? 거의 개발자 원맨쇼로 하는 경우가 흔하다.

어찌되었든 제거는 의외로 간단하지만, 잘 체크하지 않으면 오류 발생 가능성이 매우 많다.

프로그램이 실행 중인 상태

먼저 현재 제거하려는 프로그램 실행 상태에 따라서 제거 방법이 나눠진다. 프로그램이 미실행 상태이면그냥 설치제거하면 된다.그러나 프로그램 실행 중인 상태이면 프로그램이 실행 중이라면 그냥 종료할 수도 있고, 프로그래을 종료하도록 유도하여 종료하고 설치 과정으로 갈 수 도 있다. 프로그램 종료는 사용자가 중요한 데이터에 대해 작업 중에 있다면 심각한 오류를 발생할 수 있기 때문에 상황에 따라 선택적으로 진행할 수 밖에 없다.

이전에 개발했던 프로그램은 자동 실행 프로그램이고 사용자가 작성하는 내용이 따로 없기 때문에 자동 종료 시키고 설치하도록 유도하였다. 이건 회사 정책이라든가 고객의 요구사항 등에 의해서 결정되기 때문에 이를 참고해서 결정하면된다. 물론 나중에 이런 변경에 유연하게 만드는 것도 중요하다.

제거할 때에 삭제될 정보

삭제되는 정보는 설치할 때 복사하거나 추가된 파일이나 레지스트리 등의 정보를 제거하면 된다. 그리고 등록된 COM객체도 해제해준다. 그리고 프로그램 실행할 때에 생성된 설정 파일이나 로그 파일은 삭제할 수도 있도 나중에 설치에 사용하기 위해서 남겨 둘 수도 있다. 이런 파일 외에는 대부분 삭제하면 된다.

  • 레지스트리에 저장된 정보
  • 등록된 DLL 파일
  • 새로 생성된 파일

프로그램 제거시 살펴봐야 하는 폴더로서 다음과 같다.

  • Program Files
  • User의 Application Data
  • User의 시작 메뉴의 프로그램

업그레이드

업그레이드에 대한 전략은 다양하다. 프로그램 실행 중에 온라인으로 이뤄지기도 하고, 온라인으로 배포 패키지을 다운 받고 설치 프로세스에 의해서 업그레이드 될 수 있다.

여기서 다루는 업그레이드는 오프라인에서 이뤄지며, 온라인 상의 업그레이드나 자동 업그레이드는 다루지 않는다.
이는 재설치나 프로그램 일부를 변경하는 경우이다. 재설치는 기존 프로그램을 제거하고 다시 설치과정을 따라간다. 그러나 일부 변경하는 것은 제거하지 않고 필요한 파일만 새로 복사하고 레지스트리 등의 정보를 새로 갱신하게 된다.

사실 별다른 내용은 없다. 설치 과정에서 같은 내용을 다룬다. 단지 이미 설치된 정보에서 업그레이드되는 정보와 비교해서 변경이 없으면 건너뛰고, 변경된 내용만 복사, 수정, 삭제가 된다.

결론

끝에서 너무 내용이 없다. 이는 본인의 귀차니즘으로 인해서 흐지부지 해지면서 용두사미로 되어 버렸다. 지금 약간 졸리다. ㅡ.ㅡ; 패키지를 만드는 것은 사용자의 편의를 위한 것이지 개발자 편의를 위한 것이 아니다. 사용자가 편하다면 그런 방향을 선택하는 것이 많지만, 본인도 개발시 개발자 관점에 의해서 그냥 막 추가되는 경우도 있다.

특히 패키지는 제품 상품화에 관련해서 프로그램으로서 고객이 맨 처음 접하는 것이다. 그렇기에 어떻게 보면 매우 중요한 프로그램일 수 도 있다. 그렇기에 초기 제품 설계시 이에 대한 부분도 반드시 고려할 필요가 있다.

고려되는 내용으로

  • 상품명
  • 제조사 명칭
  • 저작권 종류
  • 버전 표기 형식
  • 사용되는 표현
  • 설치되는 순서
  • 사용자에게 보여지는 설치 정보
  • 상품 로고와 아이콘
  • 라이센스 내용
  • 도움말 제공 방법
  • 기타 등등

위의 내용이 전부 명확히 정해질 필요는 없지만, 제품 전반에 걸처 릴리즈가 나오는 시점까지 계속 검토 보완해야되는 부분일 수 있다. 물론 제품의 종류와 고객에 따라서 위의 내용이 미리 정해져 있거나 수시로 변경될 수도 있다.

제가 글 재주가 부족하여 내용이 너무 뜬구름 잡듯이하여 지루할 수 있어 이해를 부탁드립니다. 혹시 궁금하거나 내용 중에 의문사항이 있으면 메일로 연락 주십시오.

모두 즐프하세요. 2009.09.06.ospace

참조:

[1] Ospace, Vista 호환 프로그램 데이터 저장위치 다루기

반응형

'2.분석 및 설계' 카테고리의 다른 글

함수 호출과정 분석  (0) 2011.01.12
코드 문서화  (0) 2011.01.07
프로그램 버전 얻기  (0) 2009.04.13
[Flash] Related of Flash Movie  (0) 2007.05.21
OOD(객체지향 개발)의 원칙  (0) 2006.11.13