본문 바로가기

IT 살이/04. 기술 - 프로그래밍

[연재 03] ClickOnce : Enjoy The Appearance 2

"보이는대로 하라는대로" 하면서 ClickOnce를 즐기는 두번째 시간이다.

앞 포스트에서 본 것처럼 다음 메뉴를 선택하면 Visual Studio.NET 2005의 게시마법사를 만날 수 있다.

프로젝트 선택->빌드 메뉴->게시 선택
프로젝트 오른쪽 클릭->게시...선택


이런 메뉴를 통해서 게시 마법사를 바로 실행할 수 있지만, Visual Studio.NET에서는 그전에 여러가지 설정을 할 수 있도록 하고 있다.  이 포스트에서는 게시전에 여러 가지 설정들을 수행할 수 있는 Visual Studio 2005의 게시 디자이너를 소개한다.

배포할 EXE 프로젝트 오른쪽 클릭->속성->게시탭

이 순서대로 수행하면 다음과 같은 게시용 디자이너가 출력된다.

1056162081

게시 디자이너

각 설정들을 알아보면 다음과 같다.

게시 위치  : 애플리케이션 구성 파일과 필요한 기타 파일을 복사할 디렉토리 경로값이다. 이 디렉토리 하위에 게시 버전별로 디렉토리를 구분해서 복사될 것이다. 게시 버전은 그림을 보면 아래에 나와 있다. 게시 위치를 나타내는 값으로는 웹사이트 경로, FTP 경로, 파일 공유 서버 경로등도 사용될 수 있다.
또한 애플리케이션(.exe.manifest)과 배포 메너페스트(.application)도 함께 자동 생성되어 복사된다. 이 두 파일은 아주 중요한 의미를 갖는다. 뒤의 Internals를 다루는 부분에서 설명한다.

설치 위치 : 사용자들이 브라우저를 통해서, 애플리케이션을 요청할때 사용하는 URL 주소이다. 그림에서 처럼 게시위치 값과 설치 위치 값이 서로 다를 수도 있다.

설치 모드 및 설정 : 애플리케이션을 온라인 전용 또는 온/오프라인용으로 설치할지를 선택하는 설정이다. 온라인 전용 타입은 애플리케이션을 구동시킬때 항상 클라이언트 PC가 온라인 상태로 있어야 한다. 반면에 온/오프라인 타입은 애플리케이션이 클라이언트 PC에 직접 설치된다. 그래서 제어판의 "프로그램 추가/제거"창에도 나타나고 "시작->모든 프로그램"메뉴에도 나타난다. 이 타입의 프로그램은 반드시 온라인일 필요는 없다.


게시버전 : 이 값을 나름대로의 의미를 갖도록 적절한 값을 사용하면 게시를 버전별로 구분하여 수행할 수 있다. 예를 들어 그림에서처럼 년도---수정번호 의 포맷으로 설정할 수도 있다.


응용 프로그램 파일 버튼: 현재 애플리케이션에 포함된 파일과 참조된 모든 파일을 보여주는 창이 뜬다.

1197285058

게시 대상 파일


파일 목록에 추가하려면, 프로젝트의 컨텍스트 메뉴를 통해서 프로젝트에 파일을 추가하면 된다. 이렇게 추가된 파일은 게시 상태 컬럼의 "포함(자동)"으로 될 것이다. 만약 xml 파일을 추가하면 그림처럼 게시 상태는 "데이터파일(자동)"으로 자동 선택될 것이다.

어셈블리 파일(.dll)의 게시 상태 컬럼의 드롭 다운 리스트를 클릭해보면 "필수 구성 요소"라는 선택 항목이 보일것이다. 만약 이것을 선택하면 ClickOnce 애플리케이션과 함께 클라이언트 PC로 배포되지 않을 것이다. 대신에 애플리케이션이 클라이언트 PC에 인스톨될때 클라이언트의 GAC에서 해당 파일을 찾게된다. 여기서 파일을 찾지 못하면 애플리케이션의 인스톨은 중단된다. 또한 "필수 구성 요소"로 선택된 파일은 ClickOnce 업데이트 메커니즘에 의해 업데이트되지 않는다[각주:1]
필수 구성 요소 버튼: ClickOnce 애플리케이션이 정상적으로 실행되기 위해서 사전에 설치되어 있어야 하는 경우도 있을 것이다. 그런 필수 프로그램중의 하나로 .NET v2.0은 모든 클라이언트 PC에 반드시 설치되어 있어야 한다. 이처럼 ClickOnce 애플리케이션이 시작하기 전에 사전에 미리 설치되어 있어야 하는 프로그램을 확인하고 필요하다면 설치도 수행해주는 프로그램이 있다. 이것을 부트스트래퍼(Bootstrapper)라 하는데, .NETv2.0과 Visual Studio.NET2005에는 부트스트래퍼를 지원하는 기능이 있다. 필수 구성 요소 버튼을 클릭하면 ClickOnce 애플리케이션을 구동시키기 전에 부트스트래퍼가 확인할 프로그램들을 선택할 수 있는 창이 뜬다.

1293626952

사전 필수 프로그램 선택

필수 프로그램창에는 미리 Visual Studio.NET에서 제공하는 기본적인 프로그램 목록이 출력된다. 이중에서 필요한만큼 선택하면 된다. 만약 다른 프로그램들이 필요하다면 이 목록에 출력되도록 커스터마이징을 할 수 있는 방법이 있다. 그것에 대해서는 뒤에 오는 포스트에서 다룰것이다.

업데이트 버튼 : 업데이트 버튼은 온/오프라인 타입을 선택하는 경우만 활성화된다. 온라인 타입의 애플리케이션에서는 애플리케이션을 실행할때마다 업데이트 버전이 있는지에 대한 여부를 확인하게 된다. 온/오프라인 타입 애플리케이션의 업데이트 전략에 대해서는 따로 포스트를 준비하겠다.

옵션 버튼 : 옵션 사항 선택할 수 있는 창이 뜬다.

1291568720

게시 옵션

애플리케이션의 컬쳐를 선택할 수 있는 옵션이 있다. 그리고 게시자 이름, 제품이름 그리고 기본적으로 제공되는 publish.htm에 나타나는 지원 URL도 지정할 수 있다.  publish.htm 파일을 다른 이름으로 지정할 수도록 하고 있다.

"URL을 통한 응용 프로그램 활성화 방지"를 선택하지 않으면 애플리케이션을 설치후 자동으로 실행시킨다. 선택하면 "시작"메뉴의 응용 프로그램 바로가기를 통해서 애플리케이션을 실행시켜야 한다.

".deploy 파일 확장명 사용" 옵션을 선택하면 웹 배포 서버로 게시되는 응용프로그램의 파일에 .deploy가 붙은 형태가 된다. 즉 .exe.deploy 또는 .dll.deploy 형태가 된다. IIS 웹 서버는 보안을 위해 어떤 확장자의 파일은 다운이 되지 못하도록 차단하고 있다. 예를 들어 확장명이 .dll, .config 및 .mdf 등인 파일은 차단될 수 있다. Windows 기반 응용 프로그램에는 보통 이와 같은 확장명을 가진 파일이 포함되어 있다. 사용자가 ClickOnce 응용 프로그램을 실행하여 웹 서버의 차단된 파일에 액세스하려고 하면 오류가 발생한다. 게시를 할때 기본적으로 파일 확장명에 ".deploy"을 덧붙임으로써, 모든 종류의 확장자에 대해 각각 차단을 제거하는 대신에 ".deploy"에 대한 차단만 제거해서 다운로드가 가능하도록 하면 되는 것이다. 참고로 ClickOnce 애플리케이션에서는 .deploy외에도 .application, .manifest 확장자에 대해서도 다운로드가 가능하도록 웹 서버를 구성해야 한다.


응용 프로그램으로 URL 매개 변수가 전달되도록 허용기본적으로 선택되어 있지 않다. 이것을 선택하게 되면 URL을 통해서 ClickOnce 애플리케이션을 구동시킬때 파라미터를 넘기고 애플리케이션에서는 이 파라미터에 접근할 수 있게 된다. 예를 들어 인증된 사용자만 애플리케이션을 사용하도록 하려는 시스템에서 인증 시스템과 애플리케이션이 분리되어 있는 경우, URL을 통해서 로그인한 사용자의 ID값을 애플리케이션으로 넘겨줄려고 하는 시나리오에서는 이 옵션을 사용해야 할 것이다. 애플리케이션이 구동되려면 배포 매너페스트 파일(.application)이 호출되어야 하는데 파일에 대한 URL에  GET 파라미터를 덧붙여서 호출하고 실행 파일 .exe의 내부에서는 .NETv2.0에서 제공하는 API[각주:2]를 통해서 넘겨진 파라미터를 받을 수 있다.

"웹 서버로 업로드된 파일 확인"이 선택되면(기본값) 웹 서버로 게시되는 파일들이 다운로드될 수 있는지 확인을 하게 됩니다. 다운로드할 수 없는 파일이 있으면 알림을 받는다.

마지막으로 게시 버전을 적절하게 입력하고 "지금 게시"를 클릭하면 된다. 모든 애플리케이션이 정상적으로 게시가 되면 Visual Studio.NET은 기본적으로 제공하는 publish.htm(다른 선택을 하지 않았다면)이 자동 호출될 것이다.
1200791289

게시 후 기본 웹 페이지 자동 호출


실행 버튼을 클릭하며 도중에 출력될 수도 있는 보안 경고 창을 무시하고 계속 실행하면 애플리케이션은 정상적으로 실행될 것이다.

  1. .NETv2.0은 응용 프로그램 구성 파일 목록에는 나와있지 않지만 애플리케이션 메너페스트 파일(.exe.manifest)에 기본적으로 "필수 구성 요소"로 선택되어 있다.
    [본문으로]
  2. System.Deployment.Application 네임스페이스의 클래스들을 보면 관련된 여러 API를 볼 수 있다 [본문으로]