Smart Client는 자동 Update 기능을 손쉽게 구현할 수 있는 기능입니다. 자동 Update 기능은 개념은 다르지만 이미 V3, 아래아 한글 등 많은 프로그램에서 기능을 구현해 놓았습니다.
Smart Client 기능은 타 응용 프로그램에서는 새버젼의 파일이 있을 경우 사용자에게 Update 할것인지를 선택하게 하나, Smart Client는 실행시 자동으로 Update됩니다.
이 기능을 응용하면 웹 브라우저에서 실행되는 것 처럼 구성할 수도 있습니다.
웹 브라우저에 포함되어 실행되는 프로그램은 기존에 ActiveX나 JAVA로 프로그램하여 구성하였습니다. 그러나 이 경우 사이트 방문자가 모르는 사이 프로그램이 설치되어 많은 문제를 야기 시켰다. 이를 해결하기 위해 Windows XP SP2이상에서는 보안 경고를 내보내고 있긴하나 완전한 해결책은 아닙니다.
따라서 C#에서는 웹 브라우저에 포함되어 실행되는 형태는 지원하지 않습니다. 따로 응용 어플리케이션을 다운 받아 실행할 수 있는 Smart Client 프로그램을 제작하여 배포함에 의해 웹 브라우저와는 별도의 화면으로 실행하도록 합니다.
이것은 필자가 C#을 접하면서 기대한 것과는 사뭇다릅니다. 필자는 ActiveX 같은 프로그램을 훨씬더 손쉬운 방법으로 제작할 수 있으리라 기대를 했었습니다. 그러나 Smart Client를 이용하면 ActiveX로 구성한 것과 비슷한 효과를 줄 수는 있습니다.
응용 어플리케이션을 일반적으로 작성하여 IIS에 등록을 하고, 이 응용 어플리케이션을 자동으로 Update 할 수 있는 Smart Client 프로그램을 작성하고 배포하여 실행 하면 IIS 서버에 등록된 응용 어플리케이션을 다운 받아 실행하는 방식을 사용합니다.
이제 실제 Smart Client 프로그램을 제작해 보겠습니다. 여기서 사용할 응용 어플리케이션은 DLL과 Web Service에서 설명한 계산기를 이용할 것입니다.
기본 프로그램 제작에서 설명한 방식으로 프로젝트를 수동으로 하나 만듭니다. 프로젝트 이름은 CalcSmart로 합니다. 참조에 System.dll과 System.Windows.Form.dll을 추가하고 CalcSmart.cs를 만든후 다음과 같이 코딩을 합니다.
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
namespace CalcSmart
{
class Program
{
static void Main(string[] args)
{
try
{
Assembly assembly = Assembly.LoadFrom("http://localhost/Calculator/Calculator.exe");
Type type = assembly.GetType("Calculator.Program");
type.InvokeMember("Main",
BindingFlags.Public | BindingFlags.Static | BindingFlags.InvokeMethod,
null, null, null);
}
catch (Exception)
{
MessageBox.Show("서버 에러입니다. 네트워크를 확인 한 후 실행하세요");
}
}
}
}
이제 응용 어플리케이션을 약간 수정하여 IIS에 등록해보겠습니다. 어플리케이션 수정은 간단합니다. 기본 프로그램 제작에서 잠시 언급했었는데 Main 함수 앞에 public으로 선언하는 것입니다.
또한 IIS에 등록하는 것도 간단합니다. http://localhost/Calculator에 해당하는 디렉토리(설정을 변경하지 않았으면 c:\inetpub\wwwroot\Calculator가 그 위치이다)에 실행파일(dll을 사용하면 dll 파일도 같이)을 복사하기만 하면 됩니다.
컴파일 할 때마다 복사하는 것은 조금 힘이듭니다. 이 부분을 자동화하는 것은 프로젝트 속성의 빌드 이벤트를 선택하여 나타난 화면에서 빌드 후 이벤트 명령줄에 아래와 같이 입력합니다.
copy $(TargetPath) C:\inetpub\wwwroot\Calculator\$(TargetFileName)
1. 실행파일의 위치를 설정합니다.
Assembly assembly = Assembly.LoadFrom("http://localhost/Calculator/Calculator.exe");
2. Main을 포함한 클래스 이름을 설정합니다. 클래스 이름은 namespace.class의 형태로 입력합니다.
Type type = assembly.GetType("Calculator.Program");
3. Main을 호출합니다.
type.InvokeMember("Main",
BindingFlags.Public | BindingFlags.Static | BindingFlags.InvokeMethod,
null, null, null);
이것이 Smart Client 제작의 전 과정입니다.
이제 제작한 SmartClient를 실행 해보겠습니다.
Calculator가 잘 실행 될 것입니다.
탐색기를 실행하여 C:\WINDOWS\assembly로 가면 왼쪽 Tree에 Download가 있을 것입니다. 좀 특수한 구조로 되어 있어 실제 오른쪽 파일 보이는 곳에는 존재하지 않은 디렉토리입니다. Download를 선택하면 다음과 같이 나타납니다.
Calculator가 여러게 있는 것을 볼 수 있습니다. 실제 CalcSmart.exe를 실행하면 이곳에 Calculator.exe를 찾아 존재하지 않거나, 파일의 크기, 날짜, Version을 비교하여 다르면 서버로부터 다운 받아 실행합니다. 참고로 실행 파일에서 사용하는 dll 파일을 그 루틴이 load 될 때(처음 사용될 때, 계산기 프로그램에서는 처음으로 = 키를 누를때) 자동으로 복사됩니다.
여기서 우리는 Calculator 제작시 버전에 대해 전혀 신경쓰지 않았다. Calculator 프로젝트를 열어 Assembly.cs를 열어 보겠습니다.
[assembly: AssemblyVersion("1.0.*")]라는 부분을 볼 수 있을 것입니다. 마지막에 *는 자동으로 버전이 입력되도록 한 것입니다. 이렇게 설정하면(초기 설정) 1.0.으로 시작하면서 나머지는 자동으로 입력이될 것입니다. 자동으로 입력이 되는 부분이 Soruce를 수정하여 빌드를 할 때 마다 바뀌어 버전이 부여됩니다. 참고로 이 부분을 포함하여 전체 버전을 수동으로 입력하여도 됩니다. SmartClient를 이용하여 배포하는 경우에는 필요없는 다운로드를 피하기 위해 수동으로 관리하는 것이 좋습니다.
이제 인터넷에서 실행되는 프로그램 처럼 보이게 해보겠습니다. Smart Client 프로그램 입력에서 http://localhost/Calculator.exe라고 입력 했던 부분 중 localhost 대신 실제 IP를 입력하여 빌드 하고 생성된 실행파일인 CalcSmart.exe를 http://localhost/의 위치로 복사합니다.
HTML 파일(여기서는 test.htm)을 하나 만들어 다음과 같이 입력합니다.
<html>
<body>
<a href="CalcSmart.exe">실행</a>
</body>
</html>
같은 PC에서건 외부 PC에서건 test.htm 파일을 인터넷 익스플로어에서 열면 다음과 같이 화면에 나타납니다.
여기에 DLL과 Web Service에서 설명한 보안 설정 법과 앞으로 설명할 보안 설정법을 표시하는 것이 좋다. 이것은 단순 HTML 작성법으로 작성해서 실행 주변에 Link 걸어 주면 되므로 설명하지 않습니다.
실행을 선택하면 다음과 같은 대화 상자가 생성됩니다.
실행을 선택하면 다음과 같이 보안 경고 대화 상자가 생성됩니다.
실행 버튼을 누르면 실행이 됩니다.
실제 인터넷에서 실행되는 프로그램처럼 보이고자 한다면 위 두 버튼을 안나오게 하면 될 것입니다. 이것은 웹서버를 신뢰할 수 있는 사이트로 등록함에 의해 이루어 집니다.
인터넷 익스플로어를 실행하여 도구 메뉴의 부메뉴 인터넷 옵션을 선택하여 생성된 대화 상자에서 보안 탭을 누르면 다음과 같이 화면에 나타납니다.
사이트를 선택하면 다음과 같은 대화 상자가 생성됩니다.
영역에 웹 사이트 추가에 http://서버 IP의 형태로 입력하고, 이 영역에 있는 모든 사이트에 대해 서버 확인(https:) 필요 체크 버튼을 해제하고 추가를 선택한 후 확인을 누르면 신뢰할 수 있는 사이트로 등록이 됩니다.
이것은 ActiveX와는 완전히 다릅니다. ActiveX는 인터넷 익스플로어에 포함되어 실행되나 이 프로그램은 인터넷에서 실행되는 것 처럼 보이지만 인터넷 익스플로어와는 전혀 별개로 동작합니다. 앞에서도 이야기 했지만 Microsoft 사에서는 보안 문제 때문에 ActiveX 와 같은 형태의 프로그램을 버릴려고 하고 있습니다. ActiveX와 비교해 단점은 일부는 일반 HTML 화면과 응용 어플리케이션 화면을 같이 보여 줄수 없고 별도의 화면으로 띄워야 한다는 것입니다. 일반적으로 프로그램은 응용 어플리케이션을 독립적으로 띄워도 상관없는 것이 대부분입니다.
예제 프로그램 다운로드
'C#' 카테고리의 다른 글
C#00. 목차 (0) | 2024.04.22 |
---|---|
C#11. DLL과 웹서비스 (0) | 2022.03.08 |
C#10. MDI 및 인쇄하기 (0) | 2022.03.08 |
C#09. 파일 지원 (0) | 2022.03.08 |
C#08. 메모리, 마우스 및 스크롤 (0) | 2022.03.08 |