ASP.NET 컴파일 개요

Visual Studio 2010

업데이트: 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를 작성할 수 있습니다.

표시: