ASP.NET 구성 파일 계층 구조 및 상속

업데이트: 2007년 11월

응용 프로그램 디렉터리 전체에 ASP.NET 구성 파일을 배포하여 ASP.NET 응용 프로그램을 상속 계층 구조로 구성할 수 있습니다. 이 구조를 사용하면 상위 디렉터리 수준에 있는 구성 설정에 영향을 주지 않고 적절한 디렉터리 수준에서 응용 프로그램에 필요한 구성 정보 수준을 얻을 수 있습니다.

이 항목에는 다음과 같은 단원이 포함되어 있습니다.

  • 구성 구조

  • 구성 상속

  • 구성 설정의 범위

  • 런타임에 구성 설정 계산

  • 단일 파일에 구성된 여러 ASP.NET 리소스

  • 가상 경로 및 실제 경로의 설정 충돌

  • ASP.NET 상속 제한

구성 구조

ASP.NET 구성 파일은 Web.config 파일이라고 하며 ASP.NET 응용 프로그램의 여러 디렉터리에 존재할 수 있습니다. ASP.NET 구성 계층 구조에는 다음과 같은 특징이 있습니다.

  • 구성 파일이 저장된 디렉터리 내의 리소스와 모든 자식 디렉터리에 적용되는 구성 파일을 사용합니다.

  • 구성 데이터를 배치할 때 전체 컴퓨터, 모든 웹 응용 프로그램, 개별 응용 프로그램 또는 응용 프로그램 내의 하위 디렉터리와 같이 특정한 범위를 지정할 수 있습니다.

  • 구성 계층 구조의 상위 수준에서 상속되는 구성 설정을 재정의할 수 있습니다. 또한 구성 설정을 잠가서 하위 수준의 구성 설정에 의해 재정의되는 것을 방지할 수 있습니다.

  • 구성 설정의 논리 그룹을 여러 개의 섹션으로 구성합니다.

구성 상속

모든 .NET Framework 응용 프로그램은 systemroot\Microsoft .NET\Framework\versionNumber\CONFIG\Machine.config라는 파일에서 기본 구성 설정과 기본값을 상속하며, Machine.config 파일은 서버 차원의 구성 설정에 사용됩니다. 이 설정 중 일부는 계층 구조의 하위 구성 파일에서 재정의될 수 없습니다.

.NET 클라이언트 응용 프로그램(콘솔 및 Windows 응용 프로그램)에서는 ApplicationName.config라는 구성 파일을 사용하여 상속된 설정을 재정의하며, ASP.NET 응용 프로그램에서는 이름이 Web.config인 구성 파일을 사용하여 상속된 설정을 재정의합니다.

ASP.NET 구성 계층 구조의 루트는 루트 Web.config 파일이며 Machine.config 파일과 동일한 디렉터리에 위치합니다. 루트 Web.config 파일은 Machine.config 파일의 모든 설정을 상속합니다. 루트 Web.config 파일에는 특정 버전의 .NET Framework를 실행하는 모든 ASP.NET 응용 프로그램에 적용되는 설정이 포함되어 있습니다. 각 ASP.NET 응용 프로그램은 루트 Web.config 파일에서 기본 구성 설정을 상속하기 때문에 기본 설정을 재정의하는 설정에 대해서만 Web.config 파일을 만들어야 합니다.

컬렉션 요소의 상속

일부 구성 요소는 namespaces 요소 및 customErrors 요소와 같은 컬렉션입니다.

컬렉션에서는 일반적으로 add 자식 요소를 통해 구성 설정이 컬렉션에 추가되거나, remove 자식 요소를 통해 구성 설정이 키 이름에 의해 제거되거나, clear 자식 요소를 통해 전체 컬렉션이 지워질 수 있습니다. 중복이 허용되지 않으면 자식 구성 파일의 추가된 설정은 부모 구성 파일에 있는 동일한 키 이름의 설정을 재정의합니다.

참고:

이전 버전의 .NET Framework에 있는 일부 컬렉션에서는 add 자식 요소에 다른 요소 이름을 사용합니다. 예를 들어, customErrors 요소는 error 자식 요소를 사용하여 사용자 지정 오류를 컬렉션에 추가합니다.

SubDir1 디렉터리에 없는 파일에 대해 요청을 받으면 ASP.NET에서는 가장 로컬인 Web.config 파일(현재 디렉터리나 부모 디렉터리에 위치)부터 시작하여 구성 계층 구조를 검색합니다. ASP.NET에서는 statusCode 특성이 "404"인 customErrors에 대한 error 요소(ASP.NET 설정 스키마) 요소를 검색합니다. ASP.NET에서 404 오류에 대한 구성 설정을 찾으면 redirect 특성의 URL이 응답으로 반환됩니다.

구성 설정의 범위

구성 설정에는 여러 가지 범위가 있습니다. 전역 범위가 있는 구성 설정도 있고, 응용 프로그램 범위인 루트 Web.config 파일이나 Machine.config 파일에만 유효한 구성 설정도 있습니다.

구성 섹션의 범위는 ASP.NET에 포함된 모든 섹션에 대한 Machine.config 파일에 있는 configSections에 대한 section 요소(일반 설정 스키마) 요소의 allowDefinition 특성에 정의되어 있습니다. 예를 들어 authentication 요소(ASP.NET 설정 스키마) 요소에는 MachineToApplication 요소의 allowDefinition 특성이 있습니다. 즉, authentication 요소는 Machine.config 파일, 루트 Web.config 파일 및 응용 프로그램 수준의 Web.config 파일에 설정될 수 있습니다. 하위 디렉터리 수준에 설정되면 오류가 throw됩니다. 섹션에 대해 allowDefinition 특성이 설정되어 있지 않으면 기본값은 Everywhere입니다.

구성 위치 옆의 요소 정보 표에 ASP.NET 구성 설정일반 구성 설정(ASP.NET)의 각 요소에 대한 구성 설정 범위가 나열되어 있습니다.

다음 표에서는 구성 계층 구조상의 각 파일의 수준, 파일 이름 및 각 파일의 중요한 상속 특징에 대한 설명을 보여 줍니다.

구성 수준

파일 이름

파일 설명

서버

Machine.config

Machine.config 파일에는 서버의 모든 웹 응용 프로그램에 대한 ASP.NET 스키마가 들어 있습니다. 이 파일은 구성 병합 계층 구조의 맨 위에 있습니다.

루트 웹

Web.config

서버의 Web.config 파일은 Machine.config 파일과 동일한 디렉터리에 저장되며 대부분의 system.web 구성 섹션에 대한 기본값을 포함합니다. 이 파일은 런타임에 구성 계층 구조의 맨 위에서 두 번째에 있는 항목과 병합됩니다.

웹 사이트

Web.config

특정 웹 사이트에 대한 Web.config 파일에는 웹 사이트에 적용되고 모든 ASP.NET 응용 프로그램 및 사이트 하위 디렉터리의 아래쪽으로 상속되는 설정이 들어 있습니다.

ASP.NET 응용 프로그램 루트 디렉터리

Web.config

특정 ASP.NET 응용 프로그램에 대한 Web.config 파일은 응용 프로그램의 루트 디렉터리에 있으며, 이 파일에는 웹 응용 프로그램에 적용되고 해당 분기의 모든 하위 디렉터리 아래쪽으로 상속되는 설정이 들어 있습니다.

ASP.NET 응용 프로그램 하위 디렉터리

Web.config

응용 프로그램 하위 디렉터리에 대한 Web.config 파일에는 이 하위 디렉터리에 적용되고 해당 분기의 모든 하위 디렉터리 아래쪽으로 상속되는 설정이 들어 있습니다.

클라이언트 응용 프로그램 디렉터리

ApplicationName.config

ApplicationName.config 파일에는 웹 응용 프로그램이 아닌 Windows 클라이언트 응용 프로그램에 대한 설정이 들어 있습니다.

ProcessModel 요소

하나의 요소인 processModel 요소(ASP.NET 설정 스키마) 요소는 서버에 있는 모든 ASP.NET 응용 프로그램을 포함하여 서버에 사용되는 처리 모델을 구성합니다. 따라서 processModel 설정은 Machine.config 파일에만 저장될 수 있으며 Web.config 파일의 설정에 의해 재정의될 수 없습니다.

processModel 요소의 변경 내용은 다른 구성 요소와 마찬가지로 설정이 변경된 후 바로 적용되는 것이 아니라 작업자 프로세스가 다시 시작된 후에만 적용됩니다.

참고:

ASP.NET이 IIS(인터넷 정보 서비스) 6.0에서 작업자 프로세스 격리 모드로 실행되고 있으면 IIS 6.0 프로세스 모델이 사용되고 Machine.config 파일의 processModel 섹션에 있는 설정은 무시됩니다. 프로세스 ID, 순환 또는 기타 프로세스 모델 값을 구성하려면 IIS 관리자를 사용하여 응용 프로그램에 맞게 IIS 작업자 프로세스를 구성합니다. IIS 6.0에서 ASP.NET을 IIS 5.0 격리 모드로 실행하도록 구성하면 ASP.NET 2.0이 실행되지 않습니다.

런타임에 구성 설정 계산

서버가 특정 웹 리소스에 대한 요청을 받으면 ASP.NET은 요청된 URL의 가상 디렉터리 경로에 있는 모든 구성 파일을 사용하여 해당 리소스에 대한 구성 설정을 계층 구조적으로 계산합니다. 논리 구성 설정은 부모 구성 파일의 설정을 재정의합니다.

이 설정은 한 번 계산된 다음 이후의 모든 요청에 캐시됩니다. ASP.NET에서는 자동으로 파일 변경 내용을 감시하고, 해당 파일의 계층 구조 내에서 구성 파일이 변경되면 캐시를 다시 계산합니다. 서버가 특정 URL에 대한 요청을 받으면 ASP.NET은 캐시에 있는 구성 설정의 계층 구조를 사용하여 요청된 리소스를 찾습니다.

구성 섹션 요소에 restartOnExternalChanges="false" 특성이 포함되어 있지 않거나 configSource 특성을 사용하여 Web.config 파일에 연결된 별도의 파일에 구성 설정이 포함되어 있지 않은 경우, 구성을 변경하면 응용 프로그램이 다시 시작됩니다.

단일 파일에 구성된 여러 ASP.NET 리소스

여러 개의 구성 설정을 관리하거나 한 ISP 설정에서 클라이언트 웹 사이트를 관리할 때 여러 위치에 대한 설정을 한 Web.config 파일에 저장하는 것이 좋습니다. location 요소의 path 특성을 사용하면 응용 프로그램 하위 디렉터리에 저장되는 여러 특정 ASP.NET 리소스를 구성할 수 있습니다.

location 요소를 사용하는 방법에 대한 자세한 내용은 방법: 위치 설정을 사용하여 특정 디렉터리 구성을 참조하십시오.

가상 디렉터리 및 실제 디렉터리의 설정 충돌

가상 디렉터리에 대한 구성 설정은 실제 디렉터리 구조와는 독립적이며, 가상 디렉터리는 구성에 문제가 발생하지 않도록 주의해서 구성해야 합니다. 예를 들어, 실제 디렉터리 구조가 다음과 같고 이름이 MyResource.aspx인 ASP.NET 파일이 있을 수 있습니다.

C:
    \Subdir1
        \Subdir2
            \MyResource.aspx

그리고 Subdir1에 있는 구성 파일, c:\Subdir1로 매핑되고 이름이 Vdir1인 가상 디렉터리 및 c:\Subdir1\Subdir2로 매핑되고 이름이 Vdir2인 가상 디렉터리가 있을 수 있습니다. 클라이언트가 URL https://localhost/vdir1/subdir2/MyResource.aspx를 사용하여 c:\Subdir1\Subdir2\MyResource.aspx의 실제 위치로 리소스에 액세스하면 리소스가 Vdir1에서 구성 설정을 상속합니다. 그러나, 클라이언트가 URL https://localhost/vdir2/MyResource.aspx를 사용하여 동일한 리소스에 액세스하면 해당 리소스는 Vdir1에서 설정을 상속하지 않습니다. 이런 방식으로 가상 디렉터리를 만들면 예기치 않은 결과가 발생하거나 응용 프로그램 오류가 발생할 수 있습니다. 가상 디렉터리를 중첩하지 않는 것이 좋으며, 중첩할 경우 Web.config 파일을 하나만 사용하십시오.

ASP.NET 상속 제한

구성 설정의 상속을 제한하여 응용 프로그램 성능을 향상시키고, 높은 안정성을 유지하고, 관리를 단순화할 수 있습니다. 제한은 allowOverride, lockAttributes, lockAllAttributesExcept, lockAllElementsExcept, lockItem 및 lockElements 특성으로 제어할 수 있습니다. 이러한 특성에 대한 자세한 내용은 section 요소에서 상속된 일반 특성을 참조하십시오.

처리되지 않은 예외에 대한 구성 설정

ASP.NET 응용 프로그램을 만들 때 Aspnet.config 파일에 들어 있는 설정은 CLR(공용 언어 런타임)에 의해 처리됩니다. 이러한 설정은 다른 설정과 함께 CLR에서 처리되지 않은 예외를 처리하는 방법을 지시합니다. 해당 구성 설정은 다음과 같습니다.

<legacyUnhandledExceptionPolicy enabled="false" />

자세한 내용은 관리되는 스레드의 예외를 참조하십시오.

참고 항목

작업

방법: 위치 설정을 사용하여 특정 디렉터리 구성

방법: ASP.NET 구성 설정 잠금

참조

section 요소에서 상속된 일반 특성