는 아직도 IIS 4.0과 5.0으로 서비스를 제공하고 있다. 아마 '아직도 IIS 4.0(Windows NT)으로 서비스를 하는데가 있을까?' 의하해 할 수도 있겠지만 실제로 잘 사용하고 있다. 작년말부터 주요 서비스가 4.0에서 5.0으로 많이 바뀌긴 했지만 말이다. IIS 6.0은 아직 사용해보지 못한 상황에서 이제 7.0 얘기가 나오고 있다. 7.0 과연 뭐가 바뀐것인지
닷넷채널 9호 특집으로는 이번에 대폭 변화된 IIS 7에 관한 내용으로 정했다. 점점더 Apache를 닮아가는 듯한 모습이지만 MS특유의 컨셉은 아주 잘 살렸다는 평을 듣고 있다.
이번글은 국내에 유일한 IIS분야의 Microsoft MVP인 송원석님이 제공해 주신 글로 아티클 하나하나에 상당한 정성을 쏟으시는 분이다.
IIS 7.0 인스퍼레이션 - 01
드디어 마이크로소프트의 새로운 운영체제 제품군인 윈도우 비스타가 각 에디션별로 정식 출시되었다. 그와 더불어 비스타 제품군을 통해 새롭게 제시된 다채로운 신기술들과 기반 구조들이 개발자들을 위시한 관련업계 종사자들의 폭넓은 주목을 받고 있는 중이다. 결과적으로 개발자들은 본인이 원하든 원하지 않든 간에 불가항력적인 변화의 물결을 이겨내야만 하는 시점이 다시 한 번 도래한 것이다. 그리고 본문을 시작으로 앞으로 계속될 몇 편의 글들을 빌어 논의하고자 하는 IIS 7.0 또한 기존 버전과 비교하여 비약적인 발전이 이루어 졌으며 최종적으로는 개발자들과 서버 관리자들의 작업 환경에 무지막지한 파급 효과를 불러일으킬 것이라는 것이 필자의 판단이다. 미상불 우리 웹 개발자들도 거대한 물결의 흐름을 벗어날 수는 없는 것이다. 먼저 이번 글에서는 기술적인 관점에서 IIS 7.0 의 보다 깊은 부분들을 살펴보기 위한 전단계로서, IIS 7.0 을 설치하는 전반적인 방법을 살펴보고자 한다. 지금까지 IIS 의 다른 버전들을 이미 능숙하게 다뤄오신 분들로서는 그리 별다를 것 없는 주제라고 생각하실 수도 있겠지만, 감히 단언컨데 그 생각은 절대로 오산이다. 아마도 본문을 다 읽고 나면 과거 IIS 3.0 에서 IIS 4.0 으로 업그레이드 하고 나서 느꼈던 것과 비슷한 기분을 경험하게 되는 분들이 분명히 계시리라고 믿는다.
그러면 본격적인 논의를 진행해 나가기에 앞서 먼저 현재 출시되어 있는 비스타와 코드네임 롱혼 서버 제품군의 개발 현황을 다시 한 번 되짚어보도록 하자. 2007 년 03 월 말 현재, 비스타 제품군은 이미 정식 출시되었으며, 비스타의 서버 제품군에 해당하는 코드네임 롱혼 서버는 바야흐로 베타 테스트와 개발이 한창 진행되고 있는 중이다. 그리고 현재 MSDN Subscription 을 통해서 다운로드 받을 수 있는 롱혼 서버의 가장 최신 버전은 x86 을 기준으로 Windows Server Longhorn February 2007 CTP 버전이다. 그런데 이 시점에서 한 번 주의 깊게 생각해봐야 될 부분이 있다. 너무나도 당연한 얘기겠지만 현재 개발이 한창 진행되고 있는 롱혼 서버에도 IIS 7.0 은 포함되어 있다. 그렇다면, 이 롱혼 서버에 포함된 IIS 7.0 은 개발이 완료된 것일까? 다시 말해 비스타에서 제공되는 IIS 7.0 과 롱혼 서버의 IIS 7.0 은 동일한 버전이며 단지 서버 전용으로 약간의 기능들만이 확장된 버전에 불과한 것일 뿐일까? 아쉽게도 - 사실은 너무나도 행복하게도 - 정답은 '그렇지 않다.' 가 맞다. 이는 필자가 IIS MVP 의 자격으로 참가할 수 있었던 금년도 2007 MVP Global Summit 에서 IIS 개발팀으로부터 직접 확인한 내용으로 롱혼 서버에 포함된 IIS 7.0 은 현재도 계속해서 많은 개선 작업과 조정 작업이 이루어지고 있는 중이다. IIS 개발팀의 말에 따르면 비스타에서 제공되는 IIS 7.0 은 롱혼 서버의 정식 출시 시점에 즈음하여 서비스 팩 등의 방법을 통해 새롭게 업그레이드 될 예정이라고 한다.
그래서 필자는 본문에서 IIS 7.0 의 설치를 살펴보기 위해 사용할 운영체제의 버전을 비스타가 아닌 롱혼으로 결정했는데, 사실 이 롱혼은 마이크로소프트가 제공하는 일반적인 채널을 통해서 얻을 수 있는 버전은 아니며 2007 MVP Global Summit 에서 IIS 프로덕트 유닛 프로그램 메니저인 크리스 애덤스 (Chris Adams) 씨로부터 제공받은 버전으로서 아마도 현재 시점에서 당분간은 롱혼 서버의 IIS 7.0 의 가장 최신 모습을 살펴볼 수 있는 버전이지 않을까 하는 생각이다. 그리고 한 가지 명확하게 밝히고 넘어갈 부분은 본문에서 이루어지는 모든 기술적 또는 비기술적인 논의는 필자의 개인적인 생각과 의견만을 반영하고 있을 뿐이며 마이크로소프트는 본문의 내용에 대한 그 어떠한 보증도 하지 않는 다는 점이다.

비스타와 롱혼 서버에 IIS 7.0 을 설치하는 방법으로는 일반적으로 세 가지 정도의 방법이 알려져 있다. 먼저 비스타나 롱혼 서버가 자체적으로 제공해주는 사용자 인터페이스를 사용하여 설치하는 방법과 명령 프롬프트를 통한 설치 방법, 그리고 마지막으로 무인설치 방법이 바로 그것이다. 그리고 그 밖에도 다소 특별한 형태인 IIS 6.0 으로부터 업그레이드를 하는 시나리오도 생각해 볼 수 있을 것이다. 본문에서는 이미 설명했던 바와 같이 그 중 롱혼 서버상에서 서버 관리자 (Server Manager) 도구를 사용하여 IIS 7.0 을 설치하는 가장 보편적인 형태의 시나리오를 중점적으로 살펴볼 것이다. 나머지 다른 설치 방법들에 대해서는 먼저 IIS 7.0 에 어느 정도 친숙해진 뒤에 다시 한 번 자세하게 살펴보기로 하자. 아마도 개발자분들은 대부분 사용자 인터페이스를 사용하는 설치 방법을 사용하게 되겠지만, 다수의 서버를 동시에 관리하는 서버 관리자분들이나 일부 특수한 형태의 IIS 7.0 구성 설정을 고객들에게 제시할 필요가 있는 분들, 그리고 반복적으로 동일한 설치 작업을 빈번하게 수행하는 업무를 담당하는 분들과 같은 경우에는 명령 프롬프트를 통한 설치 방법이나 무인설치 방법도 사용자 인터페이스를 사용하는 설치 방법 못지 않게 대단히 중요한 비중을 차지할 것이다.
자유롭게 조립 가능한 모듈 기반의 웹 서버, IIS 7.0 IIS 7.0 은 사용자가 원하는 대로 조립이 가능한 모듈 기반의 웹 서버로 완벽하게 다시 설계되었다. 이 말을 새로운 버전의 소프트웨어들이 늘상 버릇처럼 얘기하는 단순한 홍보문구 정도로 가볍게 생각하지 말기 바란다. 문장과 단어가 의미하는 바 그대로 기반 구조부터 완벽하게 다시 설계되었기 때문이다. 그리고, 바로 이 점이야말로 IIS 7.0 의 가장 큰 특징인 동시에 다른 핵심적인 기능들을 전반적으로 지배하는 중핵이다. 그러면 모듈 기반의 웹 서버가 가져다주는 장점을 직접 느껴보기 위해 한 가지 간단한 예를 들어 보도록 하자. 멀리에서 거창한 사례를 찾을 것 없이 여러분들이 현재 관리하고 있거나 개발에 사용하고 있는 IIS 서버에서는 어떠한 인증 방법을 사용하고 있는지 각자 한 번 가만히 생각해보기 바란다. 아마 예상컨데 대부분 익명 접근이 가능하도록 설정된 상태에서 ASP.NET 의 폼 인증 정도를 구현하는 경우가 거의 대다수일 것이다. 개인적인 경험을 미루어 짐작해보면 내부적으로 엑티브 디렉터리를 통한 인증이 이루어지는 경우와 같이 다소 특별한 경우에도 Windows 통합 인증을 사용하거나 하는 경우는 매우 드물고, 실제 구현은 코드에 의존한 채 폼 인증과 유사한 구성을 크게 벗어나지 않도록 설계된 경우가 거의 대부분이다. 사실 아닌게 아니라 당장 필자만 해도 .NET Passport 인증과 같은 경우에는 사용해본 경험이 거의 전무하다.

이 이미지는 필자의 노트북에 설치된 IIS 6.0 에서 캡춰한 '인증 방법' 대화 상자의 모습이다. 그런데 한 번 재미있는 가정을 해보도록 하자. 만약 이 대화 상자에 존재하는 여러가지 기능들을 각각 분리하여 그 중 사용자가 설치하고자 하는 기능들만을 개별적으로 설치할 수 있다면 어떨까? 예를 들어서, '익명 인증' 기능은 가장 기본적인 기능이므로 언제나 설치되도록 하고, 그 밖에 'Windows 통합 인증' 기능이나 'Windows 도메인 서버의 다이제스트 인증' 기능, '기본 인증' 기능, 그리고 '.NET Passport 인증' 기능 등은 정말로 필요한 경우에만 개별적으로 설치할 수 있는 것이다. 만약 이런식의 설치가 가능했다면 전국에 존재하는 거의 대부분의 IIS 서버에는 '익명 인증' 기능만 설치되어 있는 상황이 벌어져 있지는 않았을까? 구성하고자 하는 IIS 서버가 이미지만을 호스트하기 위한 이미지 서버인 경우라던가, ASP.NET 웹 응용 프로그램이 운영될 서버이긴 하지만 폼 인증 이외의 인증이 이루어질 이유가 전혀 없다면 필자는 주저하지 않고 IIS 에서 '익명 인증' 이외의 기능들은 모조리 제거해 버릴 것이다. 왜냐하면 그 결과로 인해 얻을 수 있는 이득이 들어가는 노력에 비해 너무나도 크기 때문이다. 반갑게도 IIS 7.0 에서는 바로 이와 같은 식의 설치와 관리가 가능해졌다.
이러한 모듈 기반의 웹 서버가 갖고 있는 장점은 대단히 명확하다. 무엇보다도 사용자가 필요로 하는 기능 모듈들만을 조합하여 가볍고 안정적인 웹 서버를 구성하는 것이 가능해진다. 우리가 방금 살펴보았던 것과 같이 전혀 사용하지도 않는 기능들이 설치될 하등의 이유가 없는 것이다. 물론 구 버전의 IIS 에서도 어느 정도까지는 설치할 기능들을 사용자가 선택하는 것이 가능했지만 대단히 제한적이었으며 대부분의 기능들은 그나마 선택의 여지도 존재하지 않았다. 그 가장 좋은 사례가 위와 같은 인증 기능들과 ISAPI 관련 기능들, 그리고 CGI 관련 기능 등이다. 극단적으로 말해서 이와 같은 기능들을 설치하지 않을 수 있는 방법은 오직 IIS 그 자체를 설치하지 않는 길 뿐이었다. 어떤 분들은 이렇게 반문할지도 모른다. IIS 6.0 에서는 비록 ISAPI 관련 기능들과 CGI 기능이 설치되기는 하지만 기본적으로는 비활성화 되어 있으므로 그 점만 놓고 본다면 그다지 달라진 점도 없지 않느냐라고 말이다. 그러나, 일단 설치가 되고 사용되지 않는 것과 아예 설치조차 되지 않는 것에는 많은 차이점이 존재한다. 즉, 웹 서버에 어떤 임의의 기능이 설치는 되어 있지만 비활성화 되어 있다고 가정해본다고 할 때, 그래도 여전히 해당 기능은 서버의 메모리에 로드되며 비교적 적은 양에 불과하겠지만 어느 정도까지는 별다른 의미도 없는 헛된 CPU 싸이클을 소모할 수 밖에 없다. 더군다나 이 기능의 코드 블럭은 엄연히 웹 서버의 요청 파이프라인상에 존재하게 되므로 결과적으로 성능 감소로 이어질 수 밖에 없는 것이다. 간단하게 말해서 모듈이 십 여개 내외만 올라가 있는 웹 서버와 수 십 여개의 모듈이 올라가 있는 웹 서버 중에서 어떤 웹 서버의 성능이 더 뛰어날지는 물어볼 필요도 없는 것이다. 그리고, 지금까지 얘기한 내용들보다도 더 중요한 점은 악의적인 사용자로부터 공격받을 수 있는 잠재적인 접근점이 여전히 남아있게 되며 사용하지도 않는 기능으로 인한 패치와 업데이트 작업 등의 서버 관리가 뒤따르게 된다는 점이다.
그렇다면 남은 문제는 과연 얼마나 다양한 모듈들이 얼마나 많이 제공되는지가 관건일 것이다. 먼저 각자 아래의 이미지를 클릭하여 큰 원본 이미지를 한 번 자세히 살펴보기 바란다. 참고로 이 이미지는 IIS 개발팀의 공식 사이트인
IIS.net (
http://www.iis.net/) 으로부터 링크해 온 것으로 IIS 7.0 에서 기본적으로 제공해주는 모듈들을 체계적으로 잘 정리하여 일목요연하게 나타내주고 있다. IIS 7.0 은 여러분들이 이미지를 통해서 살펴볼 수 있는 바와 같이 웹 서버 코어와 약 40 여 개의 모듈들로 구성된다. 그리고 기본적으로 제공되는 모듈의 대부분은 기존의 기능들이 모듈화 된 것이지만 요청 필터링 (Request Filtering) 모듈과 같이 외부의 기능이 모듈화되어 흡수된 경우도 존재한다. 고무적인 사실은 이 각각의 모듈들이 서드 파티 모듈이나 커스텀 모듈로 대체되거나 동시에 실행될 수 있을 뿐만 아니라, C 나 C++ 언어에 익숙하지 않은 ASP.NET 개발자들도 HTTP 모듈의 형태로 커스텀 모듈을 개발하여 C 나 C++ 언어를 사용하여 작성한 네이티브 서버 API 모듈과 동일한 형태와 동일한 방식으로 사용할 수가 있다는 점이다. 바야흐로 ASP.NET 개발자가 곧 IIS 서버 개발자인 시대가 다가온 셈이다. 이 커스텀 모듈 개발에 관해서는 나중에 다시 자세하게 살펴보기로 한다.

이제 필요한 기반 지식이 어느 정도 갖추어졌으므로 실제의 설치 작업을 한 단계씩 살펴도록 하자. 롱혼 서버에서 IIS 7.0 의 설치와 관련된 모든 작업은 새로운 관리 도구인 서버 관리자 (Server Manager) 를 통해서 이루어진다. 비스타를 생각하고 제어판에서 'Windows 기능 사용/사용 안 함' 을 실행시켜봐도 역시 서버 관리자가 실행된다. 서버 관리자는 그 이름이 뜻하는 바 그대로 롱혼 서버를 관리하기 위한 기능들을 제공해주는 도구로, 얼핏 생각하기에는 2003 제품군에서 제공해주던 '사용자 서버 관리' 도구와 비슷한 것처럼 보일 수도 있겠지만 그 내용과 질적인 면에서 비교가 되지 않는 강력한 도구다. 물론 IIS 7.0 을 관리하기 위한 가장 중추적인 도구는 인터넷 정보 서비스 관리자이지만 서버 관리자는 조금 더 포괄적인 시점에서 롱혼 서버 전체를 관리할 수 있게 도와주며, 롱혼 서버를 설치하고 나서 로그인을 하면 기본적으로 자동 실행된다. 아니면 시작 메뉴나 빠른 실행의 아이콘 등을 이용하여 실행시킬 수도 있다. 다음은 필자의 가상 서버에 설치된 롱혼 서버에서 서버 관리자를 실행시킨 모습이다. 본문에 첨부된 이미지 대부분은 마우스로 클릭을 하면 큰 크기의 이미지를 볼 수 있으므로 참고하기 바란다.

이 이미지에서 볼 수 있는 것처럼 서버 관리자의 좌측 패인에는 각각의 관리 요소들에 대한 카테고리들이 트리뷰 형태로 제공되며 그 우측 패인에는 좌측 트리뷰에서 선택된 항목에 대한 구체적인 정보와 실제 작업 처리를 위한 링크들이 제공된다. 예상컨데 서버 관리가 주업무이신 분들은 앞으로 이 화면을 지겹도록 보게될 것이다. 좌측의 트리뷰에서 Roles 노드를 선택해보자. 그러면 다음과 같은 화면이 나타나는데, IIS 7.0 의 설치를 위해서는 여기에서 롱혼 서버가 제공해주는 17 가지 종류의 역할들 중 하나인 Web Server (IIS) 역할을 추가해야만 한다. 현재는 서버에 추가되어 있는 역할이 하나도 없기 때문에 도움이 될만한 정보가 거의 전무하지만 일단 어떤 역할이 추가되고 나면 이 화면에 다양한 정보들이 출력된다. 이 정보들에 대해서는 역할 추가 작업이 모두 마무리되고 난 뒤에 다시 한 번 자세히 살펴보도록 하겠다. 자 그러면 이제 'Add Roles' 링크를 클릭하여 '역할 추가 마법사 (Add Roles Wizard)' 를 실행시킨다.
역할 추가 마법사의 첫 화면에서는 그저 약간의 설명과 간단한 주의사항만 나타날 뿐이다. 한 번 부담없이 읽어보고 다음 단계로 이동한다. 'Do not show this page again' 체크 박스를 체크하여 다음부터는 이 화면이 나타나지 않게 설정하는 것도 좋을 것이다.
다음 단계는 서버에 추가할 역할들을 선택하는 단계다. 각각의 항목들을 한 번 천천히 살펴보기 바란다. 너무나 당연한 얘기겠지만 우리들은 그 중 Web Server (IIS) 역할을 체크하여 선택해야 한다.
그런데 이 시점에 대단히 흥미로운 일이 한 가지 발생한다. 비록 표면적으로는 조그마한 대화 상자가 하나 나타나는 것에 불과하지만 이것이 내부적으로 시사하는 바는 꽤나 복잡하다. Web Server (IIS) 역할을 체크하여 선택하면 다음과 같은 대화 상자가 나타나는데, 이 대화 상자의 내용은 Windows 프로세스 활성화 서비스라는 일련의 기능 집합을 함께 설치하지 않으면 웹 서버를 설치할 수 없다는 경고성 메시지이다. 실제로도 이 기능의 설치에 동의하지 않으면 Web Server (IIS) 역할의 설치를 계속 진행할 수가 없게 된다. 눈치 빠르신 분들은 이미 알고 계시겠지만 Windows 프로세스 활성화 서비스 (이하 WAS) 는 앞에서 살펴본
설치 모듈 이미지의 가장 하단 부분에서 이미 살펴본 것이다. 이 WAS 는 도대체 어떤 역활을 하는 것일까?
이 기능은 서비스의 형태로 구현되어 있으며 과거 버전에서 World Wide Web 게시 서비스 (W3SVC 서비스 또는 WWW 서비스) 가 담당하던 응용 프로그램 풀 구성 설정과 작업자 프로세스 관리를 대신 처리해준다. WAS 의 가장 큰 특징은 WWW 서비스와는 달리 HTTP 프로토콜 이외에도 TCP 나 명명된 파이프와 같은 비 HTTP 프로토콜까지 지원해주며, 이러한 프로토콜 모두에 대하여 같은 구성 설정 방법과 프로세스 모델을 사용할 수 있게 해준다는 점이다. 한 가지 주의해야 할 점은 IIS 는 WAS 에 종속되지만 WAS 는 IIS 에 종속되지 않는다는 점이다. 예를 들어서 이 WAS 는 WCF 호스팅을 위한 기반 구조 중 하나로 사용되기도 하는데 (WCF 호스팅 형태에는 1. WAS 환경, 2. 콘솔 또는 윈폼 스타일의 .exe 파일 형태, 그리고 3. 서비스 형태가 있다.), 문제는 비스타의 에디션에 따라 IIS 의 설치가 불가능한 경우가 존재한다는 것이다. 즉, 비스타 제품군 중에서 스타터 에디션과 홈 베이직 에디션에는 IIS 의 설치가 불가능하며, 따라서 만일 WAS 가 IIS 에 종속적이었다면 이 두 가지 에디션에서는 WAS 환경하에 호스팅되는 WCF 의 구현이 어려웠을 것이다. 그러나 비스타 스타터 에디션과 홈 베이직 에디션에서도 WAS 는 IIS 와는 독립적으로 설치가 가능하며 WCF 를 설치할 때 필요에 따라 자동적으로 설치되므로 사용자가 직접 명시적으로 설치해줄 필요도 없는 것이다. 한 가지 재미있는 것은 이와 같은 경우에도 동시 처리 제한값이 존재한다는 점인데 그 값은 3 개 이다. WAS 에 대한 보다 자세한 정보는 마이크로소프트 테크넷에 게제된
관련 문서를 참고하기 바란다. 이제 대화 상자에서 'Add Required Features' 버튼을 클릭하면 다음과 같이 Web Server (IIS) 역할이 선택된다.
다음 단계로 이동한다.
댓글을 달아 주세요
글 잘 읽어 보았습니다...
2008/04/15 15:30저도 그 문제로 고민하고 있는데요 OS는 2003 입니다.
그런데 링크가 연결이 안되네요.
방법좀 자세히 알려주시겠어요?
링크가 잘못되어 있네요. 링크 수정했습니다.
2008/04/16 10:032003에서 설정하는 방법에 대해서도 링크를 추가했습니다.
허접한 글 읽어주셔서 감사합니다.
감사합니다...덕분에 한방에 해결되었습니다.
2008/04/22 10:23즐거운 하루 보내세요..~~~
해결됐다니 정말 다행입니다.별내용도 없는 글이 도움이 되서 정말 기쁩니다. 행복하세요.
2008/04/22 11:36움냐리.. IIS6.0 인데요.. 링크보고 아무리 해도 안되네요;;
2008/04/29 17:13혹시 6.0에서 성공하신분 방법좀 알려주세요.. ㅠㅠ
제가 IIS 6.0을 테스트할 환경이 안되서 도움을 드릴 수가 없네요.
2008/04/30 14:50죄송합니다.
검색하다가 들어오게 되었는데요.. 저희도 회사 홈페이지 와 텍스트큐브를 동시에 사용해야합니다. 근데 IP를 2개 할당하기에는 서버의 포트가 1개 밖에 없어서 못할거 같고...
2008/07/07 18:06회사 도메인을 abc.com 이라고 했을때.
www.abc.com = IIS 80 포트로 blog.abc.com = 아파치 8080 포트로 할수 있는 방법이 있나요?..ㅠ_ㅜ
그런 경우는 Apache의 httpd.conf만 수정하면 가능합니다. 저도 그렇게 사용하고 있습니다. 하지만 제 블로그 주소처럼 http://blog.abc.com:8080 이라는 형태로 뒤에 포트번호가 붙어서 보기에 좀 그렇습니다. 서버의 포트가 하나라도 여분의 IP가 있다면 한개의 서버에 여러 IP를 할당할 수 있습니다. 저는 후자를 추천합니다.
2008/07/09 16:03