2008. 12. 22. 10:00

Smart Client


  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에서 설명한 계산기를 이용할 것이다.

   기본 프로그램 제작에서 설명한 방식으로 프로젝트를 수동으로 하나 만든다. 프로젝트 이름은 CalcSmartClient로 한다. 참조에 System.dll과 System.Windows.Form.dll을 추가하고 CalcSmartClient.cs를 만든후 다음과 같이 코딩을 한다.

using System;

using System.Windows.Forms;

using System.Reflection;


class ShapeSmartClient

{

    public static void Main()

    {   

        try

        {

            Assembly assembly = Assembly.LoadFrom(

                "http://localhost/Calculator.exe");


            Type type = assembly.GetType("Calculator.MainForm");

            type.InvokeMember("Main",

                BindingFlags.Public | BindingFlags.Static | BindingFlags.InvokeMethod,

                null, null, null);

        }

        catch(Exception ex)

        {

            MessageBox.Show("서버 에러입니다. 네트워크를 확인 한 후 실행하세요");

        }

    }

}


이제 응용 어플리케이션을 약간 수정하여 IIS에 등록해보자. 어플리케이션 수정은 간단하다. 기본 프로그램 제작에서 잠시 언급했었는데 Main 함수 앞에 public으로 선언하는 것이다.

또한 IIS에 등록하는 것도 간단하다. http://localhost에 해당하는 디렉토리(설정을 변경하지 않았으면 c:\inetpub\wwwroot가 그 위치이다)에 실행파일(dll을 사용하면 dll 파일도 같이)을 복사하기만 하면 된다.

1. 실행파일의 위치를 설정한다.

            Assembly assembly = Assembly.LoadFrom(

                "http://localhost/Calculator.exe");

2. Main을 포함한 클래스 이름을 설정한다. 클래스 이름은 namespace.class의 형태로 입력한다.

            Type type = assembly.GetType("Calculator.MainForm");

3. Main을 호출한다.

            type.InvokeMember("Main",

                BindingFlags.Public | BindingFlags.Static | BindingFlags.InvokeMethod,

                null, null, null);


이것이 Smart Client 제작의 전 과정이다.


   이제 제작한 SmartClientClient를 실행 해보자.

   Calculator가 잘 실행 될 것이다.

   탐색기를 실행하여 C:\WINDOWS\assembly로 가면 왼쪽 Tree에 Download가 있을 것이다. 좀 특수한 구조로 되어 있어 실제 오른쪽 파일 보이는 곳에는 존재하지 않은 디렉토리이다. Download를 선택하면 다음과 같이 나타난다.

 Calculator가 여러게 있는 것을 볼 수 있다. 실제 CalcSmartClient.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를 입력하여 빌드 하고 생성된 실행파일인 CalcSmartClient.exe를 http://localhost/의 위치로 복사한다.

   HTML 파일(여기서는 test.htm)을 하나 만들어 다음과 같이 입력한다.

<html>

<body>

<a href="CalcSmartClient.exe">실행</a>

</body>

</html>

  같은 PC에서건 외부 PC에서건 test.htm 파일을 인터넷 익스플로어에서 열면 다음과 같이 화면에 나타난다.

   

  여기에 DLL과 Web Service에서 설명한 보안 설정 법과 앞으로 설명할 보안 설정법을 표시하는 것이 좋다. 이것은 단순 HTML 작성법으로 작성해서 실행 주변에 Link 걸어 주면 되므로 설명하지 않는다.

  실행을 선택하면 다음과 같은 대화 상자가 생성된다.

  실행을 선택하면 다음과 같이 보안 경고 대화 상자가 생성된다.

   실행 버튼을 누르면 실행이 된다.

   실제 인터넷에서 실행되는 프로그램처럼 보이고자 한다면 위 두 버튼을 안나오게 하면 될 것이다. 이것은 웹서버를 신뢰할 수 있는 사이트로 등록함에 의해 이루어 진다.

  인터넷 익스플로어를 실행하여 도구 메뉴의 부메뉴 인터넷 옵션을 선택하여 생성된 대화 상자에서 보안 탭을 누르면 다음과 같이 화면에 나타난다.

  사이트를 선택하면 다음과 같은 대화 상자가 생성된다.

   영역에 웹 사이트 추가에 http://서버 IP의 형태로 입력하고, 이 영역에 있는 모든 사이트에 대해 서버 확인(https:) 필요 체크 버튼을 해제하고 추가를 선택한 후 확인을 누르면 신뢰할 수 있는 사이트로 등록이 된다.

  이것은 ActiveX와는 완전히 다르다. ActiveX는 인터넷 익스플로어에 포함되어 실행되나 이 프로그램은 인터넷에서 실행되는 것 처럼 보이지만 인터넷 익스플로어와는 전혀 별개로 동작한다. 앞에서도 이야기 했지만 Microsoft 사에서는 보안 문제 때문에 ActiveX 와 같은 형태의 프로그램을 버릴려고 하고 있다. ActiveX와 비교해 단점은 일부는 일반 HTML 화면과 응용 어플리케이션 화면을 같이 보여 줄수 없고 별도의 화면으로 띄워야 한다는 것이다. 일반적으로 프로그램은 응용 어플리케이션을 독립적으로 띄워도 상관없는 것이 대부분이다.


다운로드

Posted by 굿데이