ASP.NET 컴파일 개요
업데이트: 2007년 11월
사용자의 요청을 처리하기 위해 응용 프로그램 코드를 사용하려면 ASP.NET에서 먼저 해당 코드를 하나 이상의 어셈블리로 컴파일해야 합니다. 어셈블리는 파일 이름 확장명이 .dll인 파일입니다. Visual Basic, C#, J# 등과 같은 여러 언어로 ASP.NET 코드를 작성할 수 있습니다. 코드를 컴파일하면 MSIL(Microsoft Intermediate Language)이라는, 언어 및 CPU와 관계없는 표현으로 변환됩니다. 런타임에 MSIL은 .NET Framework의 컨텍스트에서 실행되며, 이 컨텍스트에서 MSIL이 응용 프로그램을 실행하는 컴퓨터의 프로세서에 대한 CPU 고유 명령으로 변환됩니다.
응용 프로그램 코드를 컴파일하면 다음과 같은 여러 이점이 있습니다.
성능 컴파일된 코드는 기계어 코드와 가장 비슷하며, 추가 구문 분석이 필요하지 않기 때문에 ECMAScript 또는 VBScript와 같은 스크립트 언어보다 매우 빠릅니다.
보안 컴파일된 코드는 상위 수준 언어의 가독성과 추상성이 부족하기 때문에 컴파일되지 않은 소스 코드보다 리버스 엔지니어링하기가 어렵습니다. 또한 난독 처리(obfuscation) 도구를 사용하면 컴파일된 코드의 리버스 엔지니어링을 더욱 어렵게 만들 수 있습니다.
안정성 컴파일할 때 코드에 구문 오류, 형식 안전성 및 기타 문제가 있는지 검사합니다. 빌드시에 이런 오류를 catch하면 코드 오류를 대부분 제거할 수 있습니다.
상호 운용성 MSIL 코드는 모든 .NET 언어를 지원하기 때문에 원래 다른 언어로 작성된 어셈블리를 사용자의 코드에서 사용할 수 있습니다. 예를 들어, ASP.NET 웹 페이지를 C#으로 작성하는 경우 Visual Basic으로 작성한 .dll 파일에 대한 참조를 추가할 수 있습니다.
ASP.NET 컴파일 아키텍처에는 다음과 같은 여러 기능이 포함되어 있습니다.
여러 언어 지원
자동 컴파일
유연한 배포
확장 가능한 빌드 시스템
다음 단원에서는 이러한 각 기능에 대해 설명합니다.
여러 언어 지원
ASP.NET 2.0에서는 각 언어마다 하나씩 여러 어셈블리를 만들기 때문에 동일 응용 프로그램에서 Visual Basic 및 C#과 같은 여러 언어를 사용할 수 있습니다. App_Code 폴더에 코드를 저장할 경우, 각 언어에 대해 하위 폴더를 하나씩 지정할 수 있습니다. App_Code 폴더에 대한 자세한 내용은 ASP.NET 웹 사이트의 공유 코드 폴더를 참조하십시오.
자동 컴파일
ASP.NET은 사용자가 웹 사이트에서 리소스를 처음으로 요청할 때 해당 응용 프로그램 코드와 종속 리소스를 자동으로 컴파일합니다. 일반적으로, ASP.NET은 App_Code와 같은 각 응용 프로그램 디렉터리와 주 디렉터리에 대해 어셈블리를 하나씩 만듭니다. 디렉터리에 있는 파일이 여러 프로그래밍 언어로 되어 있으면 언어마다 별도의 어셈블리가 만들어집니다. Web.config 파일의 Compilation 섹션에서 단일 어셈블리로 컴파일되는 디렉터리를 지정할 수 있습니다.
유연한 배포
ASP.NET은 사용자가 처음으로 요청할 때 웹 사이트를 컴파일하므로 응용 프로그램의 소스 코드를 프로덕션 웹 서버에 복사하기만 하면 됩니다. 하지만 ASP.NET에는 웹 사이트를 배포하기 전에 컴파일하거나, 웹 사이트를 배포했지만 아직 사용자가 리소스를 요청하기 전에 컴파일할 수 있는 미리 컴파일 옵션이 제공됩니다. 미리 컴파일하면 몇 가지 장점을 얻을 수 있습니다. ASP.NET에서 사이트를 컴파일하는 동안의 지연 시간이 없기 때문에 사용자가 처음으로 요청할 때 웹 사이트의 성능을 향상시킬 수 있습니다. 또한 미리 컴파일을 사용하면 사용자가 페이지를 요청하는 경우에만 발견할 수 있는 오류를 찾을 수 있습니다. 마지막으로, 웹 사이트를 배포하기 전에 미리 컴파일을 수행하면 소스 코드 대신 어셈블리를 배포할 수 있습니다.
ASP.NET 컴파일러 도구(ASPNET_Compiler.exe)를 사용하여 웹 사이트를 미리 컴파일할 수 있습니다. 이 도구에세는 다음과 같은 미리 컴파일 옵션을 제공합니다.
현재 위치에서 컴파일 이 옵션은 동적 컴파일을 수행할 때와 동일하게 컴파일을 수행합니다. 이미 프로덕션 서버에 배포된 웹 사이트를 컴파일하는 경우 이 옵션을 사용합니다.
업데이트할 수 없는 전체 미리 컴파일 이 옵션을 사용하면 응용 프로그램을 컴파일한 다음 컴파일된 출력을 프로덕션 서버로 복사할 수 있습니다. 모든 응용 프로그램 코드, 태그 및 UI 코드는 어셈블리로 컴파일됩니다. .aspx 페이지와 같은 자리 표시자 파일은 그대로 유지되므로 권한 구성과 같은 파일 관련 작업을 수행할 수 있지만 업데이트할 수 있는 코드는 파일에 포함되지 않습니다. 페이지나 코드를 업데이트하려면 웹 사이트를 다시 미리 컴파일한 다음 다시 배포해야 합니다.
업데이트할 수 있는 미리 컴파일 업데이트할 수 없는 전체 미리 컴파일과 비슷하지만 .aspx 페이지 및 .ascx 컨트롤과 같은 UI 요소에 모든 태그, UI 코드 및 인라인 코드(있는 경우)가 모두 유지됩니다. 파일을 배포한 후에도 파일의 코드를 업데이트할 수 있습니다. ASP.NET은 파일에서 변경 사항을 발견하면 파일 다시 컴파일합니다. 코드 숨김 파일(.vb 또는 .cs 파일)의 코드는 미리 컴파일하는 동안 어셈블리로 빌드되므로 미리 컴파일 및 배포 단계를 다시 수행하지 않고는 변경할 수 없습니다.
자세한 내용은 ASP.NET 미리 컴파일 개요를 참조하십시오.
확장 가능한 빌드 시스템
ASP.NET은 BuildProvider 클래스를 사용하여 .aspx 페이지, .ascx 파일 및 전역 리소스와 같은 항목을 빌드합니다. 사용자는 BuildProvider 클래스로부터 상속하는 클래스를 만들어서 ASP.NET 빌드 시스템을 확장하고 사용자 지정하여 사용자 지정 리소스를 컴파일할 수 있습니다. 예를 들어 새로운 파일 형식을 추가한 다음 해당 형식을 빌드하는 BuildProvider를 작성할 수 있습니다.