Programming/Dot.NET

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

bcheul 2008. 2. 25. 13:52

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

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


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

  이벤트 동작을 위한 닷넷 보안 변경
Win32 시절에도 그랬지만 보안은 다가서기가 힘들다. 닷넷은 그나마 쉬운 편이니 큰 부담은 갖지 말기 바란다. 앞에서 이미 ‘이벤트’를 발생시키는 것이 ‘Unmanaged 코드를 호출할 수 없다’는 것으로 인해 예외가 발생한다고 했다. 그렇다면 당연히 그 보안 사항을 허락한다면 이벤트는 정상적으로 동작하게 될 것이다. 우선 이번 호에서는 보안 설정을 ‘Microsoft .NET Framework 1.1 구성’을 통해 해보겠다. 시작 메뉴에서 「프로그램 | 관리도구 | Microsoft.NET Frame work 1.1 구성」을 선택하자.
http://localhost의 경우에는 LocalIntranet_Zone에 설정된 권한이 적용되고, http://127.0.0.1로는 Internet_Zone이 적용된다. 바꿔 말하면, IP와 DNS로 접근할 때는 Internet_Zone이고, NETBIOS 이름이나 localhost로 접근하는 것은 LocalIntranet_Zone이다. 각각의 권한을 살펴보면 알겠지만 인터넷 존이 더 강화된 보안 규칙으로 제한하고 있는 것을 볼 수 있다.
그렇다면 무엇을 해야겠는가? 당연히 「런타임 보안 정책|컴퓨터|코드 그룹|All_Code|Internet_Zone」의 보안 설정을 바꿔야 할 것이다(설정을 마친 후 http://127.0.0.1/로 접근한다면 이벤트 관련해서 예외가 발생하지 않는다. 하지만 http://localhost로는 여전히 예외가 발생한다. 필자가 다음의 설명을 통해 Internet_Zone을 바꾸겠으니 이 글을 읽는 독자는 LocalIntranet_Zone을 바꿔보길 바란다).




<화면 7>에서 Internet_Zone의 ‘등록정보’ 창을 띄우고 ‘권한 집합’ 탭으로 가보자. <화면 8>에서 보는 것처럼 ‘권한 집합’이 ‘Internet’으로 설정되어 있다. 그리고 ‘Internet’ 권한 집합은 ‘파일 대화상자’, ‘격리된 저장소 파일’, ‘보안’, ‘사용자 인터페이스’, ‘인쇄’ 권한을 가지고 있다. 각각의 권한을 마우스로 클릭하고 ‘권한 보기’ 버튼을 눌러보자. ‘Internet’ 권한 집합은 <표 3>과 같이 설정되어 있다.
우리가 원하는 것은 ‘관리되지 않는 코드 호출 허용’이다. <화면 7>을 보면 「.NET Configuration 1.1|내 컴퓨터|권한 집합」 노드가 있는데 ‘Internet’ 권한 집합을 선택하자. MMC의 오른쪽 패널에 ‘권한 보기’만이 존재한다. 반면에 ‘Everything’ 권한 집합을 선택해 보자. 오른쪽 패널에 「권한 보기|권한 변경|권한 집합 이름 바꾸기」가 있는 것이 확인된다. 즉 ‘Internet’ 권한 집합은 더 이상 변경 불가능하다는 것을 의미한다. 스마트 클라이언트만을 위한 권한 집합을 새로 하나 만들어야 하는데, 보안 설정이 ‘Internet’ 권한 집합에서 하나만 추가할 것이기 때문에 기존 집합으로부터 복제해서 만드는 것으로 해보겠다.

① 「권한 집합|Internet」 컨텍스트 메뉴에서 ‘복제’를 선택한다. 새롭게 ‘Internet의 복사본’ 권한 집합이 생긴다.
② ‘속성’ 창을 띄우고 ‘권한 집합 이름’을 ‘SmartClientSet’으로 변경한다.
③ 오른쪽 패널에서 ‘권한 변경’을 선택한다.
④ ‘권한 집합 만들기’ 창이 열리는데 더 추가하거나 삭제할 것은 없다. 오른쪽의 ‘할당된 권한’ 목록에서 ‘보안’을 선택하고 ‘속성’ 버튼을 클릭하자. <화면 9>처럼 추가로 ‘관리되지 않는 어셈블리 호출 허용’을 체크하자.
⑤ ‘확인’ 버튼과 ‘마침’ 버튼을 차례로 누르자. 새롭게 ‘SmartClientSet’이란 새로운 ‘권한 집합’을 만든 것이다

이제 이것을 코드 그룹의 Internet_Zone에 적용시키면 된다. 하지만 잠깐 생각해 볼 것이 있다. Internet_Zone 전체에 SmartClientSet 권한 집합을 적용시키는 것이 타당한가? 그것은 로컬 시스템에 치명적인 보안 결함을 안겨주게 된다. 자신의 컴퓨터에서 방문하는 모든 인터넷 사이트의 스마트 클라이언트에게 그러한 권한 집합을 갖게 하는 것은 위험하다. 단지 특정 웹 사이트를 지정해 해당 권한을 추가해 주는 식이어야 한다.

① 코드 그룹의 Internet_Zone을 선택하고, 오른쪽 패널에 나오는 ‘자식 코드 그룹 추가’ 메뉴를 선택하자. 물론, 컨텍스트 메뉴로도 접근이 가능하다.
② ‘코드 그룹 만들기’ 대화창에서 ‘이름’을 InternetSmartClient_Zone으로 설정하자. 독자 임의로 이름을 지어도 된다.
③ ‘조건 형식 선택’을 해야 하는데, 우리가 관심있는 스마트 클라이언트는 인터넷으로부터 다운로드하여 실행되기 때문에 선택해야 할 조건은 ‘URL’이 된다. 선택하고 나면 하단에 URL 입력 상자가 나오는데 그곳에 http://127.0.0.1/*라고 입력한다.
④ ‘코드 그룹에 권한 집합 할당’에서 우리가 이전에 만들어 두었던 ‘Smart ClientSet’을 선택한다.

이것으로 설정은 모두 끝났다. 이전에 만들어 두었던 TreeControl을 테스트 해보자. http://127.0.0.1/WebApp/WebForm1.aspx로 탐색하고 트리에 나오는 노드를 선택해 보자. 예외 발생 없이 이벤트를 정상적으로 받는 것을 확인할 수 있다. 이제 여러분 나름대로 주제를 가지고 또 다른 스마트 클라이언트를 제작하여 테스트 해보기 바란다.
물론, 모든 문제가 깔끔하게 해결된 것은 아니다. 이로 인해 보안을 수정해야 하는 배포에 대한 문제가 발생한다. 이벤트를 사용하는 스마트 클라이언트의 경우에는 모든 클라이언트 컴퓨터마다 그와 같은 보안 설정을 해주어야 한다는 것인가? 아쉽게도 그래야 한다. 하지만 사용자로 하여금 직접 설정하게 할 수 있을 정도로 간단하지 않다. 따라서 배포하는 입장에서는 앞의 설정을 자동으로 해주는 프로그램을 만들어서 미리 사용자의 컴퓨터에서 실행하는 방식으로 배려해 주어야 한다. 이와 같은 배포 문제에 대해서는 3회에서 자세히 다루도록 하겠다.

COM에 대한 지식을 갖추자
스마트 클라이언트를 제작해 본 소감이 어떠한가. 닷넷만 알아서는 안 되는 문제라는 생각이 들 것이다. 아직까지는 닷넷 프레임워크 자체가 윈도우에서 운영되고 있으며, 윈도우에는 수많은 COM 기술이 녹아 있다. 결국 ‘닷넷(으로 만든) 컨트롤’이란 기존 COM을 사용하는 무수한 애플리케이션과의 연동을 위해서라도 COM에 대한 배려를 안 할 수 없고, 앞으로도 얼마 동안은 COM에 대한 지식이 있는 사람이 닷넷 컨트롤에 대해서도 많은 유연성을 발휘할 수가 있을 것이다.
다음 시간에는 현재의 프레임워크와 인터넷 익스플로러 안에서 기존의 액티브X가 썼던 기교를 스마트 클라이언트로 어떻게 대체되는지에 대해서 자세히 설명할 것이니 기대해 주기 바란다.