응용 프로그램 도메인 만들기 및 구성

업데이트: 2007년 11월

이전 단원에서 설명한 조건을 기준으로 호스트에서 도메인 경계의 위치를 확인한 다음, 호스트는 System.AppDomain 형식의 CreateDomain 메서드를 사용하여 사용자 코드를 실행할 도메인을 만듭니다. 각 응용 프로그램 도메인에는 이름/값 쌍이 있는데, 호스트는 도메인에 대한 정보를 이 컬렉션에 저장합니다. 이름/값 쌍은 CreateDomain에 매개 변수로 전달됩니다.

.NET Framework에는 런타임에서 기본적으로 인식하는 몇 개의 속성이 정의되어 있으며 이들 속성의 이름은 System.AppDomain 클래스에 있는 정적 문자열로 정의됩니다. 호스트는 이렇게 기본적으로 인식되는 속성을 설정하여 응용 프로그램 도메인을 사용자 지정할 수 있습니다. 예를 들어, 이들 속성을 사용하면 서로 다른 도메인에서 실행되는 코드를 격리시키는 방법을 제어할 수 있습니다. 이름/값 쌍을 확장하면 호스트에서 특정 시나리오에 대한 정보를 저장할 사용자 지정 속성을 정의할 수도 있습니다.

일반적으로, 응용 프로그램에서는 두 가지 종류의 격리를 제공합니다.

  • 응용 프로그램 도메인에서는 특정 응용 프로그램 도메인에 실행되는 코드가 다른 도메인에 영향을 주는 것을 방지하기 위해 특정 도메인의 형식이 다른 도메인에 있는 형식을 보거나 호출하지 못하게 합니다. 응용 프로그램 도메인에서는 코드의 유효성을 확인하여 메모리 오류를 방지합니다.

  • 호스트는 런타임에서 호스트를 대신하여 특정 응용 프로그램 도메인에 로드할 코드를 찾는 위치를 제어하는데, 이러한 방법을 사용하면 특정 응용 프로그램에서 다른 응용 프로그램에 실수로 영향을 주는 것을 방지할 수 있습니다. 이렇듯 코드 로드에 대한 요청의 범위를 지정하는 것은 Microsoft Win32 및 COM에 사용되는 방법과는 많이 다릅니다. 현재, Windows에서는 레지스트리나 잘 알려진 Windows system 디렉터리 등의 위치에 있는 코드를 모든 응용 프로그램에서 사용할 수 있기 때문에 사용 가능한 코드의 범위는 컴퓨터 전체입니다. 이러한 방식의 공유는 현재 기본값으로 설정되어 있으며 DLL 충돌의 원인이 될 수도 있습니다.

코드를 로드하는 방법에 대한 범위를 지정하는 것 이외에 응용 프로그램에 대한 구성 정보의 범위를 지정하는 것도 중요한데, 현재 대부분의 구성 설정에 대해서는 범위를 지정할 수 없습니다.

예를 들어, COM 클래스를 실행할 원격 컴퓨터를 구성하는 경우, 레지스트리에 있는 특정 클래스에 대한 RemoteServerName 키의 설정은 해당 클래스를 사용하는 모든 응용 프로그램에 영향을 줍니다. 의도하지 않은 코드 공유와 유사하게, 구성 데이터 공유를 사용하면 특정 응용 프로그램이 자신의 동작을 완전히 제어하지 못합니다.

System.AppDomainFlags.ApplicationBase 속성은 런타임에서 어셈블리를 찾는 위치를 지정할 수 있는지 여부를 제어하고 System.AppDomainFlags.ConfigurationFile 속성은 특정 응용 프로그램에 적용할 구성 설정의 범위를 제어합니다.

ApplicationBase 속성은 런타임에서 전용 어셈블리를 찾을 수 있도록 특정 응용 프로그램의 루트 디렉터리를 만듭니다. 어셈블리를 디스크에서 로드하는 것을 호스트에서 허용하는 경우에는 로드된 어셈블리를 런타임에서 찾을 수 있도록 ApplicationBase 속성을 제공해야 합니다.

ConfigurationFile 속성은 응용 프로그램 도메인에 실행되는 응용 프로그램을 구성하는 데 사용되는 설정이 들어 있는 XML 파일의 이름을 지정합니다. 어셈블리 버전 관리 규칙 및 특정 응용 프로그램 도메인에서 실행되는 형식에서 원격으로 액세스할 수 있는 형식을 찾는 방법에 대한 지침은 응용 프로그램 구성 파일에 들어 있는 설정의 예제입니다.

응용 프로그램 도메인을 구성하는 데 사용할 수 있는 다른 속성에 대한 설명을 보려면 AppDomain 클래스에 대한 설명서를 참조하십시오.

보안 정보AppDomainSetup.DisallowCodeDownload 속성의 기본값은 false입니다. 이 설정은 서비스에 안전하지 못합니다. 서비스에서 부분 신뢰 코드가 다운로드되는 것을 방지하려면 이 속성을 true로 설정합니다.

참고 항목

참조

AppDomain

기타 리소스

공용 언어 런타임 호스팅