다음을 통해 공유


ASP.NET 미리 컴파일 개요

업데이트: 2007년 11월

ASP.NET에서는 사용자에게 웹 사이트를 제공하기 전에 해당 사이트를 미리 컴파일할 수 있습니다. 이렇게 하면 응답 시간 향상, 오류 검사, 소스 코드 보호, 효율적인 배포 등과 같은 많은 이점을 얻을 수 있습니다.

또한 웹 응용 프로그램 프로젝트 모델을 사용하여 프로젝트를 컴파일할 수 있습니다. 프로젝트의 모든 코드 파일(독립 실행형, 코드 숨김 및 클래스 파일)은 단일 어셈블리로 컴파일되고 Bin 디렉터리에 저장됩니다. 컴파일을 통해 단일 어셈블리가 생성되므로 어셈블리 이름 및 버전 같은 특성을 지정할 수 있습니다. 출력 어셈블리의 위치를 지정하여 해당 어셈블리를 Bin 디렉터리가 아닌 다른 디렉터리에 저장할 수도 있습니다. 자세한 내용은 웹 응용 프로그램 프로젝트 컴파일을 참조하십시오.

이 항목의 내용은 다음과 같습니다.

  • 시나리오

  • 미리 컴파일 기능

  • 배경

  • 코드 예제

기능

ASP.NET 웹 사이트를 미리 컴파일하면 다음과 같은 이점이 있습니다.

  • 처음 요청될 때 페이지와 코드 파일을 컴파일할 필요가 없기 때문에 사용자에 대한 응답 시간이 빠릅니다. 이는 자주 업데이트되는 큰 사이트에 특히 유용합니다.

  • 사용자에게 사이트를 공개하기 전에 컴파일 타임 버그를 확인할 수 있습니다.

  • 소스 코드 없이 프로덕션 서버에 배포할 수 있는 컴파일된 사이트 버전을 만들 수 있습니다.

맨 위로 이동

배경

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

또한 ASP.NET에서는 사용자에게 전체 사이트를 제공하기 전에 해당 사이트를 미리 컴파일할 수 있습니다. ASP.NET은 사이트를 미리 컴파일하기 위한 다음과 같은 옵션을 제공합니다.

  • 내부에서 사이트 미리 컴파일. 이 옵션은 성능을 향상시키고 오류를 검사하려는 기존 사이트에 유용합니다.

  • 배포용으로 사이트 미리 컴파일. 프로덕션 서버에 배포할 수 있는 특정 출력물을 만들려면 이 옵션을 선택합니다.

또한 사이트를 미리 컴파일하여 읽기 전용이나 업데이트 가능하게 만들 수 있습니다. 다음 단원에서는 각 옵션에 대해 자세히 설명합니다.

내부에서 사이트 미리 컴파일

웹 사이트를 미리 컴파일하면 웹 사이트의 성능을 약간 향상시킬 수 있습니다. 특히 ASP.NET 웹 페이지와 코드 파일 간에 내용이 자주 변경되고 추가되는 사이트의 경우에 효과가 있습니다. 변경이 잦은 웹 사이트에서는 새로운 페이지와 변경된 페이지를 동적으로 컴파일하는 데 필요한 시간이 사이트 품질에 대한 사용자의 평가에 영향을 줄 수 있습니다.

내부에서 사이트를 미리 컴파일하면 사용자의 사이트 페이지 요청 시 발생하는 컴파일과 동일한 컴파일이 효과적으로 수행됩니다. 따라서 주요한 성능 향상은 첫 번째 요청에 대해 페이지를 컴파일하지 않아도 된다는 점입니다.

내부에서 사이트를 미리 컴파일하면 모든 ASP.NET 파일 형식이 컴파일됩니다. HTML 파일, 그래픽 파일 및 기타 ASP.NET 이외의 정적 파일은 그대로 남습니다. 미리 컴파일 프로세스는 ASP.NET이 동적 컴파일에 사용하는 것과 동일한 논리를 따르므로 파일 간 종속성이 적용됩니다. 미리 컴파일하는 동안 컴파일러는 모든 실행 가능한 출력에 대해 어셈블리를 만들고 이를 %SystemRoot%\Microsoft.NET\Framework\version\Temporary ASP.NET Files 폴더 아래의 특수 폴더에 둡니다. 그런 다음 ASP.NET은 이 폴더의 어셈블리로부터 페이지에 대한 요청을 수행합니다.

사이트를 다시 미리 컴파일하면 새로운 파일이나 변경된 파일(또는 새로운 파일이나 변경된 파일에 종속된 파일)만 컴파일됩니다. 이러한 컴파일러 최적화로 인해 부분 업데이트 후에도 사이트를 효과적으로 컴파일할 수 있습니다.

배포용으로 사이트 미리 컴파일

사이트를 미리 컴파일하는 또 다른 용도는 프로덕션 서버에 배포할 수 있는 실행 가능한 사이트 버전을 만드는 것입니다. 배포용으로 미리 컴파일하면 어셈블리, 구성 정보, 사이트 폴더 정보 및 정적 파일(예: HTML 파일 및 그래픽)이 포함된 레이아웃의 형식으로 출력이 만들어집니다.

사이트를 컴파일한 후에는 Windows XCopy 명령, FTP, Windows 설치 등의 도구를 사용하여 레이아웃을 프로덕션 서버에 배포할 수 있습니다. 배포된 레이아웃은 사이트 기능을 수행하며, ASP.NET은 레이아웃의 어셈블리로부터 페이지에 대한 요청을 수행합니다.

배포용으로 사이트를 미리 컴파일하면 소스 코드 및 기타 지적 재산권을 보호할 수 있습니다. 배포용으로 컴파일하는 동안 컴파일러가 어떤 방식으로 파일을 처리하는지 알아보려면 이 항목의 뒷부분에서 배포용으로 사이트를 컴파일하는 동안 파일 처리를 참조하십시오.

배포용으로 미리 컴파일하는 방식은 배포만을 위해 미리 컴파일하는 방식과 배포 및 업데이트를 위해 미리 컴파일하는 방식의 두 가지가 있습니다.

배포만을 위한 미리 컴파일

배포만을 위해 미리 컴파일을 수행하면 컴파일러는 일반적으로 런타임에 컴파일되는 거의 모든 ASP.NET 소스 파일로부터 어셈블리를 만듭니다. 여기에는 페이지의 프로그램 코드, .cs 및 .vb 클래스 파일, 기타 코드 파일, 리소스 파일이 포함됩니다. 컴파일러는 출력물에서 소스 및 태그를 모두 제거합니다. 만들어진 레이아웃에서 해당 페이지에 적합한 어셈블리의 포인터를 포함하는 컴파일된 파일(확장명 .compiled)이 각 .aspx 파일에 대해 생성됩니다.

페이지 레이아웃을 비롯한 웹 사이트를 변경하려면 원본 파일을 변경하고 사이트를 다시 컴파일한 후 레이아웃을 다시 배포해야 합니다. 하지만 사이트 구성의 경우에는 사이트를 다시 컴파일할 필요 없이 프로덕션 서버에서 Web.config 파일을 직접 변경할 수 있습니다.

이 옵션을 사용하면 ASP.NET 웹 페이지를 안전하게 보호할 수 있을 뿐 아니라 사용자가 페이지를 신속하게 열 수 있습니다.

배포 및 업데이트를 위한 미리 컴파일

배포 및 업데이트를 위해 미리 컴파일을 수행하면 컴파일러는 모든 소스 코드(단일 파일 페이지의 페이지 코드 제외) 및 기타 파일(일반적으로 리소스 파일 등의 어셈블리 생성)로부터 어셈블리를 만듭니다. 컴파일러는 .aspx 파일을 컴파일된 코드 숨김 모델을 사용하는 단일 파일로 변환한 후 레이아웃에 복사합니다.

이 옵션을 사용하면 컴파일 후에도 사이트의 ASP.NET 웹 페이지를 부분적으로 변경할 수 있습니다. 예를 들어 컨트롤 배열, 색상, 글꼴 및 기타 페이지 모양을 변경할 수 있습니다. 또한 이벤트 처리기 또는 기타 코드가 필요하지 않은 컨트롤을 추가할 수 있습니다.

사이트가 처음으로 실행될 때 ASP.NET은 태그로부터 출력을 만들기 위해 추가 컴파일을 수행합니다.

참고:

미리 컴파일된 업데이트 가능한 사이트에서는 여러 페이지가 동일한 CodeFile 클래스를 참조할 수 없습니다.

미리 컴파일 모델 선택 지침

아래 표에는 어떤 컴파일 모델을 사용할지 결정하는 데 도움이 되는 정보가 나와 있습니다. 이 표에 나와 있는 일부 옵션은 이 항목의 뒷부분에 설명되어 있습니다.

목표

컴파일 모델

코드 컴파일에 신경을 쓰지 않고 응용 프로그램을 빠르게 개발

기본 컴파일 사용(미리 컴파일 안 함)

웹 사이트에 대한 첫 번째 페이지 요청의 응답 시간 단축

배포 컴파일 옵션 중 하나 또는 내부 미리 컴파일 사용

소스 코드와 UI(사용자 인터페이스) 코드 분리

업데이트할 수 있는 UI가 포함된 미리 컴파일 사용

소스 코드를 변경하지 않고 UI 코드 수정

업데이트할 수 있는 UI가 포함된 미리 컴파일 사용

프로덕션 서버에서 모든 소스 코드 및 UI 코드 제거

업데이트할 수 없는 UI가 포함된 미리 컴파일 사용

특정 어셈블리를 교체하여 응용 프로그램 업데이트

어셈블리 이름이 고정된 미리 컴파일 사용

강력한 이름의 어셈블리를 사용하여 응용 프로그램의 보안 강화

서명된 어셈블리가 포함된 미리 컴파일 사용

미리 컴파일 수행

명령줄에서 Aspnet_compiler.exe 도구를 사용하여 웹 사이트를 미리 컴파일할 수 있습니다. 자세한 내용은 방법: 배포를 위해 ASP.NET 웹 사이트 미리 컴파일ASP.NET 컴파일 도구(Aspnet_compiler.exe)를 참조하십시오. Visual Studio에도 IDE에서 웹 사이트를 미리 컴파일하는 명령이 포함되어 있습니다.

참고:

웹 사이트를 미리 컴파일할 때는 해당 사이트만 컴파일되고 자식 사이트는 컴파일되지 않습니다. 웹 사이트에 IIS의 응용 프로그램으로 표시된 하위 폴더가 있으면 부모 폴더를 미리 컴파일할 때 해당 자식 응용 프로그램은 컴파일되지 않습니다.

소스 보호 기능을 사용하여 컴파일하려는 사이트에는 웹 사이트를 미리 컴파일할 때 한 가지 코딩 제한 사항이 적용됩니다. 기본 페이지 클래스(코드 숨김 클래스)에서 정규화된 클래스 이름을 사용하여 페이지 클래스 멤버와 관련 페이지 클래스(.aspx 파일)를 참조할 수 있습니다. 그러나 소스 보호 기능을 사용하여 사이트를 미리 컴파일하는 경우에는 이와 같은 형식의 참조가 허용되지 않습니다. 코드 숨김 파일의 기본 페이지 클래스는 .aspx 페이지에서 파생된 페이지 클래스와 같은 어셈블리에 있지 않기 때문입니다. 소스 보호 기능을 사용한 미리 컴파일에 대한 자세한 내용은 방법: 미리 컴파일된 웹 사이트를 위한 어셈블리에 서명을 참조하십시오.

기본 컴파일

ASP.NET 응용 프로그램은 수동으로 컴파일할 필요가 없습니다. ASP.NET은 기본적으로 웹 브라우저에서 응용 프로그램의 페이지를 처음으로 요청할 때 웹 응용 프로그램을 컴파일합니다. 응용 프로그램의 파일을 변경한 경우 다음에 이 페이지를 요청하면 ASP.NET 런타임에서 변경된 파일의 종속성을 확인하고 변경 내용이 적용되는 파일만 다시 컴파일합니다.

이점

기본 컴파일을 사용하면 다음과 같은 이점이 있습니다.

  • 사용하기 간편합니다. ASP.NET 컴파일러에서 모든 작업이 자동으로 수행됩니다.

  • 웹 사이트를 미리 컴파일하기 위해 추가로 단계를 수행하면 개발 작업의 일정이 지장을 받는 경우 개발 과정에서 선택할 수 있는 최상의 컴파일 모델입니다.

단점

기본 컴파일을 사용하면 다음과 같은 단점이 있습니다.

  • 웹 사이트를 처음 요청할 때 응답이 상당히 지연될 수 있습니다.

  • 소스 코드 파일을 프로덕션 서버에 저장해야 합니다.

  • 서버의 웹 사이트 디렉터리에 대한 파일 시스템 액세스 권한이 있는 모든 사용자가 소스 코드와 UI 코드를 가져올 수 있습니다.

기본 컴파일 방식 선택 기준

기본 컴파일은 다음과 같은 경우에 사용합니다.

  • 웹 사이트를 개발하고 테스트하는 경우

  • 웹 사이트에 주로 정적인 정보가 포함되는 경우

  • 웹 사이트가 자주 변경되지 않는 경우

  • 프로덕션 서버에 소스 코드 파일을 저장하는 데 문제가 없는 경우

현재 위치에서 컴파일

프로덕션 서버에 이미 있는 사이트를 미리 컴파일할 수 있으며 이를 내부 컴파일이라고 합니다. 응용 프로그램의 파일을 변경하는 경우 ASP.NET 컴파일 도구를 사용하여 변경 사항이 적용되는 파일을 다시 컴파일하거나 다음 번에 응용 프로그램에서 페이지를 요청할 때 변경 사항이 적용되는 파일이 다시 컴파일되도록 할 수 있습니다.

이 컴파일 모델에 대한 자세한 내용은 방법: ASP.NET 웹 사이트 미리 컴파일을 참조하십시오.

이점

현재 위치에서 컴파일을 사용하면 다음과 같은 이점이 있습니다.

  • 웹 사이트의 첫 번째 요청에 대한 응답 시간이 단축됩니다.

  • 특별한 배포 단계가 필요하지 않으며, 사이트에서 페이지를 요청할 때와 동일한 방식으로 응용 프로그램이 컴파일됩니다.

단점

현재 위치에서 컴파일을 사용하면 다음과 같은 단점이 있습니다.

  • 응용 프로그램의 모든 소스 코드를 프로덕션 서버에 저장해야 합니다.

  • 웹 사이트 디렉터리에 대한 액세스 권한이 있는 모든 사용자가 소스 코드와 UI 코드를 가져올 수 있습니다.

현재 위치에서 컴파일 방식 선택 기준

현재 위치에서 컴파일은 다음과 같은 경우에 사용합니다.

  • 웹 사이트의 페이지를 자주 변경하는 경우

  • 프로덕션 서버에 소스 코드 파일을 저장하는 데 문제가 없는 경우

  • 첫 번째 페이지 요청에 대한 응답 시간을 단축하려는 경우

업데이트할 수 있는 UI를 사용하여 미리 컴파일

ASP.NET 컴파일 도구의 -u 스위치를 사용하면 소스 코드(.cs, .vb 파일, .resource 파일)를 DLL로 컴파일하고, .aspx 파일의 UI 태그를 업데이트 가능하도록 둘 수 있습니다. 프로덕션 서버에 웹 사이트를 배포한 후에는 전체 웹 사이트를 다시 컴파일하지 않고도 .aspx 코드를 변경할 수 있습니다.

이 컴파일 방법에 대한 자세한 내용은 방법: 배포를 위해 ASP.NET 웹 사이트 미리 컴파일을 참조하십시오.

이점

업데이트할 수 있는 UI가 포함된 웹 사이트를 미리 컴파일하면 다음과 같은 이점이 있습니다.

  • 웹 사이트의 첫 번째 요청에 대한 응답 시간이 단축됩니다.

  • 사용자 인터페이스 디자이너가 전체 웹 사이트를 다시 컴파일하지 않고도 웹 사이트의 모양과 동작을 수정할 수 있습니다.

  • 웹 사이트 디렉터리에 대한 파일 시스템 액세스 권한이 있는 사용자가 응용 프로그램의 소스 코드를 마음대로 볼 수 없도록 하여 지적 재산권을 보호할 수 있습니다.

단점

업데이트할 수 있는 UI가 포함된 웹 사이트를 미리 컴파일하면 다음과 같은 단점이 있습니다.

  • 프로덕션 서버에 배포하기 전에 별도의 컴파일 단계를 거쳐야 합니다.

  • 웹 사이트 디렉터리에 대한 액세스 권한이 있는 모든 사용자가 응용 프로그램의 UI(.aspx 파일)를 가져올 수 있으므로 지적 재산권이 보호되지 않습니다.

  • 코드 숨김 모델을 사용하는 페이지에 대한 연결된 코드 파일인 동일한 CodeFile 클래스를 여러 페이지에서 참조할 수 없습니다.

업데이트할 수 있는 UI가 포함된 미리 컴파일 방식 선택 기준

다음과 같은 경우에는 업데이트할 수 있는 UI를 포함시켜 응용 프로그램을 미리 컴파일하십시오.

  • UI 디자이너가 소스 코드 개발자와 별도로 작업하는 경우

  • 누구나 마음대로 볼 수 없도록 보호해야 할 지적 자산이 프로그램 소스 코드에 포함되는 경우

  • 프로덕션 서버에 프로그램 소스 코드를 저장하지 않으려는 경우

업데이트할 수 없는 UI를 사용하여 미리 컴파일

ASP.NET 컴파일 도구를 사용하면 .aspx 및 .ascx 파일 같은 UI 파일을 비롯하여 응용 프로그램에 대한 모든 소스 코드를 응용 프로그램의 Bin 디렉터리에 배포되는 DLL로 컴파일할 수 있습니다.

이 컴파일 방법에 대한 자세한 내용은 방법: 배포를 위해 ASP.NET 웹 사이트 미리 컴파일을 참조하십시오.

이점

업데이트할 수 없는 UI를 사용하여 미리 컴파일하면 다음과 같은 이점이 있습니다.

  • 웹 사이트의 첫 번째 요청에 대한 응답 시간이 단축됩니다.

  • 웹 사이트 디렉터리에 대한 액세스 권한이 있는 사용자가 응용 프로그램의 소스 코드와 UI 코드를 마음대로 볼 수 없도록 하여 지적 재산권을 보호할 수 있습니다.

단점

업데이트할 수 없는 UI를 사용하여 미리 컴파일하면 다음과 같은 단점이 있습니다.

  • 프로덕션 서버에 배포하기 전에 별도의 컴파일 단계를 거쳐야 합니다.

  • 응용 프로그램의 UI를 조금만 변경하려 해도 웹 사이트 전체를 다시 컴파일해야 합니다.

업데이트할 수 없는 UI가 포함된 미리 컴파일 방식 선택 기준

다음과 같은 경우에는 업데이트할 수 없는 UI를 포함시켜 웹 사이트를 미리 컴파일하십시오.

  • 누구나 마음대로 볼 수 없도록 보호해야 할 지적 자산이 UI 코드에 포함되는 경우

  • UI를 자주 변경할 필요가 없는 경우

  • 프로덕션 서버에 컴파일된 DLL만 저장하려는 경우

이름이 고정된 어셈블리로 미리 컴파일

ASP.NET 컴파일 도구를 사용하여 컴파일하는 과정에서 생성되는 어셈블리에는 임의의 이름이 지정됩니다. 어셈블리의 이름은 응용 프로그램을 다시 컴파일할 때마다 변경됩니다.

이와 같이 어셈블리 이름이 변경되므로 단지 어셈블리 하나를 제공하기 위해 전체 응용 프로그램을 다시 배포해야 하는 상황이 발생합니다. 그러나 ASP.NET 컴파일 도구의 -fixednames 스위치를 사용하면 응용 프로그램의 각 페이지에 대해 어셈블리를 하나씩 만들 수 있습니다. 이렇게 하면 이후에 컴파일해도 어셈블리의 이름이 변경되지 않으므로 변경된 어셈블리만 교체하도록 응용 프로그램의 서비스 릴리스를 만들 수 있습니다.

-fixednames 스위치를 사용하면 페이지마다 개별 어셈블리가 작성되므로 응용 프로그램의 페이지 수를 제한해야 합니다.

이 미리 컴파일 방법에 대한 자세한 내용은 방법: ASP.NET 컴파일 도구를 사용하여 고정된 이름 생성을 참조하십시오.

이점

이름이 고정된 어셈블리로 미리 컴파일하면 다음과 같은 이점이 있습니다.

  • 컴파일할 때마다 각 어셈블리의 이름이 변경되지 않으므로 전체 응용 프로그램을 다시 배포하지 않고도 특정 어셈블리를 교체할 수 있습니다.

  • 응용 프로그램을 소규모로 업데이트할 때 그 대상을 더 구체적으로 정할 수 있습니다.

단점

이름이 고정된 어셈블리로 미리 컴파일하면 다음과 같은 단점이 있습니다.

  • 응용 프로그램의 각 페이지마다 어셈블리가 하나씩 작성됩니다. 이를 통해 페이지 수가 많은 사이트에 대해 여러 개의 어셈블리를 만들 수 있습니다.

이름이 고정된 어셈블리로 미리 컴파일 방식 선택 기준

다음과 같은 경우에는 웹 사이트를 고정된 이름의 어셈블리로 미리 컴파일하십시오.

  • 전체 응용 프로그램을 교체하지 않고 웹 응용 프로그램을 제공해야 하는 경우

서명된 어셈블리로 미리 컴파일

ASP.NET 컴파일 도구를 사용하여 서버의 GAC(전역 어셈블리 캐시) 또는 응용 프로그램의 Bin 디렉터리에 배포할 수 있는 강력한 이름의 어셈블리를 만들 수 있습니다. 서명된 어셈블리를 사용하면 악의적인 사용자가 응용 프로그램의 어셈블리를 악성 코드로 바꾸는 일이 더 어려워집니다.

이 컴파일 방법에 대한 자세한 내용은 방법: 미리 컴파일된 웹 사이트를 위한 어셈블리에 서명을 참조하십시오.

이점

서명된 어셈블리로 미리 컴파일하면 다음과 같은 이점이 있습니다.

  • 서명된 어셈블리를 사용하면 어셈블리를 악성 코드로 바꾸기가 더 어려워지므로 응용 프로그램의 보안이 강화됩니다.

단점

서명된 어셈블리로 미리 컴파일하면 다음과 같은 단점이 있습니다.

  • 공유 개발 환경에서 키 관리가 복잡해질 수 있습니다.

  • ASP.NET 런타임에서 어셈블리를 호출하려면 어셈블리에 AllowPartiallyTrustedCallersAttribute 특성이 있어야 합니다.

서명된 어셈블리로 미리 컴파일 방식 선택 기준

다음과 같은 경우에는 웹 사이트를 서명된 어셈블리로 미리 컴파일하십시오.

  • 사용자가 응용 프로그램 디렉터리나 GAC에 대한 액세스 권한을 가지고 있고 응용 프로그램의 어셈블리를 교체할 수 있는 경우

  • 응용 프로그램 코드로 생성한 어셈블리를 다른 개발자가 마음대로 교체하지 못하도록 제한하려는 경우

미리 컴파일 출력 작성

미리 컴파일 프로세스가 끝나면 사용자가 지정한 폴더에 결과 출력이 작성됩니다. FTP(파일 전송 프로토콜)를 사용하거나 HTTP를 통해 파일 시스템에서 사용할 수 있는 모든 폴더에 출력을 작성할 수 있습니다. 대상 사이트에 쓸 수 있게 하려면 적절한 권한이 있어야 합니다.

참고:

게시 프로세스를 수행하면 웹 사이트 폴더와 하위 폴더의 파일만 배포되고 Machine.config 파일은 배포되지 않습니다. 따라서 대상 웹 서버의 구성이 사용자 컴퓨터의 구성과 다를 수 있으며 이로 인해 응용 프로그램 동작에 영향을 줄 수 있습니다.

스테이징 서버 또는 프로덕션 서버에 대상 폴더를 지정하거나 로컬 컴퓨터의 폴더에 출력을 작성할 수 있습니다. 프로덕션 서버에 폴더를 지정하면 미리 컴파일과 배포 작업을 한 번에 수행할 수 있습니다. 그러나 웹 사이트에 포함되지 않은 폴더에 출력을 작성하면 별도의 단계를 통해 출력을 서버에 복사할 수 있습니다.

참고:

Visual Studio를 사용하여 미리 컴파일된 웹 사이트를 여는 경우 해당 웹 사이트를 빌드할 수 없으며 빌드 옵션이 해제됩니다. 사이트를 변경하려면 원래 웹 사이트에서 파일을 편집하고 사이트를 미리 컴파일한 다음 다시 게시하는 것이 좋습니다.

컴파일 프로세스의 출력에는 코드 또는 페이지에 대한 컴파일된 어셈블리가 포함됩니다. 미리 컴파일된 사이트를 업데이트할 수 있도록 하는 옵션을 선택하면 .aspx, .asmx 및 .ashx 파일의 코드 숨김 클래스가 어셈블리로 컴파일됩니다. 그러나 .aspx, .asmx 및 .ashx 파일 자체는 현재 상태 그대로 대상 폴더에 복사되므로 사이트를 배포한 후에 파일 레이아웃을 변경할 수 있습니다. 업데이트 가능한 미리 컴파일된 사이트의 경우 단일 파일 페이지의 코드는 어셈블리로 컴파일되는 대신 소스 코드로 배포됩니다.

정적 파일은 컴파일되지 않습니다. 대신 현재 상태 그대로 출력 폴더에 복사됩니다. 정적 파일에는 그래픽 파일, .htm 또는 .html 파일, 텍스트 파일 등이 포함됩니다. 자세한 내용은 이 항목 뒷부분에서 배포용으로 사이트를 컴파일하는 동안 파일 처리를 참조하십시오.

미리 컴파일 중에 오류가 발생하면 출력 창과 오류 목록 창에 보고됩니다. 이런 경우에는 사이트의 컴파일 및 게시 작업이 실행되지 않습니다.

ASP.NET 미리 컴파일에서 파일 처리

사이트를 배포하기 위해 미리 컴파일할 때 ASP.NET은 컴파일러 출력을 포함하는 구조인 레이아웃을 만듭니다. 이 단원에서는 미리 컴파일 중에 파일을 처리하는 방법과 레이아웃 구조 및 콘텐츠에 대해 설명합니다.

사용자는 소스 코드(프로그램 코드 및 리소스를 포함하여 어셈블리를 생성하는 모든 파일)과 태그(.aspx 파일)를 모두 미리 컴파일하거나 소스 코드만 미리 컴파일할 수 있습니다.

컴파일된 파일

미리 컴파일 프로세스에서는 ASP.NET 웹 응용 프로그램의 다양한 파일 형식에 대해 작업을 수행합니다. 응용 프로그램을 배포 전용으로 미리 컴파일하는지 또는 배포 및 업데이트용으로 미리 컴파일하는지 여부에 따라 파일 처리 방식이 달라집니다.

참고:

배포 전용 또는 배포 및 업데이트용으로 사이트를 미리 컴파일하면 대상 파일과 하위 디렉터리에 파일 ACL(액세스 제어 목록)이 유지되지 않습니다. 예를 들어, 사이트를 이전에 미리 컴파일하여 대상 위치에 배포하고 파일의 ACL을 변경한 다음 해당 사이트를 다시 미리 컴파일하여 배포하면 ACL 변경 내용이 소실됩니다.

다음 표에서는 다양한 파일 형식을 설명하고, 응용 프로그램을 배포 전용으로 미리 컴파일하는 경우 해당 파일에 수행되는 작업에 대해 설명합니다.

파일 형식

미리 컴파일 작업

출력 위치

.aspx, ascx, .master

어셈블리와 해당 어셈블리를 가리키는 .compiled 파일을 생성합니다. 원래 파일은 요청을 수행하기 위한 자리 표시자로 그대로 유지됩니다.

어셈블리와 .compiled 파일은 Bin 폴더에 기록됩니다. 페이지(콘텐츠가 제거된 .aspx 파일)는 원래 위치에 남아 있습니다.

.asmx, .ashx

어셈블리를 생성합니다. 원래 파일은 요청을 수행하기 위한 자리 표시자로 그대로 유지됩니다.

Bin 폴더

App_Code 폴더의 파일

Web.config 설정에 따라 어셈블리를 하나 이상 생성합니다.

참고:
App_Code 폴더의 정적 콘텐츠는 대상 폴더로 복사되지 않습니다.

Bin 폴더

.App_Code 폴더에 없는 .cs 또는 .vb 파일

종속 페이지 또는 리소스와 함께 컴파일됩니다.

Bin 폴더

Bin 폴더의 기존 .dll 파일

파일을 현재 상태 그대로 복사합니다.

Bin 폴더

리소스 파일(.resx)

App_LocalResources 또는 App_GlobalResources 폴더에 있는 .resx 파일에 대해 어셈블리 및 문화권 구조를 생성합니다.

Bin 폴더

App_Themes 폴더 및 하위 폴더의 파일

대상에 어셈블리를 생성하고 어셈블리를 가리키는 .compiled 파일을 생성합니다.

Bin

정적 파일(.htm, .html, .js, 그래픽 파일 등)

파일을 현재 상태 그대로 복사합니다.

소스와 동일한 구조

브라우저 정의 파일

파일을 현재 상태 그대로 복사합니다.

참고:
브라우저 정보는 컴퓨터 수준의 구성 파일로부터 상속되므로 대상 서버에서는 다르게 동작할 수 있습니다.

App_Browsers

종속 프로젝트

종속 프로젝트의 출력을 어셈블리로 생성합니다.

Bin 폴더

Web.config 파일

파일을 현재 상태 그대로 복사합니다.

소스와 동일한 구조

Global.asax 파일

어셈블리를 생성합니다.

Bin 폴더

다음 표에서는 다양한 파일 형식을 설명하고, 배포 및 업데이트를 위해 응용 프로그램을 미리 컴파일하는 경우 해당 파일에 수행되는 작업에 대해 설명합니다.

파일 형식

미리 컴파일 작업

출력 위치

.aspx, ascx, .master

코드 숨김 클래스 파일이 있는 파일에 대한 어셈블리와 어셈블리를 가리키는 .compiled 파일을 생성합니다. 이러한 파일의 단일 파일 버전은 있는 그대로 대상으로 복사됩니다.

어셈블리와 .compiled 파일은 Bin 폴더에 기록됩니다.

.asmx, .ashx

파일을 컴파일하지 않고 현재 상태 그대로 복사합니다.

소스와 동일한 구조

App_Code 폴더의 파일

Web.config 설정에 따라 어셈블리를 하나 이상 생성합니다.

참고:
App_Code 폴더의 정적 콘텐츠는 대상 폴더로 복사되지 않습니다.

Bin 폴더

App_Code 폴더에 없는 .cs 또는 .vb 파일

종속 페이지 또는 리소스와 함께 컴파일됩니다.

Bin 폴더

Bin 폴더의 기존 .dll 파일

파일을 현재 상태 그대로 복사합니다.

Bin 폴더

리소스 파일(.resx)

App_GlobalResources 폴더에 있는 .resx 파일에 대해 어셈블리 및 문화권 구조를 생성합니다.

App_LocalResources 폴더에 있는 .resx 파일의 경우 파일을 현재 상태 그대로 출력 위치의 App_LocalResources 폴더에 복사합니다.

어셈블리는 Bin 폴더에 저장됩니다.

App_Themes 폴더 및 하위 폴더의 파일

파일을 현재 상태 그대로 복사합니다.

소스와 동일한 구조

정적 파일(.htm, .html, .js, 그래픽 파일 등)

파일을 현재 상태 그대로 복사합니다.

소스와 동일한 구조

브라우저 정의 파일

파일을 현재 상태 그대로 복사합니다.

참고:
브라우저 정보는 컴퓨터 수준의 구성 파일로부터 상속되므로 대상 서버에서는 다르게 동작할 수 있습니다.

App_Browsers

종속 프로젝트

종속 프로젝트의 출력을 어셈블리로 생성합니다.

Bin 폴더

Web.config 파일

파일을 현재 상태 그대로 복사합니다.

소스와 동일한 구조

Global.asax 파일

어셈블리를 생성합니다.

Bin 폴더

.compiled 파일

ASP.NET 웹 응용 프로그램에 있는 실행 파일의 경우 컴파일러는 .compiled 파일 이름 확장명을 어셈블리 및 파일 이름에 추가합니다. 어셈블리 이름은 컴파일러에 의해 생성됩니다. .compiled 파일에는 실행 코드가 포함되지 않습니다. 대신 ASP.NET이 적합한 어셈블리를 찾기 위해 필요한 정보만 포함됩니다.

미리 컴파일된 응용 프로그램이 배포된 다음 ASP.NET은 Bin 폴더의 어셈블리를 사용하여 요청을 처리합니다. 미리 컴파일 출력에는 페이지를 대신하는 자리 표시자로 .aspx 또는 .asmx 파일이 포함됩니다. 위치 표시자 파일에는 코드가 포함되지 않습니다. 위치 표시자 파일은 특정 페이지 요청에 대해 ASP.NET을 호출하기 위해서만 존재하며 그에 따라 페이지에 대한 액세스를 제한하도록 파일 권한을 설정할 수 있습니다.

미리 컴파일된 웹 사이트 업데이트

미리 컴파일된 웹 사이트를 배포한 다음에는 사이트의 파일을 제한적으로 변경할 수 있습니다. 다음 표에서는 여러 변경 형식의 효과에 대해 설명합니다.

파일 형식

허용된 변경 사항(배포 전용)

허용된 변경 사항(배포 및 업데이트)

정적 파일(.htm, .html, .js, 그래픽 파일 등)

정적 파일은 변경, 제거 또는 추가할 수 있습니다. ASP.NET 웹 페이지가 변경 또는 제거된 페이지나 페이지 요소를 참조하면 오류가 발생할 수 있습니다.

정적 파일은 변경, 제거 또는 추가할 수 있습니다. ASP.NET 웹 페이지가 변경 또는 제거된 페이지나 페이지 요소를 참조하면 오류가 발생할 수 있습니다.

.aspx 파일

기존 페이지는 변경할 수 없습니다. .aspx 파일은 새로 추가할 수 없습니다.

사용자는 .aspx 파일의 레이아웃을 변경하고 이벤트 처리기가 없는 HTML 요소와 ASP.NET 서버 컨트롤과 같이 코드가 필요하지 않은 요소를 추가할 수 있습니다. 또한 첫 번째 요청 시에 컴파일되는 새로운 .aspx 파일을 추가할 수 있습니다.

.skin 파일

변경 내용과 새로운 .skin 파일은 무시됩니다.

변경 내용과 새로운 .skin 파일이 허용됩니다.

Web.config 파일

.aspx 파일의 컴파일에 영향을 주는 변경 내용이 허용됩니다. 디버그 및 일괄 처리에 대한 컴파일 옵션은 무시됩니다.

프로필 속성이나 공급자 요소에 대한 변경 내용은 허용되지 않습니다.

변경 내용은 컴파일러 설정, 신뢰 수준 및 전역화를 비롯한 사이트 또는 페이지 컴파일에 영향을 주지 않는 경우에만 허용됩니다. 컴파일에 영향을 주거나 컴파일된 페이지의 동작을 바꾸는 변경 내용은 무시되거나 오류를 발생시킬 수 있습니다. 다른 변경 내용은 허용됩니다.

브라우저 정의

변경 내용과 새로운 파일이 허용됩니다.

변경 내용과 새로운 파일이 허용됩니다.

리소스 파일(.resx)에서 컴파일된 어셈블리

전역 및 지역 리소스에 대해 새로운 리소스 어셈블리 파일을 추가할 수 있습니다.

전역 및 지역 리소스에 대해 새로운 리소스 어셈블리 파일을 추가할 수 있습니다.

코드 예제

방법: 배포를 위해 ASP.NET 웹 사이트 미리 컴파일

방법: 미리 컴파일된 웹 사이트를 위한 어셈블리에 서명

방법: 미리 컴파일된 웹 사이트에 사용할 버전 지정 어셈블리 만들기

방법: ASP.NET 컴파일 도구를 사용하여 고정된 이름 생성

방법: 게시된 웹 사이트 구성

맨 위로 이동

참고 항목

참조

ASP.NET 컴파일 도구(Aspnet_compiler.exe)

맨 위로 이동