ASP.NET 웹 사이트의 공유 코드 폴더
업데이트: 2007년 11월
페이지 간에 공유할 코드를 웹 응용 프로그램에 포함하려면 웹 응용 프로그램의 루트 아래에 있는 특수 폴더인 Bin 폴더 및 App_Code 폴더 중 하나에 코드를 보관합니다. 이러한 폴더를 만들고 특정 형식의 파일을 저장하면 ASP.NET에서 해당 파일을 특별한 방식으로 처리합니다.
Bin 폴더
컴파일된 어셈블리를 Bin 폴더에 저장할 수 있으며, 웹 응용 프로그램의 다른 코드( 예: 페이지의 코드)에서 자동으로 이 어셈블리를 참조합니다. 일반적인 예로는 사용자 지정 클래스의 컴파일된 코드를 들 수 있습니다. 웹 응용 프로그램의 Bin 폴더에 컴파일된 어셈블리를 복사하면 모든 페이지에서 해당 클래스를 사용할 수 있습니다.
Bin 폴더의 어셈블리를 등록할 필요는 없습니다. Bin 폴더에 .dll 파일을 두기만 하면 ASP.NET에서 자동으로 인식합니다. .dll 파일을 변경하여 새로운 버전의 파일을 Bin 폴더에 기록하면 ASP.NET은 이러한 업데이트를 감지하고 이 때부터 새로운 페이지 요청에 대해 새로운 버전의 .dll 파일을 사용합니다.
Bin 폴더 보안
Bin 폴더에 컴파일된 어셈블리를 둘 경우 보안 위험이 발생할 수 있습니다. 사용자가 직접 코드를 작성하여 컴파일한 경우 해당 코드의 역할을 알 수 있습니다. 하지만 Bin 폴더에 있는 컴파일된 코드는 다른 실행 코드와 같이 취급해야 합니다. 테스트를 통해 역할을 확실하게 이해하지 못한 컴파일된 코드는 주의해야 합니다.
Bin 폴더에 컴파일된 코드를 둘 경우에는 다음과 같은 보안 요소를 고려해야 합니다.
Bin 폴더에 있는 어셈블리의 범위는 현재 응용 프로그램으로 제한됩니다. 따라서 현재 웹 응용 프로그램 외부에 있는 리소스에 액세스하거나 코드를 실행할 수 없습니다.
런타임에 어셈블리의 액세스 수준은 로컬 컴퓨터에 지정된 신뢰 수준에 따라 설정됩니다. 자세한 내용은 ASP.NET 신뢰 수준 및 정책 파일을 참조하십시오.
Visual Studio와 같은 디자이너에서 작업하는 경우 Bin 폴더의 코드는 런타임에서와 다른 컨텍스트로 실행됩니다. 예를 들어 코드가 완전 신뢰 수준으로 실행될 수 있습니다.
App_Code 폴더
App_Code 폴더에 소스 코드를 저장하여 런타임에 자동으로 컴파일되도록 할 수 있습니다. 컴파일된 어셈블리는 웹 응용 프로그램의 다른 모든 코드에서 액세스할 수 있습니다. 따라서 App_Code 폴더는 Bin 폴더와 매우 유사하게 사용되지만, 컴파일된 코드 대신 소스 코드를 저장할 수 있다는 점이 다릅니다. ASP.NET 웹 응용 프로그램에서는 App_Code 폴더와 이 폴더의 특별한 상태를 통해, 사용자 지정 클래스와 기타 소스 코드 전용 파일을 만든 다음 개별적으로 컴파일하지 않아도 웹 응용 프로그램에서 사용할 수 있습니다.
App_Code 폴더에는 .vb 확장명, .cs 확장명 등의 확장명을 가진 일반적인 클래스 파일로 작성된 소스 코드 파일이 포함되지만, 특정 프로그래밍 언어로 명시적으로 작성되지 않은 파일도 포함될 수 있습니다. 이러한 예로는 .wsdl(Web Service Description Language) 파일과 XML 스키마 파일(.xsd)을 들 수 있습니다. ASP.NET에서는 이러한 파일을 어셈블리로 컴파일할 수 있습니다.
App_Code 폴더에는 필요한 만큼 많은 파일과 하위 폴더를 포함할 수 있습니다. 사용자에게 편리한 어떠한 방식으로 소스 코드를 구성하더라도, ASP.NET에서는 모든 코드를 단일 어셈블리로 컴파일하여 웹 응용 프로그램의 다른 코드에서 이 어셈블리에 액세스할 수 있습니다.
참고: |
---|
사용자 정의 컨트롤은 App_Code 폴더에 저장할 수 없습니다. 여기에는 단일 파일 사용자 정의 컨트롤과 코드 숨김 모델을 사용하는 사용자 정의 컨트롤이 모두 해당합니다. App_Code 디렉터리에 사용자 정의 컨트롤을 추가하면 필수 시퀀스를 벗어나서 사용자 정의 컨트롤의 코드를 컴파일해야 하므로 원하는 결과를 얻을 수 없습니다. 사용자 정의 컨트롤은 App_Code 폴더에 있을 필요가 없습니다. 이 컨트롤은 응용 프로그램에서 위치와 상관없이 모든 페이지에 사용할 수 있습니다. |
App_Code 폴더의 프로그래밍 언어 유추
App_Code 폴더에는 포함된 파일이 특정 프로그래밍 언어로 작성되었는지 명시적으로 표시되어 있지 않습니다. 대신 ASP.NET은 App_Code 폴더에 포함된 파일에 따라 실행할 컴파일러를 유추합니다. 예를 들어 App_Code 폴더에 .vb 파일이 있으면 ASP.NET은 Visual Basic 컴파일러를 사용하고 .cs 파일이 있으면 C# 컴파일러를 사용합니다.
App_Code 폴더에 .wsdl 파일과 같이 프로그래밍 언어가 확실하지 않은 파일들만 포함된 경우 ASP.NET은 웹 응용 프로그램 또는 시스템 구성 파일의 compilation 요소 설정에 따라 웹 응용 프로그램의 기본 컴파일러를 사용합니다.
App_Code 폴더의 여러 프로그래밍 언어
App_Code 폴더의 소스 코드는 단일 어셈블리로 컴파일되므로 App_Code 폴더의 모든 파일은 동일한 프로그래밍 언어로 작성되어야 합니다. 예를 들어 App_Code 폴더에는 Visual Basic 및 C#으로 작성된 소스 코드가 동시에 포함될 수 없습니다.
하지만 App_Code 폴더의 하위 폴더를 개별적인 컴파일 단위로 취급하도록 웹 응용 프로그램을 구성할 수 있습니다. 그러면 여러 프로그래밍 언어로 작성된 소스 코드를 각 폴더에 포함할 수 있습니다. Web.config 파일의 compilation 요소에 codeSubDirectories 요소를 만들고 하위 폴더에 대한 참조를 추가하여 이러한 구성을 지정할 수 있습니다. 다음 예제에서는 VBCode 및 CSCode로 명명된 하위 폴더를 개별 어셈블리로 컴파일되도록 구성하는 방법을 보여 줍니다.
<compilation debug="false">
<codeSubDirectories>
<add directoryName="VBCode" />
<add directoryName="CSCode" />
</codeSubDirectories>
</compilation>
VBCode 및 CSCode 하위 폴더에 대한 참조에는 해당 하위 폴더의 프로그래밍 언어에 대한 어떤 정보도 포함할 필요가 없습니다. App_Code 폴더에서와 같이 ASP.NET은 하위 폴더의 파일에 따라 사용할 컴파일러를 유추합니다.
App_Code 폴더 보안
App_Code 폴더의 코드에 대한 보안 문제는 Bin 폴더의 코드에 대한 보안 문제와 본질적으로 동일합니다. 코드는 런타임에 어셈블리로 컴파일됩니다. App_Code 폴더에서는 파일의 소스 코드를 확인할 수 있기 때문에 보안 위험을 어느 정도 줄일 수 있습니다. 하지만 사용자가 코드를 완전히 이해하지 못할 경우에는 여전히 보안 위험이 존재할 수 있습니다. 따라서 App_Code 폴더에 있는 소스 코드를 동일 소스로부터 컴파일된 코드와 동일하게 취급해야 합니다.