login register Sysop! about ME  
qrcode
    최초 작성일 :    2000년 10월 17일
  최종 수정일 :    2001년 08월 08일
  작성자 :    songgun
  편집자 :    songgun(송원석)
  읽음수 :    36,730

강좌 목록으로 돌아가기

필자의 잡담~

안녕하십까? 송원석입니다. 정말 오래간만에 인사를 드립니다. ^_^;...
저도 근본은 회사에 메인 사람인지라 근래에 상당히 시간적으로 촉박한 프로젝트가 있어서,
그간 강좌를 소홀히 하게 되었습니다. 이 자리를 빌어서 태요님과 여러분들께 죄송하다는 말씀을 드리겠습니다.

드디어 이번 강좌에서부터는 제 강좌의 핵심 부분에 해당하는, ASP 와 VB 컴포넌트를 이용한 IIS 관리 자동화의 실제 구현에 들어가겠습니다.

이 파트의 강좌는 여러분들의 기대와는 다르게(혹은 기대하시는 바와 같이...), 100% ASP 만을 사용하지는 않을 것입니다. 자세한 내용은 아래에 설명드리겠습니다만, ASP 가 VB 컴포넌트를 사용하는 형식으로 실제 IIS 를 제어하는 코드는 VB 컴포넌트 안에 모두 들어갈 것입니다.

하지만, VB 컴포넌트의 코드를 100% 공개할 것이므로 코드를 참고하시고 싶으신 분은 복사해서 변수 선언 부분만 손질하시고(예 : Dim Temp As String -> Dim Temp) 그대로 ASP 에 사용하시면 됩니다. 또한, 별로 좋은 코드는 아니지만 수정해서 사용하시고 싶으신 분이 계시면 걱정하지 마시고 마음대로 수정하셔도 됩니다. 다만, 혹 관련된 좋은 아이디어나 Tip 같은 걸 찾아내시면, 여기 태요님 사이트나 ASP Korea 같은 곳에 공개해 주시면 감사하겠습니다. (여유가 나시면 제게도 메일로 보내주시면 고맙겠습니다.. ^_^)


◈ ASP 만을 이용한 IIS 관리 자동화의 문제점

사실, ASP 만 이용해서 IIS 관리 자동화를 구현한다고 해도 크게 문제가 될 것은 없습니다. 그러나, 크게 문제가 될 것이 없는 것이지 전혀 문제가 없는 것은 아닙니다. 그런 이유로 일단 ASP 만을 이용해서 IIS 관리 자동화를 구현할 경우의 문제점에 대해서 먼저 몇가지 알아보도록 하겠습니다.

보안 문제 : 보안이라는 주제는 어느 때, 어느 장소에서건 상당히 중요한 문제입니다. 아시다시피 IIS 의 백도어 같은 사소한(?) 문제에서부터 시작해서 그보다 심각한 각종 보안에 관한 이슈들을 굳이 여기서 다시 설명드리지 않아도 여러분들께서는 이미 보안의 중요성에 대해 잘 알고 계실 것입니다. 하물며 IIS 관리 자동화라는 주제는 특정 웹 서버 자체를 완전히 외부에 노출할 수 있는 위험성을 가진 이슈입니다. 웹 서버의 폴더 구조, 관리자 계정 등등이 노출될 수 있는 가능성은 최대한 원천적으로 막는 것이 좋습니다.

보안의 역문제 : 보안 측면에서 볼 때, 그나마 다행히도 MS 는 메타베이스를 엑세스 할수 있는 권한을 Administrator 급에 한정했습니다. 하지만, 그것이 오히려 귀찮을 때가 있습니다. 예를 들어보겠습니다. 제 강좌를 읽으신 여러분들이 고생끝에 IIS 를 이용한 Web Hosting 서비스를 구축했다고 가정하겠습니다. 그리고, 타 회사의 Web Hosting 서비스와 차별화를 주기 위해 사용자들에게 사용자 자신의 웹 서버를 웹상에서 관리할 수 있는 기능을 주고 싶어졌습니다. - 예를 들면 자신의 서버를 중지, 재시작 한다든가 기본 문서를 바꾼다든가 하는 등등... - 하지만, 이러한 기능들은 필연적으로 메타베이스를 건드리게 되고, 그렇다면 이 기능을 사용하는 사람은 누구나 Administrator 급으로 로그온 해야만 합니다. 하지만, 저는 여러분들이 회원 전부에게 Administrator 급 계정을 발급하고 싶어하지 않는다고 자신있게 말할 수 있습니다.

부하 문제 : 여러분들의 관심사 중 가장 큰 부분 중 하나는 작성한 프로그램의 성능 개선이 차지하리라고 생각합니다. COM 이나 COM+ 를 이용하면 이런 문제를 해결할 수 있습니다. 그리고 위에서 언급한 두 가지 문제점을 모두 해결할 수 있습니다. 더군다나 VB 를 이용하면 COM 이나 COM+ 컴포넌트를 개발하는 것이 그리 어려운 일도 아닙니다. 결국 컴포넌트를 사용하지 않을 이유가 없는 것이고, 저도 이 강좌의 무게 중심을 ASP 컴포넌트 - 모든 ASP 컴포넌트는 기본적으로 COM 컴포넌트입니다. - 를 이용하는 쪽으로 수정했습니다.

태요님께서도 태요님의 강좌에서 VB 로 ASP 컴포넌트를 작성하는 방법을 이미 몇차례 소개해 주셨고, ASP 컴포넌트가 바로 COM 컴포넌트이므로 제 강좌에서 COM 에 대해 약간 설명드린다고 해도 큰 무리는 없을 것 같습니다. 하지만, COM 에 관심이 없거나 생소하신 분들을 위해 완전히 COM 위주로 강좌를 진행하지는 않겠습니다.


◈ IISAdmin 컴포넌트의 설치

IISAdmin 컴포넌트는 제가 강좌를 진행하기 위해 준비한 것으로, 실제로 제가 예전에 구축한 사이트에서 사용하고 있는 컴포넌트를 기반으로 한 것입니다. 태요님의 자료실에 설치 가능한 Setup 파일과 소스가 업로드 되어있으니 다운로드 받으시기 바랍니다.

이 컴포넌트는 VB 로 작성되었고, Windows 2000 Advanced Server 에서 Visual Studio Service Pack 4.0 을 설치한 후 컴파일 되었습니다. Setup.exe 를 이용해서 설치하실 경우 재부팅을 요구할 확률이 높으므로 현재 운영중인 서버에는 설치하지 마시기 바랍니다. 그리고, 저도 근본은 ASP 프로그래머지 VB 프로그래머가 아닌지라 원숙한 실력의 VB 프로그래머 여러분들이 보시기에는 그리 썩 좋은 코드는 아닐 것입니다. 상세한 구현의 세부 사항들은 강좌를 진행해 나가면서 그때마다 설명드리겠습니다.

그리고, 가급적 NT 4.0 에서도 별도의 손질없이 사용할 수 있도록 코드를 작성했습니다. 그러나, 현재 NT 4.0 이 주위에 없어서 Test 를 해보지 못했으니 주의하시고, Test 를 하신 분이 계시면 메일로 결과를 알려주시면 감사하겠습니다.

이번 강좌는 제 강좌의 4 번째 파트 강좌를 진행하기 위한 준비 작업에 해당합니다. 일단, Setup.exe 를 이용해서 컴포넌트를 설치하시기 바랍니다.


◈ MTS(COM+ : 구성 요소 서비스) 를 사용하지 않는 COM 컴포넌트

Setup.exe 를 이용해서 설치하신 컴포넌트의 현재 상태 까지가 바로 MTS(COM+ : 구성 요소 서비스) 를 사용하지 않는 COM 컴포넌트의 상태입니다. 이 상태로도 IISAdmin 컴포넌트를 사용하시는 데에는 큰 문제가 없습니다. ASP 에서의 사용법은 다른 컴포넌트와 마찬가지로 다음과 같습니다. (참고로 Server.CreateObject() 넘겨주는 문자열 중 'PEJLove' 의 의미는 제 여자친구의 이니셜입니다. 하하하.. 하하.. 하... -_-;... 죄송합니다...)

	
Dim Test
	
Set Test = Server.CreateObject("PEJLove.IISAdmin")
Set Test = Nothing	

하지만, 이 코드를 그대로 사용할 경우 IIS 나 ASP 쪽에서가 아니라 메타베이스와 컴포넌트 쪽에서 각각 한 가지씩의 문제점이 발생합니다. 다음의 코드는 IISAdmin 의 메소드 중 하나인 GetServerState() 를 호출하고 있습니다. GetServerState() 메소드에 대해서는 이후 진행되는 강좌에서 자세히 설명드리겠습니다만, 일단 간단히 설명을 드리면 GetServerState() 메소드는 지정한 서버가 현재 '정지'상태인지, '잠시 멈춤'상태인지, 또는 '실행' 상태인지를 파악해서 그에 해당하는 숫자를 리턴하고 만일 에러가 발생하면 -1 을 리턴하도록 되어있습니다. 그런데 아래의 ASP 프로그램을 실행시키면 코드에는 전혀 문제가 없는데도 불구하고 정상적인 리턴값이 아니라, 에러가 발생할때 리턴하도록 지정한 -1 값이 출력됩니다.

	
Dim Test
	
Set Test = Server.CreateObject("PEJLove.IISAdmin")
Response.Write Test.GetServerState("1")
Set Test = Nothing	


이런 결과가 나오는 이유는 ASP 파일에서 직접 IIS 에 접근할 때 발생하는 권한 에러와 같은 이유입니다. 즉, 아무리 로컬 머신에 설치된 IIS 에 접속한 것이라해도 브라우저를 통한 HTTP 프로토콜 요구는 특별한 설정이 없을 경우 무조건 'IUSR_컴퓨터이름' 계정의 권한으로 처리됩니다. 그런데 이 'IUSR_컴퓨터이름' 계정의 권한은 Guest 계정의 권한과 동일하므로 Administrator 급만 엑세스 가능한 메타베이스를 건드리려고 하는 경우 에러가 발생되고, 위와 같은 경우에는 그 에러가 발생하는 부분이 컴포넌트 내부이므로 저의 코딩에 의해서 -1 이 리턴되는 것입니다. 이 내용을 그림으로 자세히 설명하면 왼쪽과 같습니다.

 1. 사용자가 ASP 파일을 브라우저로 요청한다.
 2. ASP 파일에서 IISAdmin 컴포넌트를 생성하고 메소드를 호출한다.
    (이때의 사용 계정은 'IUSR_컴퓨터이름')
 3. 컴포넌트의 메소드가 해당 작업에 필요한 메타베이스를 엑세스한다.
    (그러나 권한이 없으므로 에러 발생)
 4. 컴포넌트의 메소드는 에러를 감지하고 에러값으로 -1 을 리턴.
 5. 결국 사용자는 에러값인 -1 을 리턴받는다.

이 문제를 ASP 차원에서 해결하기 위한 가장 빠른 방법은 해당 ASP 파일의 권한을 Administrator 에게만 열어주고 브라우저 상에서 계정과 암호를 입력받는 것입니다. 하지만, MTS 나 COM+ 를 사용하면 훨씬 세련되게 해결할 수가 있습니다. 그러나, 그 방법에 관해서는 잠시 후에 설명드리기로 하고, 일단 또다른 한 가지 문제점을 살펴보도록 하겠습니다.

위의 상태까지 진행하신 후 VB 에서 IISAdmin 컨트롤을 다시 컴파일하시고 설치된 DLL 파일을 갱신하시려고 하면, 다음과 같은 에러 메세지를 보이면서 취소됩니다.

이 에러는 어떤 프로그래밍 툴을 사용하시던지 ASP 컴포넌트를 개발해보신 분들은 한 번쯤은 경험해보신 에러일 것입니다. 그래서 이 에러를 해결하기 위해 별의별 방법이 다 동원되고는 했습니다. 심지어 초기에는 테스트를 한 번 할 때마다 NT 를 재부팅해야하는 경우도 있었습니다.

이 에러는 컴포넌트의 인스턴스가 아직 메모리상에 남아있기 때문에 아직 사용중인 컴포넌트를 갱신할 수가 없어서 생기는 에러입니다. - 사실 이 경우에 인스턴스라는 용어는 정확한 표현은 아닙니다. 좀더 정확한 용어가 있겠지만, 저도 일단 COM 전문가는 아니고 인스턴스라는 말이 익숙하므로 설명의 편의를 위해 인스턴스라는 용어를 계속 사용하도록 하겠습니다. - 대부분의 ASP 컴포넌트들은 인프로세스로 동작이 되는데, 자세한 설명은 접어두고 핵심만 말씀드리면 인프로세스로 동작이 되는 컴포넌트들은 그 컴포넌트를 생성한 프로그램이 종료가 되야만 완벽하게 메모리에서 사라지게 됩니다.

그런데, IIS 는 서비스이므로 컴퓨터를 재부팅하거나, IISAdmin 이라는 서비스 프로세스를 종료시켰다가 다시 시작하기 전에는 IIS(ASP)에서 사용했던 컴포넌트들의 인스턴스들이 완벽하게 풀리지가 않습니다. 따라서, VB 에서 재컴파일을 한 후 DLL 을 덮어쓰려고 하면, 사용중인 파일로 인식되므로 에러가 발생하는 것입니다. 결국 이 문제점도 MTS 나 COM+ 서비스를 사용하면 아주 세련된 방법으로 해결할 수 있습니다. 지금부터 그 방법을 알아보도록 하겠습니다.


◈ MTS(COM+ : 구성 요소 서비스) 를 통한 문제의 해결 : 1 단계

MTS 또는 '구성 요소 서비스'는 상당히 효율적이면서도 세련된 기능을 많이 가지고 있습니다. '제어판'에서 '관리 도구'를 여시고 '구성 요소 서비스'를 실행시키시기 바랍니다.

이전에 '구성 요소 서비스'를 사용해보신 적이 없다면 아마 왼쪽 그림과 같은 모습일 것입니다. '구성 요소 서비스'는 기본 관리 단위로 '응용 프로그램'을 사용합니다. '응용 프로그램'은 NT 4.0 의 MTS 에서 '패키지'라는 용어로 불렸었습니다만, COM+ 에서는 더이상 '패키지'라는 용어를 사용하지 않습니다. 대신 '응용 프로그램'이라는 용어를 사용합니다. 즉, 왼쪽 그림의 'COM+ QC Dead Letter Queue Listener ...' 부터 'System Application' 까지의 박스 모양 아이콘들은 모두 '응용 프로그램'을 의미하는 것입니다.

'응용 프로그램'은 컴포넌트들을 등록할 수 있는 일종의 박스입니다. 여기서 우리는 테스트를 위한 임시 'IISAdmin Test 응용 프로그램'을 만들도록 하겠습니다.

'COM+ 응용 프로그램' 노드를 선택하고 마우스 오른쪽 버튼을 누른뒤 위의 그림처럼 '새로 만들기/응용 프로그램' 메뉴를 선택합니다.

'COM 응용 프로그램 설치 마법사'가 나타나면 '다음'을 누릅니다.

그러면, 위의 그림처럼 '이미 만들어진 응용 프로그램을 설치합니다.'와 '빈 응용 프로그램을 만듭니다.' 라는 두 개의 버튼을 선택할 수 있는 '새 응용 프로그램을 설치하거나 만드기' 가 뜹니다. 저희는 완전히 새로운 응용 프로그램을 만드려는 것이므로 '빈 응용 프로그램을 만듭니다.' 버튼을 누릅니다.

그러면, '빈 응용 프로그램을 만들기'가 뜨는데 새 응용 프로그램의 이름을 'IISAdmin Test' 또는 적당한 이름으로 입력하시고 '활성화 유형'은 기본값 그대로 놔두십시요. '다음' 버튼을 누르시기 바랍니다.

그러면, 위와 같이 '응용 프로그램 ID 설정'이 나타나는데, 이 부분이 상당히 중요합니다. 여기서는 '대화형 사용자'와 '다음 사용자' 라는 두 가지 설정 중에 한 가지 설정을 선택할 수가 있는데, 이 부분에서 많은 분들이 실수를 하시곤 합니다. '구성 요소 서비스'를 잘 모르시는 분들은 무의식 중에 그냥 '다음' 버튼을 누르셔서 기본 값인 '대화형 사용자'로 설정이 되곤하는데, '대화형 사용자'의 의미는 '컴포넌트 실행시 로컬 로그온한 사용자'입니다. 무슨 말인가 하면 A 라는 컴포넌트를 '구성 요소 서비스'에 '대화형 사용자'로 등록했다고 가정하고, A 컴포넌트를 사용하는 '프로그램 X' 가 있다고 하면, Administrator 가 컴퓨터에 로컬 로그온해서 '프로그램 X' 를 사용하면 A 컴포넌트는 Administrator 의 권한으로 동작을 하게되고, Guest 가 컴퓨터에 로컬 로그온해서 '프로그램 X' 를 사용하면 A 컴포넌트는 Guest 의 권한으로 동작을 하게되는 것입니다.

따라서, A 컴포넌트는 로컬 로그온 한 사용자의 권한에 따라서 특정한 일을 수행할 수 있기도 하고 없기도 합니다. 그런데, 문제는 웹 서버에서 이 컴포넌트를 사용하는데 아무도 로컬 로그온 하지 않은 경우에 일어납니다. 상당수의 업체에서 관리할때 외에는 웹 서버에 로그온하지 않는 것으로 알고 있는데, 이 경우 웹을 통해서 그 웹 서버를 접속했는데, 마침 그 페이지가 위의 A 컴포넌트를 사용하는 페이지라면 로컬 로그온 사용자가 없는 것이 되므로 컴포넌트에 보안 관련 토큰이 넘겨지지 않게되므로 에러가 발생합니다.

이 예는 SNA Serevr 의 COMTI 컴포넌트나 ASP 콤포넌트를 사용할 때 흔히 발생하는 문제로 웹과 같이 로컬 로그온 여부에 상관없이 항상 사용할 가능성이 있는 컴포넌트는 반드시 '다음 사용자' 설정을 선택해서 적당한 권한을 가진 사용자를 직접 지정해주어야 합니다. 지금과 같은 경우에는 메타베이스를 엑세스해야만 하므로 Administrator 급의 사용자 계정과 암호를 입력해야합니다. 사용자 계정과 암호를 입력하신 후 '다음'을 누르십시요.

위의 그림은 마법사의 마지막 화면과 마지막 화면에서 '확인' 을 누른 후 '구성 요소 서비스'에 생성된 'IISAdmin Test 응용 프로그램'을 보여주고 있습니다.


◈ MTS(COM+ : 구성 요소 서비스) 를 통한 문제의 해결 : 2 단계


이제 우리에게 필요한 응용 프로그램을 ,등록했으므로 위의 두 가지 문제 중 일단 한 가지 문제를 해결해보도록 하겠습니다. 먼저, DLL 이 갱신되지 않는 문제를 해결해 보기 위해서 실제로 IISAdmin 컴포넌트를 IISAdmin Test 응용 프로그램에 등록해 보겠습니다.

컴포넌트를 등록하시려면 위의 그림처럼 'IISAdmin Test 응용 프로그램'의 하위 노드인 '구성 요소'를 선택하시고 마우스 오른쪽 버튼을 누른뒤 '새로 만들기/구성 요소' 메뉴를 선택하십시요.

그러면, 아래의 그림처럼 'COM 구성 요소 설치 마법사' 가 나타납니다. 별다른 내용이 없으므로 그냥 '다음' 버튼을 누르시기 바랍니다.

그러면, 응용 프로그램을 등록할 때와 비슷하게 위와 같은 '구성 요소 가져오기 또는 설치'가 나타나는데, IISAdmin 컴포넌트는 이미 Setup.exe 를 통해서 등록(레지스트리에)했으므로 가운데의 '이미 등록된 구성요소를 가져옵니다.' 버튼을 누릅니다.

그러면 위의 왼쪽 그림과 같이 로컬 머신의 레지스트리에 등록된 사용가능한 모든 컴포넌트들의 목록이 나타나는데, 목록에서 'PEJLove.IISAdmin'을 선택하고 '다음' 버튼을 누릅니다. 그러면 마법사의 마지막 화면이 나타나는데, 역시 별다른 내용이 없으므로 '확인'을 누릅니다. 위의 오른쪽 그림은 등록이 완료된 'PEJLove.IISAdmin' 컴포넌트입니다.

이제 인터넷 정보 서비스(Internet Service Manager) 에서 IIS 전체를 한번 멈췄다가 다시 시작하시기 바랍니다. 이렇게 하는 이유는 아까 컴포넌트를 '구성 요소 서비스'에 등록하기 전에 ASP 페이지를 실행시켰을 때 이미 'PEJLove.IISAdmin' 컴포넌트가 메모리에 올라갔기 때문에 이를 초기화 하기 위한 것입니다. 그러나, 여기까지 읽으시는 동안 한번도 'PEJLove.IISAdmin' 컴포넌트를 사용하지 않으셨다면 IIS 를 재시작하지 않으셔도 됩니다.

이제, 'PEJLove.IISAdmin' 컴포넌트가 한번도 메모리에 올라간 적이 없는 상황이 되었고, '구성 요소 서비스'에도 등록된 상태가 되었습니다. 이제 다시 아까의 ASP 파일을 실행시켜 보십시요. 그리고 '구성 요소 서비스' 를 선택하고 왼쪽의 트리에서 'COM+ 응용 프로그램'을 선택해 보십시요. 그리고 오른쪽을 보시면 아래의 그림과 같이 모두 3 개의 응용 프로그램이 돌아가고 있을 것입니다. 그림을 자세히 보시면 'IIS Out-Of-Process Pooled Applications', 'IISAdmin Test', 'System Application' 이렇게 세개의 응용 프로그램이 동작하고 있다는 것을 아실 수 있습니다. (실제로는 박스안의 구슬이 회전합니다.)

이 세개의 응용 프로그램들 중에서 'IISAdmin Test' 를 선택하고 마우스 오른쪽 버튼을 누르면 나오는 Pop-Up 메뉴들 중 '시스템 종료'를 선택하십시요. 그리고 다시 VB 로 돌아가서 컴파일을 하고 DLL 을 갱신해 보시기 바랍니다. 이번에는 에러없이 제대로 갱신이 될 것입니다.

이때 'System Application'는 종료시킬 필요가 없고, 사실 종료시켜도 종료되지 않습니다. 그리고, 'IIS Out-Of-Process Pooled Applications' 응용 프로그램은 그 가상 웹 서버자체를 의미합니다. 이전 강좌에서 이미 말씀드렸듯이 IIS 는 '구성 요소 서비스'(또는 MTS) 위에서 서비스됩니다. 그런데, IIS 5.0 에서는 새로 가상 웹 서버를 만들 경우 '응용 프로그램 보호'의 기본 설정이 '보통(풀링됨)'이므로 'IIS Out-Of-Process Pooled Applications' 응용 프로그램이 실행되는 것입니다. 따라서 여러분들이 가상 웹 서버의 '응용 프로그램 보호' 설정을 변경하셨다면 '구성 요소 서비스'에서 실행되는 응용 프로그램은 'IIS Out-Of-Process Pooled Applications' 이 아니라, 'IIS In-Process Applications' 응용 프로그램이 될 수도 있습니다.

그리고, 'IISAdmin Test' 는 말할것도 없이 'PEJLove.IISAdmin' 컴포넌트를 의미합니다. 따라서 'IISAdmin Test' 응용 프로그램을 정지시키면 'PEJLove.IISAdmin' 컴포넌트의 인스턴스가 완벽하게 메모리에서 제거되는 것입니다. - 사실 실제 내부에서 일어나는 과정은 이 정도의 설명보다 더 상당히 복잡합니다. 그러나 이 강좌는 COM+ 강좌가 아니므로 간단히 넘어가겠습니다. 이 부분을 자세히 알고 싶으신 분들은 정보문화사의 'Professional MTS MSMQ with VB and ASP' 를 참고하시기 바랍니다. - 이제 DLL 을 갱신할 때마다 IIS 를 재시작 할 필요는 없어졌습니다. 그럼 이번에는 계정 문제를 해결해보도록 하겠습니다. (사실 전 정보문화사와는 아무런 관계도 없습니다만, 이 책의 역자이신 '류광'님의 팬입니다. 그냥 제 입맛에 맞게 번역을 하시는것 같아서요. ^_^;)


◈ MTS(COM+ : 구성 요소 서비스) 를 통한 문제의 해결 : 3 단계

이제 'PEJLove.IISAdmin' 컴포넌트에 대한 계정 문제를 해결해 보도록 하겠습니다. 하지만 사실, 이미 'PEJLove.IISAdmin' 컴포넌트에 대한 계정 문제는 해결된 것이나 마찬가지입니다. 위의 1 단계에서 '다음 사용자' 를 Administrator 급의 사용자를 지정했다면 웹으로 접속한 사용자가 계정 정보를 넣었는지의 여부에 상관없이 'PEJLove.IISAdmin' 컴포넌트는 항상 Administrator 급의 권한을 가지고 동작을 할 것이므로 정상적으로 자료를 리턴합니다.

그러나, 뭔가 불안하지 않으십니까? 이런 상황이라면 해당 ASP 페이지에 접속할 수만 있다면 그 웹 서버는 누구든지 조정할 수가 있는 것입니다. 실제로 'PEJLove.IISAdmin' 컴포넌트에는 웹 서버를 정지시키거나 새로 만드는 메소드도 제공됩니다. 아무리 교묘하게 URL 을 숨겨놨다고 하더라도 그것만 가지고는 안심할수는 없을 것입니다. 좀더 세밀하고 정확한 인증시스템이 필요한 것입니다.

그래서, 우리들은 '구성 요소 서비스' 의 인증 시스템을 공부하려고 합니다. 실제로 '구성 요소 서비스'의 응용 프로그램에서 사용되는 계정은 두 종류입니다. 위에서 말씀드린 '대화형 사용자'와 '다음 사용자' 와 같은 계정은 그 컴포넌트를 대표하는 계정입니다. 이러한 종류의 계정은 그 컴포넌트가 할 수 있는 일을 제한합니다. 이러한 계정을 '신원 계정'이라고 하는데, 신원 계정은 결국 그 컴포넌트에 권한을 부여하는 역활을 합니다.

그리고 일반적으로 알려지지 않은 다른 종류의 계정이 있는데, 이런 계정의 이름은 '역할'(MTS 에서는 Roll) 이라고 합니다. '역할'은 누가 그 컴포넌트의 인스턴스를 만들수 있는지를 선언하는 계정입니다. 즉 이 '역할'에 포함되지 않는 사용자, 또는 그룹은 그 컴포넌트를 사용할 수 없는 것입니다. 따라서, 이 두 가지 계정을 잘 이용하면 누가 임의의 컴포넌트를 사용할 수 있는지, 그리고 그 컴포넌트는 어떤 권한을 가지고 동작을 하는지를 세세하게 설정할 수 있습니다.

그렇다면 실제로 이런 '신원 계정''역활'의 설정을 어떻게 하는지 한번 해보도록 하겠습니다. '신원 계정'은 위의 1 단계에서 설명드린 것과 동일한 방법을 이용해서 설정하시면 되므로, 이번엔 '역활'의 설정법을 중심으로 설명드리겠습니다.

위의 그림은 'IISAdmin Test' 응용 프로그램 등록 정보의 '보안' 탭과 'PEJLove.IISAdmin' 컴포넌트 등록 정보의 '보안' 탭입니다. 응용 프로그램을 처음 만들고, 컴포넌트를 처음 등록하면 위의 그림과는 달리 '권한 부여' 설정이 체크가 되어있지 않습니다. 그렇기 때문에 접속이 가능한 사용자는 누구라도 컴포넌트의 인스턴스를 만들 수 있었습니다. 두 '권한 부여' 항목에 모두 체크를 하시기 바랍니다.

'권한 부여' 항목이 모두 체크되면 그때부터는 '역할'에 등록되지 않은 사용자는 이 컴포넌트의 인스턴스를 만들수가 없습니다. 그러나, 현재로서는 '역할'이 하나도 존재하지 않으므로 아무도 'PEJLove.IISAdmin' 컴포넌트의 인스턴스를 만들수가 없습니다. '역할'은 다음과 같이 추가 할 수 있습니다.

위의 그림에서처럼 '역할'을 추가하고 싶은 응용 프로그램의 하위 '역할' 노드에서 마우스 오른쪽 버튼을 누르고 '새로 만들기/역할' 메뉴를 선택합니다. 그러면 역할의 이름을 입력하는 창이 나오고 그곳에 역할의 이름을 입력하면 역할이 만들어집니다. 한 응용 프로그램에서 만들수 있는 역할의 숫자는 논리적으로 이름이 중복되지 않는한 제한이 없는 것으로 알고 있습니다. 이제 역할에 사용자를 포함시켜야 합니다.

새로 만든 역할의 하위 노드를 보면 '사용자'라는 노드가 있습니다. 위의 그림에서처럼 이 노드를 선택하시고 '사용자' 노드에서 마우스 오른쪽 버튼을 누르고 '새로 만들기/사용자' 메뉴를 선택하면 사용자를 선택할 수 있는 다이얼로그 박스가 나타납니다. 여기에서 원하는 사용자들을 선택하면 됩니다.

이제 '역활'과 컴포넌트를 연결해야합니다. 다시 'PEJLove.IISAdmin' 컴포넌트의 '등록 정보'를 여시고 보안 탭을 보시면 왼쪽의 그림처럼 방금 만든 역할이 보입니다. 역할 앞에 있는 체크 박스를 체크하시고 '확인' 버튼을 누르시면 모든 것이 끝납니다. 만약 '역할'을 여러개 만드셨다면 현재의 컴포넌트에 적용하시고 싶은 '역할'만 체크하시면 됩니다.

이제 결과를 살펴보면 컴포넌트의 인스턴스를 만들수 있는 계정들은 오직 그 컴포넌트에 연결된 '역할'에 포함된 사람들 뿐입니다. 그리고, 컴포넌트는 Administrator 의 권한을 가지고 동작을 합니다. 이런식으로 '역할'과 '신원 계정'을 이용하면 임의의 컴포넌트에 엑세스할 수 있는 사람과 컴포넌트의 권한을 자유자제로 부여할 수가 있는 것입니다.

이제 남은 것은 'PEJLove.IISAdmin' 컴포넌트, 혹은 다른 컴포넌트들을 어디에 어떻게 사용하실지를 결정하신 후 그 상황에 맞는 권한을 주는 것입니다. 제 강좌를 계속 읽어보시기 위해서는 역할에 Everyone 을, 신원 계정에는 Administrator 급의 계정을 설정하시면 됩니다.


◈ 마치며...

제가 이번 강좌에서 말씀드린 '구성 요소 서비스'의 기능들 중 많은 것들이 MTS 때와는 달라졌습니다. MTS 자체가 '구성 요소 서비스'로 업그레이드 되면서 굉장히 많은 부분이 변했고, 또 그만큼 좋아졌습니다. 저도 아직 계속 공부해나가는 중이지만 제 개인적인 생각에는 .NET 이 정식으로 나와서 COM/DCOM 이 소용없어질 때까지는 Microsoft BackOffice 군의 코어 역활을 할 것이라고 생각합니다.

결국, NT 4.0 을 운영하시는 분들께서는 이번 강좌의 내용을 100% 그대로 적용하실 수는 없습니다. 사실, DLL 을 갱신하는 방법만해도 MTS 의 경우는 더 쉬운 편법이 있습니다만, 여러가지 궁색한 이유로 MTS 는 제대로 다루지 못하고 지나갔습니다. 그러나, 대부분의 컨셉은 거의 일치하므로 어느 정도는 도움이 되실 것입니다.

다음 강좌에서부터는 실제로 컴포넌트 내부의 코드들을 하나 둘씩 분석해나가면서 그 사용법을 알아보도록 하겠습니다. (글구, 빨리빨리 쓰겠습니다. ^_^;...)

감사합니다.


authored by


 
 
.NET과 Java 동영상 기반의 교육사이트

로딩 중입니다...

서버 프레임워크 지원 : NeoDEEX
based on ASP.NET 3.5
Creative Commons License
{5}
{2} 읽음   :{3} ({4})