Application Pools <applicationPools>

개요

<applicationPools> 요소는 IIS(인터넷 정보 서비스) 7 이상 서버에서 실행되는 모든 애플리케이션 풀에 대한 구성 설정을 포함합니다. 애플리케이션 풀은 해당 애플리케이션 풀에 할당된 하나 이상의 애플리케이션에 요청을 제공하는 일반적인 설정으로 구성된 하나 이상의 작업자 프로세스 그룹을 정의합니다. 애플리케이션 풀을 사용하면 웹 애플리케이션 집합이 하나 이상의 유사하게 구성된 작업자 프로세스를 공유할 수 있으므로 서버 컴퓨터의 다른 웹 애플리케이션에서 웹 애플리케이션 집합을 격리하는 편리한 방법을 제공합니다. 프로세스 경계는 각 작업자 프로세스를 구분합니다. 따라서 한 애플리케이션 풀의 애플리케이션 문제는 웹 사이트 또는 다른 애플리케이션 풀의 애플리케이션에 영향을 미치지 않습니다. 애플리케이션 풀은 웹 인프라의 안정성과 관리 효율성 모두를 크게 향상합니다.

설치할 때 IIS에서 제공하는 기본 애플리케이션 풀을 사용하도록 선택하거나 사용자 고유의 애플리케이션 풀을 만들 수 있습니다. IIS 7 이상 서버에서 필요한 만큼 애플리케이션 풀을 실행할 수 있지만 서버 성능에 영향을 줄 수 있습니다. 애플리케이션 풀에는 하나 이상의 작업자 프로세스가 포함될 수 있습니다. 각 작업자 프로세스는 웹 사이트, 웹 애플리케이션 또는 웹 서비스에 대해 수행되는 작업을 나타냅니다. 여러 작업자 프로세스가 단일 애플리케이션 풀에서 실행되도록 하여 웹 정원을 만들 수 있습니다.

IIS 7 이상에서 각 애플리케이션 풀은 두 가지 .NET 통합 모드 중 하나를 사용하여 ASP.NET 애플리케이션을 실행합니다. 통합 또는 클래식. 애플리케이션 풀에 대해 정의된 .NET 통합 모드는 IIS가 해당 애플리케이션 풀에서 실행되는 사이트, 애플리케이션 및 웹 서비스에 들어오는 요청을 처리하는 방법을 결정합니다.

  • 통합 모드를 사용하면 IIS가 IIS 7 이상 통합 파이프라인을 사용하여 애플리케이션 풀에서 요청을 처리할 수 있습니다. 이렇게 하면 ASP.NET 모듈이 요청된 리소스 유형에 관계없이 IIS 요청 처리에 참여할 수 있습니다. 통합 모드를 사용하면 정적 콘텐츠 및 ASP, PHP 및 기타 콘텐츠 형식에 대한 요청에 사용할 수 있는 ASP.NET 2.0 요청 파이프라인의 기능을 사용할 수 있습니다. 기본적으로 IIS 7 이상 애플리케이션 풀은 이 모드에서 실행됩니다.
  • 클래식 모드는 IIS 6.0 처리 파이프라인을 사용하여 ASP.NET 애플리케이션을 호스팅합니다. 이 모드에서는 요청이 IIS 7 이상 모듈을 통해 처음에 처리되고 ASP.NET 요청은 aspnet_isapi.dll 추가로 처리됩니다. ASP.NET 처리 파이프라인은 IIS 7 이상 처리 파이프라인과 별개이며 ASP.NET 요청 처리 파이프라인 기능은 다른 리소스 종류에서 사용할 수 없습니다. 즉, ASP.NET 요청은 두 프로세스 모델 모두에서 인증 및 권한 부여 모듈을 통과해야 합니다. 통합 모드만큼 효율적이지는 않지만 통합 모드에서 실행되도록 애플리케이션을 수정하지 않고 IIS 7 이상 서버에서 ASP.NET 버전 1.1을 사용하여 개발된 애플리케이션을 실행할 수 있습니다.

IIS 7.5 이상의 새로운 기능

IIS 7.5부터 요소의 managedRuntimeLoader, CLRConfigFilestartMode 특성을 사용하여 자동으로 시작되도록 애플리케이션을 <add> 구성할 수 있습니다. 이러한 특성은 각각 애플리케이션에 런타임 로드를 제공하는 관리되는 DLL의 이름, 애플리케이션에 대한 공용 언어 런타임 구성 파일 및 애플리케이션의 시작 유형을 구성합니다.

또한 IIS 7.5 이상의 새로운 기능은 요소의 <processModel>identityType 특성에 대한 새 ApplicationPoolIdentity 형식입니다. 이 새 ID 형식은 이제 애플리케이션의 기본 프로세스 ID이며 특정 애플리케이션 풀에 대한 액세스를 허용하도록 콘텐츠 영역에 대한 보안을 설정할 수 있습니다. 이렇게 하려면 "IIS AppPool\DefaultAppPool"와 같은 구문을 사용하여 애플리케이션 풀의 이름을 사용하여 보안을 설정합니다. 이 ID는 동적으로 생성되므로 서버의 노출 영역이 크게 줄어듭니다.

호환성

버전 참고
IIS 10.0 <applicationPools> 요소가 IIS 10.0에서 수정되지 않았습니다.
IIS 8.5 <applicationPools> 요소가 IIS 8.5에서 수정되지 않았습니다.
IIS 8.0 <applicationPools> 요소가 IIS 8.0에서 수정되지 않았습니다.
IIS 7.5 <add> 요소의 <applicationPools> 요소는 managedRuntimeLoader, CLRConfigFilestartMode 특성을 사용하여 애플리케이션을 미리 로드하고 새 ApplicationPoolIdentity를 사용하여 애플리케이션을 실행할 수 있는 특성을 포함하도록 IIS 7.5에서 업데이트되었습니다.
IIS 7.0 요소는 <applicationPools> IIS 7.0에서 도입되었습니다.
IIS 6.0 요소는 <applicationPools> IIS 6.0 IIsApplicationPools 메타베이스 개체를 대체합니다.

설치 프로그램

컬렉션은 <applicationPools> IIS 7 이상의 기본 설치에 포함되어 있습니다.

방법

새 애플리케이션 풀을 만드는 방법

  1. IIS(인터넷 정보 서비스) 관리자를 엽니다.

    • Windows Server 2012 또는 Windows Server 2012 R2를 사용하는 경우:

      • 작업 표시줄에서 서버 관리자 클릭하고 도구를 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 클릭합니다.
    • Windows 8 또는 Windows 8.1 사용하는 경우:

      • Windows 키를 누른 채로 문자 X를 누른 다음 제어판 클릭합니다.
      • 관리 도구를 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 두 번 클릭합니다.
    • Windows Server 2008 또는 Windows Server 2008 R2를 사용하는 경우:

      • 작업 표시줄에서 시작을 클릭하고 관리 도구를 가리킨 다음 IIS(인터넷 정보 서비스) 관리자를 클릭합니다.
    • Windows Vista 또는 Windows 7을 사용하는 경우:

      • 작업 표시줄에서 시작을 클릭한 다음 제어판 클릭합니다.
      • 관리 도구를 두 번 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 두 번 클릭합니다.
  2. 연결 창에서 서버 이름을 확장한 다음 애플리케이션 풀을 클릭합니다.

  3. 작업 창에서 애플리케이션 풀 추가...를 클릭합니다.

  4. 애플리케이션 풀 추가 대화 상자에서 이름: 상자에 애플리케이션 풀의 이름을 입력합니다. .NET Framework 버전: 드롭다운 목록에서 사이트 또는 애플리케이션이 사용하는 .NET Framework 버전을 선택하고 관리형 파이프라인 모드: 드롭다운 목록에서 통합 또는 클래식을 선택한 다음 확인을 클릭합니다.
    이름, 점 NET Framework 버전 및 관리형 파이프라인 모드 필드를 보여 주는 애플리케이션 풀 추가 대화 상자의 스크린샷.

기존 사이트 또는 애플리케이션에 대한 애플리케이션 풀을 구성하는 방법

  1. 연결 창에서 사이트를 확장한 다음 애플리케이션 풀에 추가할 웹 사이트 또는 애플리케이션으로 이동합니다.
  2. 작업 창에서 고급 설정...을 클릭합니다.
  3. 고급 설정 대화 상자의 일반 섹션에서 애플리케이션 풀 항목을 클릭한 다음 타원 단추를 클릭합니다.
    애플리케이션 풀 항목이 강조 표시된 고급 설정 대화 상자의 스크린샷
  4. 애플리케이션 풀 선택 대화 상자의 애플리케이션 풀: 드롭다운 상자에서 애플리케이션 풀을 선택하고 확인을 클릭한 다음 확인을 다시 클릭합니다.
    사용 가능한 옵션의 드롭다운 메뉴가 포함된 애플리케이션 풀 선택 대화 상자의 애플리케이션 풀 필드 스크린샷

Configuration

요소에는 <applicationPools> 요소의 <add> 컬렉션이 포함되어 있습니다. 컬렉션의 각 요소는 IIS 7 이상에서 실행되는 애플리케이션 풀을 구성합니다. 최소한 각 <add> 요소에는 GUI 및 명령줄 관리 도구에 대한 애플리케이션 풀을 식별하는 이름 특성이 포함되어 있습니다. <add> 요소에는 애플리케이션 풀에 대한 프로세스 모델, CPU 및 재활용 설정을 구성하는 자식 요소가 포함됩니다.

<applicationPools> 요소에는 IIS 7 이상 서버의 <applicationPoolDefaults> 모든 애플리케이션 풀에 대한 기본 설정을 정의하는 요소도 포함됩니다. 서버 전체에서 기본 애플리케이션 풀 설정을 변경하려면 요소를 편집할 <applicationPoolDefaults> 수 있습니다. 새 애플리케이션 풀을 만들 때 해당 애플리케이션 풀에 대한 구성 설정은 요소에 설정된 기본값을 재정의 <applicationPoolDefaults> 합니다.

특성

없음

자식 요소

요소 Description
add applicationPools 섹션에 애플리케이션 풀을 추가합니다.
applicationPoolDefaults 필수 문자열 특성입니다.

applicationPools 섹션의 모든 애플리케이션 풀에 대한 기본 설정을 구성합니다.

구성 샘플

다음 구성 샘플에서는 애플리케이션 풀 <add><applicationPools> 요소를 사용하여 IIS에 대한 표준 애플리케이션 풀 및 기본값을 정의합니다.

<applicationPools>
   <add name="DefaultAppPool" />
   <add name="Classic .NET AppPool" managedPipelineMode="Classic" />
   <applicationPoolDefaults>
      <processModel identityType="NetworkService" />
   </applicationPoolDefaults>
</applicationPools>

샘플 코드

다음 예제에서는 Contoso라는 애플리케이션 풀을 추가하고 관리되는 파이프라인 모드를 통합으로 설정합니다.

AppCmd.exe

appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso',autoStart='True',managedPipelineMode='Integrated']" /commit:apphost

참고

AppCmd.exe 사용하여 이러한 설정을 구성할 때 commit 매개 변수 apphost 를 로 설정해야 합니다. 그러면 구성 설정이 ApplicationHost.config 파일의 적절한 위치 섹션에 커밋됩니다.

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample {

   private static void Main() {

      using(ServerManager serverManager = new ServerManager()) { 
      Configuration config = serverManager.GetApplicationHostConfiguration();

      ConfigurationSection applicationPoolsSection = config.GetSection("system.applicationHost/applicationPools");

      ConfigurationElementCollection applicationPoolsCollection = applicationPoolsSection.GetCollection();

      ConfigurationElement addElement = applicationPoolsCollection.CreateElement("add");
      addElement["name"] = @"Contoso";
      addElement["autoStart"] = true;
      addElement["managedPipelineMode"] = @"Integrated";
      applicationPoolsCollection.Add(addElement);

      serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample
   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration
      Dim applicationPoolsSection As ConfigurationSection = config.GetSection("system.applicationHost/applicationPools")
      Dim applicationPoolsCollection As ConfigurationElementCollection = applicationPoolsSection.GetCollection
      Dim addElement As ConfigurationElement = applicationPoolsCollection.CreateElement("add")
      addElement("name") = "Contoso"
      addElement("autoStart") = True
      addElement("managedPipelineMode") = "Integrated"
      applicationPoolsCollection.Add(addElement)
      serverManager.CommitChanges()
   End Sub
End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";

var applicationPoolsSection = adminManager.GetAdminSection("system.applicationHost/applicationPools",
   "MACHINE/WEBROOT/APPHOST");

var applicationPoolsCollection = applicationPoolsSection.Collection;

var addElement = applicationPoolsCollection.CreateNewElement("add");
addElement.Properties.Item("name").Value = "Contoso";
addElement.Properties.Item("autoStart").Value = true;
addElement.Properties.Item("managedPipelineMode").Value = "Integrated";
applicationPoolsCollection.AddElement(addElement);

adminManager.CommitChanges();

VBScript

Set adminManager = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set applicationPoolsSection = adminManager.GetAdminSection("system.applicationHost/applicationPools","MACHINE/WEBROOT/APPHOST")
Set applicationPoolsCollection = applicationPoolsSection.Collection

Set addElement = applicationPoolsCollection.CreateNewElement("add")
addElement.Properties.Item("name").Value = "Contoso"
addElement.Properties.Item("autoStart").Value = True
addElement.Properties.Item("managedPipelineMode").Value = "Integrated"
applicationPoolsCollection.AddElement(addElement)

adminManager.CommitChanges()