WorkaHolic

ClickOnce 배포

2008. 5. 28. 18:01
반응형

ClickOnce를 사용한 Windows Forms 응용 프로그램 배포

출처 : MSDN

Mauro Sant'Anna
Microsoft 지역 책임자

요약: ClickOnce 기술을 살펴보고 다른 배포 기술과 비교하며 사용 중인 응용 프로그램에서 이 기술을 사용하는 방법을 알아봅니다.

소개

ClickOnce는 Visual Studio 2005에서 제공되는 새 Windows Forms 배포 기술입니다. 이 기술을 사용하면 응용 프로그램 설치 및 스마트 클라이언트를 통한 웹 응용 프로그램 업그레이드를 쉽게 수행할 수 있습니다. HTTP를 통한 Windows Forms 응용 프로그램의 배포는 .NET Framework의 첫 번째 버전부터 가능했으며 그 이후 지속적으로 발전해 오고 있습니다. 이 기사에서는 Windows Forms 응용 프로그램의 이점과 ClickOnce에 이르기까지 이 기술의 발전에 대해 알아봅니다. 또한 Visual Studio 2005의 공개 베타 1 버전을 사용하여 간단한 예제를 만들어 봅니다(이 기사에는 영문 페이지 링크가 포함되어 있습니다).

Windows Forms 사용의 이점

World Wide Web의 출현 이후 대부분의 사용자와 개발자는 "일반" Windows 응용 프로그램보다 웹 응용 프로그램에 보다 큰 흥미를 보이고 있습니다. 단순히 "멋지다"는 면 외에도 웹 응용 프로그램에는 다음과 같은 흥미롭고 독특한 특성이 있습니다.

  • 웹 응용 프로그램은 인터넷에 연결할 수 있다면 세계 어디서나 액세스할 수 있습니다. 클라이언트가 Windows를 실행하고 있을 필요도 없습니다. "순수 웹" 응용 프로그램은 어디서나 응용 프로그램에 쉽게 액세스할 수 있어야 하는 경우 매우 뛰어난 기술입니다.
  • 웹 응용 프로그램은 배포 및 업데이트가 간편합니다. 응용 프로그램 파일을 웹 서버의 디렉터리에 복사하기만 하면 모든 클라이언트가 새 응용 프로그램을 바로 사용할 수 있습니다. 복잡한 DLL이나 레지스트리 항목, 등록해야 하는 COM 클래스 등이 전혀 없습니다. 그냥 복사만 해 놓으면 되니까요!

이 기사에서 중점적으로 설명하는 항목은 두 번째로 언급한 배포입니다. 웹 응용 프로그램에서 사용하는 HTTP 프로토콜은 일반적인 Windows 응용 프로그램 배포에 비해 다양한 이점이 있습니다.

이렇게 편리한 점도 있는 반면, 저도 웹을 좋아하는 사람이지만 웹에서의 작업 환경이 별로 좋지 않다는 문제점은 인정해야겠군요. Windows 응용 프로그램에 비해 웹에는 다음과 같은 여러 가지 단점이 있습니다.

  • 사용자 인터페이스가 아주 좋지 않습니다. 끌어서 놓기나 마우스 오른쪽 단추 클릭하기와 같이 Windows 응용 프로그램에서는 당연한 것처럼 사용하는 기능을 웹 응용 프로그램에서는 사용하기가 매우 어렵거나 전혀 사용할 수 없습니다.
  • 인터페이스를 강화하기 위해 여러 가지를 시도하고는 있지만, 그러기 위해서는 엄청난 양의 클라이언트 스크립트가 필요합니다. 더구나 이러한 스크립트는 대부분 작성과 디버그가 특히 어려운 종류의 코드입니다.
  • 웹 응용 프로그램에서는 대부분의 작업이 서버에서 수행되어야 하므로 정보가 계속 서버와 클라이언트 사이를 왕복합니다. 따라서 많은 양의 서버 리소스와 대역폭이 필요할 뿐만 아니라 사용자가 대기하는 시간도 늘어납니다.
  • 인쇄는 "화면 인쇄 기술"만 가능합니다. 서로 다른 글꼴, 여백 및 용지 크기로 인해 페이지 나누기 등의 요소를 원하는 대로 쉽게 변경할 수 없습니다.
  • 위의 문제 중 일부는 플러그 인이나 ActiveX를 사용하면 어느 정도 해결할 수 있지만, 그러한 플러그 인이나 ActiveX 컨트롤에도 예전의 비 웹 응용 프로그램에 존재했던 것과 같은 배포 문제가 있습니다.

그렇다면, 웹 응용 프로그램의 배포 편이성과 Windows 응용 프로그램의 뛰어난 클라이언트 환경을 결합할 수는 없을까요? 물론 가능합니다. .NET Framework는 첫 번째 버전부터 HTTP를 통한 Windows Forms 응용 프로그램 배포를 문제 없이 지원해 왔습니다.

이러한 종류의 응용 프로그램은 어디에서나 액세스할 필요는 없으며 최종 사용자의 컴퓨터에 Internet Explorer와 .NET Framework가 모두 설치되어 있는 인트라넷/익스트라넷 시나리오에서 특히 주목할 만합니다.

.NET Framework 1.x: .EXE를 HREF로 배포

.NET Framework의 버전 1.0 및 1.1에는 HTTP를 통해 Windows Forms 응용 프로그램을 배포하는 기능이 들어 있습니다. 기본적으로 "HREF" 태그를 사용하여 관리되는 .EXE를 가리킵니다. Internet Explorer 및 .NET Framework 런타임은 실행 파일뿐 아니라 필요한 DLL도 요청 시에 다운로드하여 실행합니다. 이러한 종류의 배포에는 "EXE를 href로 배포(hrefing EXE)"라는 별칭이 있습니다.

다음은 이러한 태그의 예입니다.

<a href="MainProject.exe">Call MainProject</a>

이는 매우 간단한 작업이며, 다음의 추천 기사에 설명되어 있습니다.

.NET 어셈블리(.EXE 또는 .DLL)가 기본 배포 단위이므로 응용 프로그램을 주 .EXE와 여러 개의 DLL로 나눌 수 있습니다. 따라서 DLL 하나만 간단히 변경해야 하는 경우 필요한 DLL만 다운로드하면 됩니다.

말로는 쉽게 들릴 수도 있지만 여기서도 몇 가지 알아야 할 사항이 있습니다.

  • .NET Framework는 클라이언트에 미리 설치되어 있어야 합니다. Framework 및 응용 프로그램을 보다 쉽게 설치할 수 있도록 http://www.microsoft.com/korea/msdn/vstudio/downloads/tools/bootstrapper/에서 플러그 인을 다운로드할 수 있습니다.
  • 응용 프로그램은 부분적으로 신뢰할 수 있는 코드로 클라이언트에서 실행됩니다. 이로 인한 이점은 응용 프로그램이 sandbox에서 실행되며 클라이언트 컴퓨터에 대해 수행할 수 있는 작업에 제한이 있다는 것입니다. 반면 로컬 파일을 열거나 COM 개체를 호출하는 등의 기능이 필요한 경우에는 클라이언트에서 보안 정책을 설정해야 하므로 작업 부담이 늘어날 수 있다는 단점이 있습니다.
  • 기본적으로 실행 파일은 지역화 리소스가 있는 여러 개의 DLL을 로드하려고 시도합니다. 현재 구현의 일부 문제점으로 인하여, 특히 느린 인터넷 연결에서는 성능이 떨어집니다.
  • 업데이트는 파일 단위로 수행됩니다. 예를 들어, 10개의 업데이트된 파일이 실제로 다운로드되었는지를 확인할 수 있는 방법이 없습니다. 클라이언트의 응용 프로그램이 "절반만 업데이트"될 수도 있다는 것입니다.
  • 응용 프로그램은 사용자가 Internet Explorer에서 "오프라인으로 작업"을 수동으로 설정한 경우에만 오프라인으로 사용할 수 있습니다. 응용 프로그램 자체적으로 이를 제어하는 기능은 없습니다.
  • 기본적으로 프로그램과 연결된 .config 파일을 사용할 수 없습니다(사용 방법을 보려면 여기를 클릭 하십시오).
  • 바탕 화면이나 시작 메뉴에 응용 프로그램의 바로 가기가 표시되지 않습니다.

업데이트 응용 프로그램 블록

위에서 언급한 몇 가지 문제를 해결하기 위해 Microsoft에서는 UAB(업데이트 응용 프로그램 블록) 를 만들었습니다. 업데이트 프로그램 블록은 응용 프로그램에 추가하여 HTTP를 통한 응용 프로그램 부분의 다운로드를 관리하는 라이브러리입니다.

이 블록에는 원래의 Framework 구현에 비해 몇 가지 장점이 있습니다.

  • 로컬 응용 프로그램으로 실행되므로 언제든지 성능 저하 없이 사용할 수 있습니다.
  • 업데이트가 완전히 처리됩니다. 즉, 새 버전의 모든 파일을 다운로드해야 새 버전을 사용할 수 있습니다.
  • 모든 응용 프로그램 파일이 매니페스트에 나열됩니다.
  • 완전히 신뢰할 수 있는 응용 프로그램으로 실행됩니다. 따라서 클라이언트 보안 정책에 신경쓸 필요가 없습니다.
  • 시작 메뉴에 응용 프로그램의 바로 가기가 표시됩니다.

반면 다음과 같은 단점도 있습니다.

  • 응용 프로그램을 사용하려면 근본적으로 변경해야 합니다.
  • BITS를 사용하여 응용 프로그램 부분을 다운로드하므로 Windows 98/ME에서는 실행되지 않습니다. Windows 2000 이상이 필요합니다.
  • 완전히 신뢰할 수 있는 로컬 응용 프로그램으로 실행되므로 코드 액세스 보안이 대부분 무시됩니다.
  • Microsoft에서 지원하지 않습니다.

UAB에 대한 자세한 내용은 Jamie Cool의 .NET Application Updater Component 를 참조하십시오. Gotdotnet에서 UAB 홈 페이지 를 참고할 수도 있습니다. UAB는 "공식적으로" 지원되지는 않지만 http://www.gotdotnet.com/ 에 포럼이 있습니다. 어떤 경우이건 UAB에는 완전한 소스 코드가 제공되므로 이를 변경하여 BITS 및 Windows 2000을 필요로 하는 요구 사항 등의 제한을 해결할 수 있습니다.

ClickOnce

UAB는 Microsoft가 최종적인 솔루션을 개발하는 동안 사용하는 임시적인 수단이라 할 수 있습니다. 그리고 이 최종적인 솔루션이 바로 ClickOnce입니다. 기본적으로 ClickOnce는 UAB의 모든 이점을 갖춘 동시에 대부분의 문제가 해결된 솔루션입니다. 또한 몇 가지 기능이 더 추가되어 있습니다. 개인적으로 볼 때 ClickOnce의 주요 이점 중 하나는 코드 액세스 보안 복원 기능입니다.

HREF EXE와 비교할 때 ClickOnce 응용 프로그램에는 다음과 같은 이점이 있습니다.

  • 업데이트가 완전히 처리됩니다. 즉, 전부 업데이트되거나 전혀 업데이트되지 않습니다.
  • 오프라인에서 응용 프로그램을 사용할 수 있을 뿐만 아니라 어느 정도의 제어도 가능합니다. API가 있으므로 응용 프로그램은 온라인/오프라인 여부를 확인할 수 있으며, 고유한 업데이트 프로세스를 제어할 수도 있습니다.
  • 응용 프로그램을 실행할 때 어떤 보안 권한이 필요한지를 파악하는 데 도움이 되는 적절한 추가 파일 및 도구를 생성하는 기능을 비롯하여 Visual Studio .NET와 효과적으로 통합되어 있습니다.
  • 필요한 구성 요소를 비롯하여 .NET Framework 자체도 다운로드할 수 있는 Win32 "부트스트래퍼(bootstraper)" 실행 파일이 제공됩니다.
  • 응용 프로그램 파일을 요청 시에 또는 일괄적으로 다운로드할 수 있습니다.
  • 시작 메뉴 바로 가기가 있습니다.

ClickOnce는 이전에는 코드 이름 "Whidbey"였던 Visual Studio 2005 및 .NET Framework 2.0의 기능입니다. "Community Preview Beta 1"(Framework 버전 2.0.40607)을 사용한 예를 살펴보겠습니다.

ClickOnce 응용 프로그램

다음 단계에 따라 간단한 ClickOnce 응용 프로그램을 만들어 보겠습니다.

  1. Visual Studio 2005를 시작합니다.
  2. File(파일)을 선택하고 New Project(새 프로젝트)를 클릭합니다.
  3. 언어(C# 또는 Visual Basic .NET)를 선택하고 Windows 응용 프로그램을 선택합니다.
  4. 프로젝트의 이름을 MyClickOnceApp로 지정하고 확인을 클릭합니다.
  5. 폼에 단추를 추가하고 Text 속성을 About으로 변경합니다.
  6. 단추를 두 번 클릭합니다. 코드 창에 다음 코드를 입력합니다.

    Visual Basic .NET:

         MsgBox("내 첫 번째 ClickOnce 응용 프로그램")

    C#:

         MessageBox.Show("내 첫 번째 ClickOnce 응용 프로그램");

F5 키를 눌러 응용 프로그램을 실행 및 테스트합니다.

Visual Studio 2005에서 실행되는 모든 Windows 응용 프로그램에는 Project(프로젝트) | MyClickOnceApp Properties(MyClickOnceApp 속성) 아래에 배포 정보를 제어할 수 있는 Publish(게시) 페이지가 있습니다.

그림 1. 게시 설정 구성

Publishing Location(게시 위치)은 응용 프로그램 배포 위치를 나타냅니다. 위에 나온 대로 웹 서버(HTTP) 위치일 수도 있고 일반 네트워크 경로일 수도 있습니다.

Install Mode and Settings(설치 모드 및 설정)는 다음과 같은 여러 배포 정보를 제어합니다.

  • 응용 프로그램을 온라인으로만 사용할 것인지 오프라인으로도 사용할 것인지를 결정합니다.
  • Application Files(응용 프로그램 파일): 개별 파일이 설치되는 위치입니다.
  • Prerequisites(필수 구성 요소): 설치 프로그램이 Windows Installer 2.0, .NET Framework 2.0, J# Redistributable Package, SQL Server 2005 Express, Crystal Reports, Microsoft Data Access Components 2.8 등의 다른 구성 요소를 설치해야 하는지 여부를 나타냅니다.

    그림 2. 필수 구성 요소 구성

  • Updates(업데이트): 응용 프로그램이 업데이트를 확인해야 하는 시점과 해당 업데이트가 클라이언트에 배포되는 방법을 제어합니다.

    그림 3. 업데이트 구성

  • Options(옵션): 응용 프로그램 언어, 시작 메뉴 바로 가기 리소스 이름, 웹 배포에 사용되는 HTML 페이지 및 배포 정책 티켓 등의 정보를 조정합니다.

    그림 4. 게시 옵션 구성

Publish Version(게시 버전)은 응용 프로그램 버전 번호를 조정합니다. 버전 번호는 배포될 때마다 자동으로 증가합니다.

Publish Wizard(게시 마법사)를 사용하면 다양한 게시 옵션을 설정할 수 있습니다. 이 마법사는 Build(빌드) | Publish(게시) 메뉴에서도 호출할 수 있습니다. 모든 ClickOnce 응용 프로그램은 암호화하고 서명해야 합니다. 마법사가 기존 키가 있는지를 묻는 메시지를 표시할 수도 있고(권장) 새 키를 생성할 수도 있습니다.

그림 5. 응용 프로그램 서명

마법사를 실행한 후에는 Publish Now(지금 게시)를 클릭하여 업데이트를 게시할 수 있습니다. 이 예제에서는 웹 페이지가 표시됩니다.

그림 6. 게시된 응용 프로그램

이 웹 페이지에는 응용 프로그램을 설치하기 전에 설치해야 하는 추가 필수 구성 요소 패키지를 확인하는 스크립트가 들어 있습니다. 필수 구성 요소가 없으면 응용 프로그램을 처음 실행할 때 설치됩니다.

사용자가 설치 링크를 클릭하면 다음과 같은 여러 대화 상자가 표시되며 최소한 첫 번째로 실행할 때는 사용자 작업이 필요할 수 있습니다.

  • Windows XP SP2 경고
  • 소프트웨어 사용권 동의
  • 게시자 서명 확인 안 함

배포 정보

Visual Studio .NET 2005는 응용 프로그램을 위해 여러 개의 파일과 폴더가 있는 새 웹을 만듭니다.

그림 7. 배포 폴더

dotnetfx 폴더에는 .NET Framework 재배포 가능 파일(현재 25MB의 실행 파일)이 들어 있습니다.

기본적으로 Visual Studio는 응용 프로그램이 배포될 때마다 버전 번호가 증가합니다. 각 버전에는 그와 같이 증가된 버전 번호가 있는 새 폴더가 생깁니다.

.application 파일은 HTML 페이지 publish.htm에 표시된 링크의 대상입니다. 이 파일은 응용 프로그램의 현재 버전에 해당하는 폴더 및 디지털 서명과 같은 정보를 포함하는 XML 파일입니다.

Publish.htm.application 파일 링크뿐 아니라 몇 가지 버전 검사를 수행하고 이에 따른 메시지를 표시하는 일부 클라이언트 스크립트 링크도 포함하는 웹 페이지입니다. 예를 들어, 컴퓨터에 .NET Framework가 설치되어 있지 않으면 Install MyClickOnceApp(MyClickOnceApp 설치) 아래에 표시되는 메시지는 달라집니다.

Setup.exe는 응용 프로그램을 비롯하여 .NET Framework 자체 및 MDAC 2.8과 같은 모든 필요한 구성 요소를 올바른 순서로 설치할 수 있는 Win32 실행 파일입니다.

각 응용 프로그램 폴더에는 응용 프로그램 파일 및 매니페스트 파일이 들어 있습니다. 매니페스트는 기본적으로 다음과 같은 정보를 포함하는 XML 파일입니다.

  • 모든 응용 프로그램 파일의 정확한 ID. 이 ID는 파일 이름, 버전 번호, culture 및 프로세서 아키텍처(이 경우 "msil")로 구성되어 있습니다.
  • 응용 프로그램에 필요한 모든 사용 권한
  • 디지털 서명

응용 프로그램 실행

응용 프로그램을 다운로드한 후에는 다시 다운로드하지 않고도 실행할 수 있습니다. 이 기사의 예제에서는 웹 페이지 링크 또는 시작 메뉴의 바로 가기를 클릭하여 응용 프로그램을 시작할 수 있습니다. 두 경우 모두 응용 프로그램 업데이트 프로젝트 옵션의 설정에 따라 새 버전이 설치되어 있는지를 확인합니다. 필요한 경우 새 버전을 다운로드합니다.

이 업데이트 기능을 확인하려면 다음을 수행하십시오.

  1. 폼에서 단추의 위치를 변경하는 등 응용 프로그램에 대해 확인 가능한 변경을 수행합니다.
  2. 응용 프로그램을 다시 빌드하고 배포합니다.
  3. 응용 프로그램을 실행하고 다운로드 프로세스를 확인합니다.

마지막으로, 이 정보는 Visual Studio .NET의 베타 1 버전을 기반으로 한 것임을 다시 알려 드립니다. 새 버전에는 다른 기능이 있을 수도 있습니다.

비교 차트

  HREF .EXE UAB ClickOnce
응용 프로그램을 변경할 필요가 없음 X   X
응용 프로그램 격리 X   X
완전 지원 X   X
낮은 시스템 영향 X   X
코드 액세스 보안 보존 X   X
요청 시 파일 다운로드 X   X
필요한 파일을 선언적으로 나열하는 매니페스트   X X
암호화 서명된 매니페스트     X
파일 일괄 다운로드   X X
오프라인으로 작업 (*) X X
설치 완전 처리   X X
최적 성능   X X
Windows 2000 이상 필요   X (**)
Windows 셸 통합   X X
뛰어난 업데이트 프로세스 제어   X X
오프라인 작업 및 다운로드 프로세스 제어를 위한 API     X
옵션 패키지 자동 설치     X

(*) 사용자 작업 필요

(**) 베타 제품이므로 확정되지 않음

결론

ClickOnce는 매우 뛰어난 응용 프로그램 배포 기술입니다. 이 기술은 이전에 사용 가능했던 배포 모델이 자연스럽게 발전한 결과이며, Windows Forms 응용 프로그램의 뛰어난 클라이언트 환경에 기능성, 보안, 성능 및 유연성을 통합하여 제공합니다.

반응형