Share via


ASP.NET 동적 컴파일 이해

업데이트: 2007년 11월

웹 응용 프로그램에서 요청을 처리하려면 ASP.NET을 통해 먼저 웹 응용 프로그램의 코드를 하나 이상의 어셈블리로 구문 분석하고 컴파일해야 합니다. 코드를 컴파일하면 MSIL(Microsoft Intermediate Language)이라는, 언어 및 CPU와 관계없는 표현으로 변환됩니다. 런타임에 MSIL은 .NET Framework의 컨텍스트에서 실행되며, 이 컨텍스트에서 MSIL이 응용 프로그램을 실행하는 컴퓨터의 프로세서에 대한 CPU 고유 명령으로 변환됩니다.

첫 번째 요청 시 컴파일

기본적으로 ASP.NET 웹 페이지와 코드 파일은 사용자가 웹 사이트에서 ASP.NET 페이지(.aspx 파일) 같은 리소스를 처음으로 요청할 때 동적으로 컴파일됩니다. 페이지와 코드 파일이 처음으로 컴파일된 후에는 컴파일된 리소스가 캐시되어, 동일 페이지에 대한 이후 요청을 매우 효율적으로 처리합니다.

ASP.NET에서는 ASP.NET 페이지(.aspx 파일), ASP.NET 웹 서비스(.asmx 파일), ASP.NET HTTP 처리기(.ashx 파일) 및 ASP.NET 응용 프로그램 파일(Global.asax)을 비롯하여 소스 코드나 클래스 파일 같은 기타 파일의 동적 컴파일을 지원합니다. ASP.NET 파일 형식에 대한 자세한 내용은 웹 사이트 파일 형식을 참조하십시오. ASP.NET 컴파일 프로세스에 대한 자세한 내용은 IIS 5.0 및 6.0의 ASP.NET 응용 프로그램 수명 주기 개요의 "컴파일 주기" 부분을 참조하십시오.

변경 시 다시 컴파일

동적으로 컴파일된 파일을 변경하면 컴파일하여 캐시된 파일 어셈블리가 자동으로 무효화되고 모든 관련 리소스가 다시 컴파일됩니다. 다시 코드를 요청하면 ASP.NET에서 코드가 변경되었음을 인식하고 그 영향을 받는 웹 응용 프로그램 리소스를 다시 컴파일합니다. 이와 같은 체계를 통해 컴파일 프로세스에 따른 부담을 최소화하면서 응용 프로그램을 신속하게 개발할 수 있습니다. 리소스의 변경 내용에 따라서는 다시 컴파일해야 할 대상의 범위가 페이지 하나에서 전체 웹 사이트에 이르기까지 다양할 수 있습니다.

컴파일 종속성

응용 프로그램에 대한 최초 요청이 이루어지면 ASP.NET에서 파일을 특정 순서로 컴파일합니다. 첫 번째로 컴파일되는 항목을 최상위 항목이라고 합니다. 최초 요청 이후 최상위 항목은 종속성이 변경될 때만 다시 컴파일됩니다.

최상위 항목에는 App_GlobalResources 폴더, App_WebResources 폴더, 프로필 속성, App_Code 폴더 및 Global.asax 파일이 포함됩니다. 최상위 항목을 컴파일한 후 ASP.NET에서는 다른 항목을 컴파일합니다. 이와 같이 추가로 컴파일되는 항목에는 App_LocalResources 폴더, 개별 ASP.NET 페이지(.aspx 파일), ASP.NET 사용자 정의 컨트롤(.ascx 파일), ASP.NET HTTP 처리기(.ashx 파일) 및 ASP.NET HTTP 모듈(.asmx 파일)과 테마, 마스터 페이지 및 기타 소스 파일이 있습니다.

자세한 내용은 ASP.NET 웹 사이트 레이아웃IIS 5.0 및 6.0의 ASP.NET 응용 프로그램 수명 주기 개요의 "컴파일 주기" 부분을 참조하십시오.

컴파일 출력

코드를 컴파일하면 결과 어셈블리가 서버의 폴더에 캐시됩니다. 코드를 컴파일하고 올바르게 실행하려면 이 폴더에 적절한 권한이 필요합니다. 코드를 컴파일하고 실행하는 데 사용할 컴파일 폴더 위치와 권한을 모두 구성할 수 있습니다.

컴파일 폴더 위치

기본적으로 웹 응용 프로그램을 컴파일하면 컴파일된 코드가 Temporary ASP.NET Files 폴더에 배치됩니다. 이 폴더는 .NET framework를 설치한 위치의 하위 디렉터리입니다. 일반적으로 이 위치는 다음과 같습니다.

%SystemRoot%\Microsoft.NET\Framework\versionNumber\Temporary ASP.NET Files

컴파일 폴더 필수 권한

.NET 설치 프로세스를 진행하면 Temporary ASP.NET Files 폴더가 생성되고 컴파일된 코드에 액세스하는 데 필요한 높은 신뢰 수준의 액세스 권한이 ASP.NET 로컬 사용자 계정에 할당됩니다. 구성이나 계정 설정을 수정한 경우에는 해당 계정에 Temporary ASP.NET Files 폴더에 대한 신뢰 수준이 높은 권한이 있어야 합니다. 자세한 내용은 방법: 사용자 계정으로 작업자 프로세스 실행을 참조하십시오.

컴파일 폴더 구성

ASP.NET에서는 각 응용 프로그램에 대해 Temporary ASP.NET File 폴더 아래 별도의 하위 폴더를 만듭니다. 구성 파일의 컴파일 섹션에서 tempDirectory 특성을 사용하여 루트 위치를 구성할 수 있습니다. 이 선택적 특성을 사용하면 컴파일 과정에서 임시 파일을 저장하는 데 사용할 디렉터리를 지정할 수 있습니다. 기본값은 빈 문자열("")입니다. 이를 빈 문자열로 지정한 경우 현재 프로세스에 필수 액세스 권한이 있으면 파일이 다음 디렉터리에 저장됩니다.

%FrameworkInstallLocation%\Temporary ASP.NET Files

자세한 내용은 compilation 요소(ASP.NET 설정 스키마)CompilationSectionTempDirectory 속성을 참조하십시오.

여러 언어 지원

ASP.NET 2.0에서는 동일한 웹 응용 프로그램에 여러 프로그래밍 언어를 지원합니다. App_Code 디렉터리에서 C# 및 Visual Basic 같은 각 언어에 대한 하위 폴더를 지정할 수 있습니다. ASP.NET에서는 각 하위 폴더에 대해 개별 어셈블리를 만듭니다. 자세한 내용은 ASP.NET 웹 사이트의 공유 코드 폴더연습: 여러 프로그래밍 언어를 사용하여 웹 사이트 개발을 참조하십시오.

동적 컴파일의 장단점

ASP.NET 동적 컴파일을 사용하면 웹 응용 프로그램을 배포하기 전에 코드를 명시적으로 컴파일하지 않고도 소스 코드를 수정할 수 있습니다. 소스 파일을 수정하면 ASP.NET에서 파일을 자동으로 다시 컴파일하고 모든 연결된 리소스를 업데이트합니다. <processModel> 섹션이 변경되지 않은 경우에는 변경 내용 적용을 위해 IIS 서버를 다시 시작할 필요가 없습니다. 또한 컴파일 과정에서 호출되는 새 파일 형식에 대한 사용자 지정 빌드 공급자를 만들어 ASP.NET 빌드 시스템을 확장할 수 있습니다. ASP.NET 빌드 시스템에서 얻을 수 있는 동적 컴파일은 이전 버전의 ASP.NET 응용 프로그램 구조 및 형식과도 호환됩니다.

그러나 동적 컴파일을 사용하는 데 따른 몇 가지 단점도 있습니다. 동적 컴파일을 사용하면 페이지와 코드를 처음 요청할 때 이를 컴파일해야 하므로 사용자에 대한 초기 응답 시간이 느려질 수 있습니다. 이는 업데이트가 잦은 대규모 사이트에서 특히 문제가 될 수 있습니다. 동적 컴파일을 사용하면 사용자가 사이트에 액세스하기 전에 컴파일 타임 버그를 식별할 수 없습니다. 또한 동적 컴파일을 사용하면 소스 코드 없이 프로덕션 서버에 배포할 수 있는 컴파일된 사이트 버전을 만들 수 없습니다. 이러한 문제가 하나라도 웹 응용 프로그램에 걸림돌이 된다면 웹 사이트를 미리 컴파일하는 것이 좋습니다. 자세한 내용은 ASP.NET 미리 컴파일 개요를 참조하십시오.

참고 항목

작업

방법: 공유 서버의 ASP.NET 응용 프로그램 보안 유지

개념

ASP.NET 가장

ASP.NET 필수 ACL(액세스 제어 목록)

웹 사이트 파일 형식

ASP.NET 웹 사이트 레이아웃

참조

CodeGenDir