Programming/Dot.NET

IE에서 닷넷 스마트 클라이언트 개발1-스마트 클라이언트 탐험하기2

bcheul 2008. 2. 25. 13:50

출처 블로그 .. 맨 땅에 헤딩~


IE에서 닷넷 스마트 클라이언트 개발1-스마트 클라이언트 탐험하기2


스마트 클라이언트 탐험하기-2
  저 자 : 정성태
  출판일 : 2004년 2월호

  간단한 컨트롤 제작
처음부터 너무 쉽다고 설명해서 내심 걱정된다. 사실 간단한 컨트롤인데도 정작 고려해야 할 것이 많기 때문이다. 아직은 COM에 대한 요소도 적용되어 있고, WinForm 독립 프로그램과는 달리 클라이언트 접근에 대한 보안사항까지 민감하게 적용되다 보니 실제로는 닷넷 프레임워크에 대한 전반적인 지식을 요구할 정도이다. 비록 간단한 컨트롤 제작이지만 이번 시간을 모두 할애할 것이니 차근차근 숙지해 보도록 하자.

실습 : 기본적인 메쏘드, 프로퍼티, 이벤트를 구현한 스마트 클라이언트로써 HTML에서는 구현이 다소 복잡한 트리 컨트롤을 예제로 제작해 본다. 이번에 만드는 컨트롤은 나머지 연재에서 계속 확장될 것이므로 직접 실습해 볼 것을 권한다.





① <화면 1>과 같이 비주얼 스튜디오 닷넷 통합 환경을 실행시켜서 ‘WebApp’라는 웹 애플리케이션 프로젝트를 생성한다. <화면 1>과 같이 프로젝트를 생성하게 되면 비주얼 스튜디오 닷넷이 IIS 루트 디렉토리로 지정된 곳에 만들게 된다. 보통 C:\InetPub\wwwroot\WebApp 폴더가 될 텐데, 사실 이렇게 프로젝트가 생성되길 바라는 사람들은 없을 것이다. 그러니 자신의 작업 폴더(필자의 경우에는 D:\workshop) 아래에 ‘WebApp’ 폴더를 만들고 <화면 2>와 같이 등록정보 창에서 ‘웹 공유’ 설정을 한다. 그런 후에 ‘WebApp’ 웹 프로젝트를 만들면 사용자가 의도했던 ‘D:\workshop\WebApp’ 폴더에 비주얼 스튜디오 닷넷이 프로젝트 파일들을 생성하게 된다.
② <화면 3>과 같이 스마트 클라이언트를 구현할 ‘클래스 라이브러리’ 프로젝트를 생성한다(여러 언어 중에서 필자는 비주얼 C#을 선택했다).
③ 프로젝트 준비는 끝났으니 예정했던 대로 스마트 클라이언트 컨트롤을 생성해 보자. <화면 4>에서 보는 것처럼 ‘사용자 정의 컨트롤’을 선택하고 ‘TreeControl. cs’란 이름으로 추가하자.

④ 컨트롤 디자인 폼에 ‘도구상자’로부터 ‘TreeView’를 끌어다 놓고 이름을 ‘_treeView’로 수정한다.
⑤ TreeControl.cs에서 메쏘드와 프로퍼티를 구현하자. 자세한 코드는 ‘이달의 디스켓’을 참조하되 독자 나름대로 자유롭게 추가해 보기 바란다.
⑥ 제대로 된 기능을 구현하기 위해서는 트리 컨트롤의 노드를 클릭시에 이벤트를 발생시켜야 할 것이다. 하지만 이벤트는 복잡하므로 잠시 미루겠다. 컴파일 후 SmartClient.dll을 ‘WebApp’ 웹 응용 프로그램의 WebForm1.aspx가 있는 폴더에 복사하자. 실제 개발시에는 매번 DLL이 변경될 때마다 복사하기가 번거로우므로 <화면 5>와 같이 출력 경로를 지정해 놓으면 편리할 것이다.
⑦ ‘WebApp’ 프로젝트로 돌아가서 ‘WebForm1.aspx’를 수정해 보자. cs 코드는 수정할 필요없고, HTML을 다음과 같이 수정한다. 단계별로 살펴보면 다음과 같다.
ⓐ 예전의 액티브X 컨트롤을 사용하는 것과 방식은 같다. 해당 스마트 클라이언트의 public 메쏘드를 스크립트에서도 호출해 주면 된다.
ⓑ XML 데이터 아일랜드로 해서 XML 데이터를 컨트롤에서 쉽게 사용할 수 있도록 HTML 내에 넣어 두었다. 그리 중요한 사항은 아니다.
ⓒ 스마트 클라이언트가 HTML 내부에서 어떻게 사용될 수 있는지를 보여준다.태그를 사용한다는 면에서는 액티브X와 동일하다. 다른 부분이라면 classid뿐인데, 웹 서버에서 SmartClient.dll을 발견할 수 있는 상대경로 위치와 어떤 클래스를 활성화시킬 것인지에 대한 타입 정보를 기술하고 있다. 나중에 알게 되겠지만 SmartClient.dll 파일을 regasm.exe로 로컬에 COM 개체로 등록한다면 이 부분조차도 실제 CLASS ID로 교체 가능하다.



⑧ 구현 완료 및 테스트 준비가 모두 끝났다. WebApp 프로젝트를 컴파일하고, 웹 브라우저에서 http://localhost/WebApp/WebForm1.aspx로 가보자. <화면 6>과 같은 결과가 보일 것이다. 액티브X와 비교해 보면 얼마나 편리해졌는지 느껴지는 순간이다. 이번엔 http://127.0.0.1/WebApp/WebForm1.aspx로 해보자. IIS 6.0의 경우에 패스워드를 물어볼 것이다. 127.0.0.1을 ‘로컬 인트라넷’이 아닌 ‘인터넷’으로부터의 접근으로 인식하는데다가 IIS 6.0은 기본적으로 가상 디렉토리에 대해서 ‘익명 접근’을 허용하지 않도록 되어 있기 때문이다. 이 경우 매번 불편하게 계정을 입력하든지 아니면 IIS 6.0에서 ‘WebApp’ 가상 디렉토리에 대해서 ‘익명 접근’ 허용을 체크해 두면 된다.
한 가지 더 언급하자면, SmartClient.dll 어셈블리에 ‘강력한 이름 서명’을 하게 되면 127.0.0.1에서든 localhost에서든 전혀 활성화되지 않는다. 어떠한 기준이 적용되는지는 아직 모르겠지만 상식적으로는 이해가 되지 않는 기준이다.