IIS 7의 사이트, 애플리케이션 및 가상 디렉터리 이해

작성자 : Reagan Templin

소개

IIS에서 사이트, 애플리케이션 및 가상 디렉터리를 만들어 인터넷, 인트라넷 또는 엑스트라넷을 통해 사용자와 정보를 공유할 수 있습니다. 이러한 개념은 이전 버전의 IIS에 있었지만 IIS 7 이상의 몇 가지 변경 내용은 이러한 개념의 정의와 기능에 영향을 줍니다. 가장 중요한 것은 사이트, 애플리케이션 및 가상 디렉터리에서 이제 온라인 콘텐츠를 호스팅하고 온라인 서비스 제공하기 위한 기본 구성 요소로서 계층적 관계에서 함께 작동합니다.

이 문서에서는 IIS 7에 도입된 차이점을 더 잘 이해할 수 있도록 IIS 6.0의 애플리케이션에 대한 간략한 개요를 제공합니다. 그런 다음 IIS의 사이트, 애플리케이션 및 가상 디렉터리에 대한 개념을 설명하고 구성 섹션을 <sites> 소개합니다.

IIS 6.0의 사이트, 애플리케이션 및 가상 디렉터리 정보

IIS 6.0에서는 가상 디렉터리와 애플리케이션의 개념이 혼란스러웠습니다. 별도의 개념으로 설명되었지만(그리고 기능 관점에서 개념적으로 달랐음) 애플리케이션은 가상 디렉터리와 물리적으로 분리된 개체가 아니었습니다. IIS 6.0에서 애플리케이션은 메타베이스에서 AppFriendlyName, AppRoot, AppIsolatedAppPoolID 속성 중 하나 또는 조합된 가상 디렉터리일 뿐입니다.

참고

사이트 루트는 해당 속성이 설정되지 않은 경우에도 애플리케이션으로 암시적으로 처리되었으므로 예외입니다.

애플리케이션은 ASP(Active Server Pages), ISAPI(인터넷 서버 애플리케이션 프로그래밍 인터페이스) 및 ASP.NET 같은 웹 서버 기능을 확장한 기술보다 IIS에 덜 중요했습니다. 이러한 기술은 IIS 6.0에서 호스트되는 애플리케이션에 대한 추가 기능 및 처리를 제공하고 개발자가 더 복잡한 애플리케이션을 만들 수 있도록 했습니다. IIS 6.0의 중요한 질문은 한 애플리케이션 풀의 애플리케이션이 서버의 다른 애플리케이션 풀에 있는 애플리케이션에 영향을 주지 않도록 이러한 애플리케이션을 격리하는 것이었습니다.

IIS 7 이상의 사이트, 애플리케이션 및 가상 디렉터리 정보

IIS 7 이상에서는 사이트, 애플리케이션 및 가상 디렉터리 개념을 공식화합니다. 이제 가상 디렉터리와 애플리케이션은 별도의 개체이며 IIS 구성 스키마의 계층 관계에 존재합니다. 간단히 말해서 사이트에는 하나 이상의 애플리케이션이 포함되고, 애플리케이션에는 하나 이상의 가상 디렉터리가 포함되며, 가상 디렉터리가 컴퓨터의 실제 디렉터리에 매핑됩니다.

IIS 6.0에서와 같이 사이트에는 해당 사이트와 연결된 정적 콘텐츠와 동적 콘텐츠가 모두 포함됩니다. 그러나 각 사이트에는 루트 애플리케이션이라는 애플리케이션이 하나 이상 포함되어야 합니다. 또한 각 애플리케이션(루트 애플리케이션 포함)에는 루트 가상 디렉터리라는 가상 디렉터리가 하나 이상 포함되어야 합니다. 이러한 개체는 함께 작동하여 사이트를 형성합니다.

또한 IIS 7 이상에서 애플리케이션의 개념은 이제 IIS와 IIS 기능을 확장하는 기술 모두에 의미가 있습니다. 애플리케이션은 런타임 시 서버에 중요한 개체입니다. IIS 및 ASP.NET 요청 처리 파이프라인이 IIS 7 이상에서 병합되어 콘텐츠가 이전에 관리 코드 애플리케이션에만 제공된 기능을 활용할 수 있기 때문입니다. 예를 들어 각 관리 코드 애플리케이션은 애플리케이션 도메인(AppDomain)에서 실행됩니다. 애플리케이션에는 여러 가상 디렉터리를 포함할 수 있으며 각 디렉터리에 속한 애플리케이션과 동일한 AppDomain에서 각 디렉터리를 사용할 수 있습니다.

다음 섹션에서는 사이트, 애플리케이션, 가상 디렉터리 및 관련 구성에 대해 자세히 설명합니다.

사이트

사이트는 애플리케이션 및 가상 디렉터리를 위한 컨테이너이며 하나 이상의 고유한 바인딩을 통해 액세스할 수 있습니다.

바인딩에는 통신에 중요한 두 가지 특성인 바인딩 프로토콜바인딩 정보가 포함됩니다. 바인딩 프로토콜은 서버와 클라이언트 간의 통신이 발생하는 프로토콜을 정의합니다. 바인딩 정보는 사이트에 액세스하는 데 사용되는 정보를 정의합니다. 예를 들어 웹 사이트의 바인딩 프로토콜은 HTTP 또는 HTTPS일 수 있으며 바인딩 정보는 IP 주소, 포트 및 선택적 호스트 헤더의 조합입니다.

사이트에 다른 프로토콜 또는 바인딩 정보가 필요한 경우 사이트에 둘 이상의 바인딩이 포함될 수 있습니다. 이전 버전의 IIS에서는 HTTP 및 HTTPS 프로토콜만 지원되었습니다. 예를 들어 사이트 섹션에 HTTPS를 통한 보안 통신이 필요한 경우 웹 사이트에 HTTP 바인딩과 HTTPS 바인딩이 모두 있을 수 있습니다.

IIS 7 이상에서 바인딩은 모든 프로토콜에 적용할 수 있습니다. WAS(Windows Process Activation Service)는 IIS에서 추가 프로토콜을 사용할 수 있도록 하는 새로운 서비스입니다. 이 서비스는 애플리케이션 풀 및 메시지 기반 프로세스 활성화와 같은 친숙한 IIS 6.0 프로세스 모델뿐만 아니라 신속한 오류 보호, 상태 모니터링 및 재활용과 같은 호스팅 기능을 유지합니다. 그러나 WAS는 활성화 아키텍처에서 HTTP에 대한 종속성을 제거합니다. 이는 표준 프로토콜을 통해 웹 서비스에서 애플리케이션 간 통신을 제공하는 기술에 유용합니다. WCF(Windows Communication Foundation) 프로그래밍 모델은 TCP(Transmission Control Protocol), MSMQ(Microsoft Message Queuing) 및 명명된 파이프의 표준 프로토콜을 통한 통신을 가능하게 할 수 있는 기술 중 하나입니다. 이를 통해 통신 프로토콜을 사용하는 애플리케이션은 프로세스 재활용, 신속한 장애 보호 및 이전에 HTTP 기반 애플리케이션에서만 사용할 수 있었던 구성과 같은 IIS 기능을 활용할 수 있습니다. WCF 프로그래밍 모델에 대한 자세한 내용은 MSDN의 Windows Communication Foundation 을 참조하세요.

애플리케이션(가상 디렉터리를 포함)을 포함하고 바인딩을 지정하는 것 외에도 다음 구성 설정은 사이트에 속합니다.

  • 제한: 대역폭의 양, 연결 수 또는 사이트 연결에 허용되는 시간을 제한하도록 설정을 구성합니다.
  • 로깅: 사이트에 대한 로그 파일의 처리 및 스토리지에 대한 설정을 구성합니다.
  • 실패한 요청 추적 로그: 사이트에 대한 실패한 요청 추적을 로깅하기 위한 설정을 구성합니다.

애플리케이션

애플리케이션은 콘텐츠를 제공하거나 HTTP와 같은 프로토콜을 통해 서비스를 제공하는 파일 그룹입니다. IIS에서 애플리케이션을 만들면 애플리케이션의 경로가 사이트 URL의 일부가 됩니다.

IIS 7 이상에서 각 사이트에는 루트 애플리케이션 또는 기본 애플리케이션이라는 애플리케이션이 있어야 합니다. 그러나 사이트에는 둘 이상의 애플리케이션이 있을 수 있습니다. 예를 들어 쇼핑 중에 사용자가 항목을 수집할 수 있는 쇼핑 카트 애플리케이션 및 사용자가 구매 시 저장된 결제 정보를 회수할 수 있는 로그인 애플리케이션과 같은 여러 애플리케이션이 있는 온라인 상거래 웹 사이트가 있을 수 있습니다.

사이트에 속하는 것 외에도 애플리케이션은 애플리케이션 풀에 속하며, 애플리케이션은 서버의 다른 애플리케이션 풀에 있는 애플리케이션과 격리됩니다. 관리 코드 애플리케이션의 경우 애플리케이션을 애플리케이션에 필요한 .NET Framework 버전을 실행하는 애플리케이션 풀과 연결해야 합니다.

이 문서의 사이트 섹션에 설명된 대로 IIS는 기본적으로 HTTP 및 HTTPS를 지원하지만 추가 프로토콜을 사용할 수 있습니다. 각 사이트에 대해 사이트의 콘텐츠와 통신하고 액세스할 바인딩을 하나 이상 지정합니다. 애플리케이션이 부모 사이트의 바인딩에 지정된 프로토콜을 사용하여 통신하려면 프로토콜을 사용하도록 설정해야 합니다. 이렇게 하려면 애플리케이션에 대한 enabledProtocols 특성에 프로토콜을 지정하고 서버에 적절한 수신기 어댑터가 있고 구성 섹션에 <listenerAdapters> 지정되어 있는지 확인합니다.

가상 디렉터리

가상 디렉터리 는 IIS에서 지정하고 로컬 또는 원격 서버의 실제 디렉터리에 매핑하는 디렉터리 이름(경로라고도 함)입니다. 그러면 디렉터리 이름이 애플리케이션 URL의 일부가 되고 사용자는 브라우저에서 URL을 요청하여 웹 페이지 또는 추가 디렉터리 및 파일 목록과 같은 실제 디렉터리의 콘텐츠에 액세스할 수 있습니다. 가상 디렉터리에 대해 실제 디렉터리와 다른 이름을 지정하는 경우 URL이 사이트의 루트에 직접 매핑되지 않으므로 사용자가 서버에서 실제 실제 파일 구조를 검색하기가 더 어렵습니다.

IIS 7 이상에서 각 애플리케이션에는 루트 가상 디렉터리라는 가상 디렉터리가 있어야 하며 애플리케이션의 콘텐츠가 포함된 실제 디렉터리에 애플리케이션을 매핑합니다. 그러나 애플리케이션에는 둘 이상의 가상 디렉터리가 있을 수 있습니다. 예를 들어 애플리케이션이 파일 시스템의 다른 위치에 있는 이미지를 포함하도록 하려는 경우 가상 디렉터리를 사용할 수 있지만 이미지 파일을 애플리케이션의 루트 가상 디렉터리에 매핑된 실제 디렉터리로 이동하지 않으려는 경우입니다.

기본적으로 IIS는 가상 디렉터리가 매핑된 실제 디렉터리와 해당 실제 디렉터리의 모든 자식 디렉터리에 있는 Web.config 파일의 구성을 사용합니다. 자식 디렉터리에서 Web.config 파일을 사용하지 않으려면 가상 디렉터리의 allowSubDirConfig 특성에 false를 지정합니다.

필요에 따라 가상 디렉터리에 액세스하기 위해 자격 증명 및 메서드를 지정해야 하는 경우 사용자 이름, 암호logonMethod 특성에 대한 값을 지정할 수 있습니다.

IIS 구성: <sites> 섹션

IIS 7 이상의 기본 <sites> 섹션을 살펴보세요. 이는 Windows Server® 2008에 IIS를 설치한 후 ApplicationHost.config 파일(에 %windir%\system32\inetsrv\config\있음)에 있는 내용입니다.

<sites> 
    <site name="Default Web Site" id="1"> 
        <application path="/"> 
            <virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" /> 
        </application> 
        <bindings> 
            <binding protocol="http" bindingInformation="*:80:" /> 
        </bindings> 
    </site> 
    <siteDefaults> 
        <logFile logFormat="W3C" directory="%SystemDrive%\inetpub\logs\LogFiles" /> 
        <traceFailedRequestsLogging directory="%SystemDrive%\inetpub\logs\FailedReqLogFiles" /> 
    </siteDefaults> 
    <applicationDefaults applicationPool="DefaultAppPool" /> 
    <virtualDirectoryDefaults allowSubDirConfig="true" /> 
</sites>

경로 필드에 단일 "/"가 표시되면 이것이 루트 개체라는 것을 알 수 있습니다. 애플리케이션 또는 가상 디렉터리 섹션에 있는지 여부에 따라 루트 애플리케이션 또는 루트 가상 디렉터리입니다.

기본 요소

다음 섹션에서는 섹션의 컬렉션 및 요소 <sites> 와 섹션 내 <sites> 의 계층 관계를 나열합니다.

<sites> section 
<site> collection 
<bindings> collection 
<binding> element 
<clear> element 
<limits> element 
<logFile> element 
<traceFailedRequestsLogging> element 
<application> collection 
<virtualDirectory> collection 
<virtualDirectoryDefaults> element 
<applicationDefaults> element 
<virtualDirectoryDefaults> element 
<siteDefaults> element 
<bindings> collection 
<binding> element 
<clear> element 
<limits> element 
<logFile> element 
<traceFailedRequestsLogging> element 
<applicationDefaults> element 
<virtualDirectoryDefaults> element

두 개 이상의 위치에 <applicationDefaults> 나타나는 요소와 <virtualDirectoryDefaults> 요소의 두 가지 요소가 있습니다. 섹션의 <siteDefaults> 한 위치에서 <sites> 만 구성할 수 있으므로 한 번만 표시되지만 요소도 있습니다. 기본 요소는 각 컬렉션에서 동일한 값을 반복하는 대신 특성에 대한 기본값을 구성할 수 있기 때문에 특별합니다.

특성이 둘 이상의 수준에서 구성된 경우 가장 낮은 수준의 값이 사용됩니다. 예를 들어 섹션과 컬렉션의 요소에 <applicationDefaults> 기본값을 <sites><site> 지정하면 컬렉션의 값이 <site> 사용됩니다. 또한 동일한 특성 또는 자식 요소가 기본 요소와 개체 컬렉션 모두에서 구성된 경우 컬렉션의 값이 사용됩니다. 예를 들어 요소 및 <application> 컬렉션에서 <applicationDefaults> 특성을 구성하는 경우 컬렉션의 값이 <application> 사용됩니다.

다음 표에서는 요소를 구성할 수 있는 부모 요소를 <applicationDefaults> 지정하고 값이 애플리케이션에 미치는 영향을 설명합니다.

부모 요소 설명
<sites> 섹션 서버의 모든 애플리케이션에 대한 기본 설정을 지정합니다.
<site> 컬렉션 부모 사이트의 모든 애플리케이션에 대한 기본 설정을 지정합니다.

다음 표에서는 요소를 구성할 수 있는 부모 요소를 <virtualDirectoryDefaults> 지정하고 값이 가상 디렉터리에 미치는 영향을 설명합니다.

부모 요소 설명
<sites> 섹션 서버의 모든 가상 디렉터리에 대한 기본 설정을 지정합니다.
<site> 컬렉션 부모 사이트의 모든 가상 디렉터리에 대한 기본 설정을 지정합니다.
<application> 컬렉션 부모 애플리케이션의 모든 가상 디렉터리에 대한 기본 설정을 지정합니다.

요약

이제 IIS 7 이상의 사이트, 애플리케이션 및 가상 디렉터리를 더 잘 이해해야 합니다. IIS 6.0과 달리 애플리케이션 및 가상 디렉터리도 구성에서 고유한 개체가 되어 웹 서버에 대한 고유한 목적과 사이트와의 관계를 강조합니다. 또한 사이트에는 이제 IIS 6.0에 도입된 프로세스 모델의 이점을 유지하면서 사이트 기능을 확장하는 HTTP 및 HTTPS 이외의 프로토콜을 사용하는 애플리케이션이 포함될 수 있습니다.

WAS 및 IIS 아키텍처에 대한 자세한 내용은 IIS.NET IIS Request-Processing 아키텍처를 참조하세요. 이 문서에서 설명하는 구성 설정에 대한 자세한 내용은 MSDN의 IIS 7 설정 스키마 를 참조하세요.