먼저 IIS 5.0과 IIS 6.0에서의 ASP.NET 실행환경의 차이는 굳이 적지 않아도 좋은 자료가 많고, 다들 알고 계시니 간단히 써놓고 넘어가겠습니다.
이에 관련되어 이 작업자 프로세스가 뜨는 계정을 제어할 수 있는 부분이 [응용 프로그램 풀]의 [ID]탭과 machine.config 파일입니다.
IIS 6.0 에서는 [응용 프로그램 풀]의 [ID]탭에서 계정 구성을 할 수 있습니다. 계정을 자신이 원하는 계정으로 바꾸고 적용하면 바로 w3wp.exe가 재시작 되면서 바꾼 계정으로 올라오게 되죠. 반면 IIS 5.0에서는 aspnet_wp.exe의 실행 계정을 바꾸려면 machine.config의 processModel 섹션을 고쳐주셔야합니다. MSDN의 <processModel> Element를 참고하시면, userName과 password를 설정할 수 있습니다.
주의하실 점은 [작업자 프로세스]의 계정을 설정하는 것과 실제 ASP.NET 응용 프로그램을 실행하는 계정을 설정하는 것과 동일하게 생각하시면 안된다는 점입니다. (제루는 같다고 생각했다가 삽질을 좀 했습니다. 물론 기본적으로는 권한을 상속받아서 씁니다.) 위에서 했던 계정 설정은 컴파일과 구성을 하는데 사용되는 계정의 설정입니다. 실제 응용 프로그램의 코드를 실행할 때는 가장(impersonation)이라는 개념을 사용합니다.
가장은 web.config와 machine.config의 <identity>섹션에서 설정할 수 있습니다. ASP.NET 가장 부분을 읽어보시면 설명이 나옵니다. 실제 컴파일 된 코드 (%windir%\Microsoft.NET\Framework\version number\Temporary ASP.NET Files 에 dll로 나온 코드)를 실행 할 때 지정된 사용자로 실행을 합니다. 이 때
가장모델의 경우 - IIS와 ASP.NET에서 윈도우 인증을 사용하는 경우 - Active Directory와 맞물려 보다 디테일하면서 공수가 적게 드는 권한 체계를 갖출 수 있다는게 큰 장점입니다. 메인 서비스를 이런식으로 올리는 경우는 지극히 드물겠지만 관리 서비스나 내부적인 인트라넷 서비스를 구축하는 경우에는 손쉽게 구축할 수 있겠네요.
이번의 삽질과 노력의 경우 UNC 공유를 통해 접근 가능한 스토리지 장비에 ASP.NET 응용 프로그램에서 I/O를 사용하면서 생겼던 문제였습니다. 폼 인증 방식을 쓰고, IIS 6.0에서 호스팅 되는 경우에는 드러나지 않았던 이러한 문제가 5.0 환경과 윈도우 인증을 사용하게 되는 경우에 나타나더군요. 특히나 관련 자료를 찾기가 애매했다는 점이 좀 더 삽질을 했던게 아닌가 생각됩니다. 사실 해결 방법은 간단했는데 processModel에서의 userName과 identity에서의 userName이 의미하는 바를 몰랐던게 가장 큰 원인이었습니다. ASP.NET 책을 보면서 배포 섹션은 크게 주의하지 않고 넘어갔는데, 이런 기회(?)로 공부를 많이 하게 되어서 그나마 다행입니다.
간만에 진지성 포스트입니다 'ㅁ')/
제루 Season 2, @Tokyo