INFO: ASP.NET의 응용 프로그램 인스턴스, 응용 프로그램 이벤트 및 응용 프로그램 상태

기술 자료 번역 기술 자료 번역
기술 자료: 312607 - 이 문서가 적용되는 제품 보기.
이 문서는 이전에 다음 ID로 출판되었음: KR312607
모두 확대 | 모두 축소

이 페이지에서

요약

ASP.NET HttpApplication 개체는 여러 복잡한 개념을 숨겨서 프로그래밍 모델을 단순화합니다. 이 문서에서는 이러한 복잡한 개념 중 일부를 설명하고 ASP.NET에서 기존 Microsoft Active Server Pages(ASP) Application 개체와의 호환성 문제를 처리하는 방법도 설명합니다.

이 문서에서 다룰 내용은 다음과 같습니다.

추가 정보

응용 프로그램 클래스 및 응용 프로그램 인스턴스

응용 프로그램 클래스는 Global.asax 파일에서 정의됩니다. Global.asax의 코드는 System.Web.HttpApplication에서 파생되는 새 클래스를 정의합니다. Global.asax 파일이 없으면 기본 클래스인 HttpApplication이 응용 프로그램 클래스로 사용됩니다.

ASP.NET 런타임은 요청을 동시에 처리하는 데 필요한 수만큼 응용 프로그램 클래스 인스턴스를 만듭니다. 대부분의 경우, 이 수는 스레드 수로 제한되며 하드웨어, 서버 로드, 구성 등에 따라 1과 100 사이에 있습니다. 대부분의 요청은 응용 프로그램 인스턴스를 다시 사용하며 로드가 줄어들면 사용 가능한 응용 프로그램 인스턴스 목록이 계속 업데이트됩니다. 응용 프로그램 인스턴스는 스레드 안전 방식으로 사용됩니다. 즉, 한 번에 하나의 요청에만 사용됩니다. 이것이 의미하는 바는 다음과 같습니다.
  • 응용 프로그램 클래스의 비정적 멤버에 액세스할 때는 잠금에 대해 걱정하지 않아도 됩니다.
  • 응용 프로그램 코드는 응용 프로그램 클래스의 비정적 멤버에서 각 요청 데이터를 저장할 수 있습니다. 단, EndRequest 이벤트는 요청을 장기간 저장하므로 이 이벤트 이후에는 저장되지 않습니다.
응용 프로그램 클래스를 비롯한 모든 클래스의 정적 멤버는 스레드 안전 방식이 아니기 때문에 사용자 코드를 작성할 때는 정적 멤버 액세스를 위한 적절한 잠금을 제공해야 합니다. 이는 응용 프로그램 클래스에 추가되는 모든 정적 멤버에 적용됩니다.

다음 지침을 사용하여 현재 요청과 연관된 응용 프로그램 인스턴스에 액세스하십시오.
  • Global.asax에서 this 또는 Me 개체를 사용합니다.
  • 페이지에서 모든 페이지는 강력하게 형식화된 ApplicationInstance 속성을 포함합니다.
  • HttpContext 개체에서 HttpContext.ApplicationInstance 속성(HttpApplication으로 입력함)을 사용합니다.
참고: Application은 기존 ASP의 응용 프로그램 상태 사전을 나타내므로 ASP.NET에서는 현재 요청을 처리하는 응용 프로그램 인스턴스를 나타내는 속성 이름으로 Application이 아닌 ApplicationInstance을 사용합니다.

응용 프로그램 이벤트

하나의 요청은 일련의 응용 프로그램 이벤트와 ASP.NET에서 자체 구현하는 절차를 거치게 됩니다. 다음 이벤트들이 순서대로 실행됩니다.
  1. BeginRequest 이벤트AuthenticateRequest 이벤트DefaultAuthentication 내부 이벤트AuthorizeRequest 이벤트ResolveRequestCache 이벤트"처리기를 매핑"하는 내부 단계(컴파일될 때 페이지 인스턴스가 만들어짐)AcquireRequestState 이벤트PreRequestHandlerExecute 이벤트"처리기를 실행"하는 내부 단계(페이지 코드가 실행될 때)PostRequestHandlerExecute 이벤트ReleaseRequestState 이벤트응답을 필터링하는 내부 단계UpdateRequestCache 이벤트EndRequest 이벤트
  2. AuthenticateRequest 이벤트DefaultAuthentication 내부 이벤트AuthorizeRequest 이벤트ResolveRequestCache 이벤트"처리기를 매핑"하는 내부 단계(컴파일될 때 페이지 인스턴스가 만들어짐)AcquireRequestState 이벤트PreRequestHandlerExecute 이벤트"처리기를 실행"하는 내부 단계(페이지 코드가 실행될 때)PostRequestHandlerExecute 이벤트ReleaseRequestState 이벤트응답을 필터링하는 내부 단계UpdateRequestCache 이벤트EndRequest 이벤트
  3. DefaultAuthentication 내부 이벤트AuthorizeRequest 이벤트ResolveRequestCache 이벤트"처리기를 매핑"하는 내부 단계(컴파일될 때 페이지 인스턴스가 만들어짐)AcquireRequestState 이벤트PreRequestHandlerExecute 이벤트"처리기를 실행"하는 내부 단계(페이지 코드가 실행될 때)PostRequestHandlerExecute 이벤트ReleaseRequestState 이벤트응답을 필터링하는 내부 단계UpdateRequestCache 이벤트EndRequest 이벤트
  4. AuthorizeRequest 이벤트ResolveRequestCache 이벤트"처리기를 매핑"하는 내부 단계(컴파일될 때 페이지 인스턴스가 만들어짐)AcquireRequestState 이벤트PreRequestHandlerExecute 이벤트"처리기를 실행"하는 내부 단계(페이지 코드가 실행될 때)PostRequestHandlerExecute 이벤트ReleaseRequestState 이벤트응답을 필터링하는 내부 단계UpdateRequestCache 이벤트EndRequest 이벤트
  5. ResolveRequestCache 이벤트"처리기를 매핑"하는 내부 단계(컴파일될 때 페이지 인스턴스가 만들어짐)AcquireRequestState 이벤트PreRequestHandlerExecute 이벤트"처리기를 실행"하는 내부 단계(페이지 코드가 실행될 때)PostRequestHandlerExecute 이벤트ReleaseRequestState 이벤트응답을 필터링하는 내부 단계UpdateRequestCache 이벤트EndRequest 이벤트
  6. "처리기를 매핑"하는 내부 단계(컴파일될 때 페이지 인스턴스가 만들어짐)AcquireRequestState 이벤트PreRequestHandlerExecute 이벤트"처리기를 실행"하는 내부 단계(페이지 코드가 실행될 때)PostRequestHandlerExecute 이벤트ReleaseRequestState 이벤트응답을 필터링하는 내부 단계UpdateRequestCache 이벤트EndRequest 이벤트
  7. AcquireRequestState 이벤트PreRequestHandlerExecute 이벤트"처리기를 실행"하는 내부 단계(페이지 코드가 실행될 때)PostRequestHandlerExecute 이벤트ReleaseRequestState 이벤트응답을 필터링하는 내부 단계UpdateRequestCache 이벤트EndRequest 이벤트
  8. PreRequestHandlerExecute 이벤트"처리기를 실행"하는 내부 단계(페이지 코드가 실행될 때)PostRequestHandlerExecute 이벤트ReleaseRequestState 이벤트응답을 필터링하는 내부 단계UpdateRequestCache 이벤트EndRequest 이벤트
  9. "처리기를 실행"하는 내부 단계(페이지 코드가 실행될 때)PostRequestHandlerExecute 이벤트ReleaseRequestState 이벤트응답을 필터링하는 내부 단계UpdateRequestCache 이벤트EndRequest 이벤트
  10. PostRequestHandlerExecute 이벤트ReleaseRequestState 이벤트응답을 필터링하는 내부 단계UpdateRequestCache 이벤트EndRequest 이벤트
  11. ReleaseRequestState 이벤트응답을 필터링하는 내부 단계UpdateRequestCache 이벤트EndRequest 이벤트
  12. 응답을 필터링하는 내부 단계UpdateRequestCache 이벤트EndRequest 이벤트
  13. UpdateRequestCache 이벤트EndRequest 이벤트
  14. EndRequest 이벤트
다음은 이러한 이벤트를 처리하는 항목들입니다.
  • 내부 ASP.NET 페이지 프레임워크. 예를 들어, 이전 목록의 6, 9, 12단계를 처리합니다.
  • 해당 응용 프로그램용으로 구성된 HTTP 모듈. HTTP 모듈의 기본 목록은 Machine.config 파일에서 정의됩니다.
  • Global.asax 내의 코드. 이 코드는 Application_[On]EventName 메서드를 통해 후킹되거나 다른 처리기 이름으로 이벤트 처리기를 추가할 때 명시적으로 후킹됩니다.
각 이벤트마다 동기화 및 비동기화 구독자가 있을 수 있으며 비동기화 구독자가 먼저 실행됩니다. 항상 모든 이벤트가 실행되는 것은 아니며 항상 실행되는 이벤트는 EndRequest뿐입니다. 따라서 EndRequest 이벤트에서 모든 요청 후 정리 작업을 수행해야 합니다.

참고: 일반적으로 응용 프로그램 인스턴스가 응답을 완료한 후, 즉 EndRequest 이벤트가 실행되고 나서 실제 응답이 클라이언트에게 보내집니다.

Application_OnStart 및 Application_OnEnd

ASP.NET에서는 기존 ASP와의 호환성을 위해 고유의 Application_OnStartApplication_OnEnd "이벤트"를 도입했습니다. 이러한 "이벤트"는 모든 응용 프로그램 인스턴스에 대해 실행되는 것이 아니라 응용 프로그램 작동 기간 중 한 번만 실행됩니다. 따라서 이러한 메서드의 비정적 멤버를 변경하면 해당 변경 사항이 모든 인스턴스가 아닌 하나의 응용 프로그램 인스턴스에만 적용됩니다. 생성자에서 또는 Init 메서드를 재정의하여 단일 응용 프로그램 인스턴스를 초기화할 수 있습니다.

Application_OnStart는 응용 프로그램 클래스의 클래스 생성기와 논리적으로 동일하지만 하나의 장점을 더 제공합니다. 즉, 코드가 응용 프로그램에 대한 첫번째 요청에서 HttpContext에 액세스할 수 있습니다.

응용 프로그램 상태

응용 프로그램 상태는 런타임에 바인딩된 개체의 글로벌 사전으로, 기존 ASP에서 Microsoft Visaul Basic Scripting Edition(VBScript)에 없는 글로벌 변수를 보완할 목적으로 도입되었습니다. ASP.NET에서는 다음 중 하나를 통해 응용 프로그램 상태에 액세스할 수 있습니다.
  • Application 속성(HttpApplicationPage 클래스에서 정의됨)
  • HttpContext.Application
ASP.NET에서는 기존 ASP와의 호환성을 위하여 응용 프로그램 상태를 도입했기 때문에 기존 응용 프로그램을 ASP.NET에 쉽게 마이그레이션할 수 있습니다. Application 개체가 아닌 응용 프로그램 클래스의 정적 멤버에서 데이터를 저장하는 것이 좋습니다. 이렇게 하면 Application 사전의 항목에 액세스하는 것보다 빠르게 정적 변수에 액세스할 수 있기 때문에 성능이 향상됩니다.

Microsoft Visual C# .NET과 Microsoft Visual Basic .NET의 페이지에서 정적 응용 프로그램 멤버에 액세스하려면 Global.asax에 있는 ClassName 특성을 사용하여 응용 프로그램 클래스의 이름을 지정해야 합니다. 예를 들면 다음과 같습니다.
<%@ Application Language="C# | VB" ClassName="MyClass" %>
Global.asax 파일에서 정적 멤버의 이름이 MyStaticMember이면 MyClass.MyStaticMember를 사용하여 페이지에서 이 정적 멤버에 액세스할 수 있습니다.

속성

기술 자료: 312607 - 마지막 검토: 2002년 4월 1일 월요일 - 수정: 1.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft ASP .NET(.NET Framework에 포함)
키워드:?
kbgrpdsasp kbhttpruntime kbinfo kbstate KB312607
더 이상 지원되지 않는 제품의 KB 내용에 대한 고지 사항
이 문서에서는 Microsoft에서 더 이상 지원하지 않는 제품에 대해 설명합니다. 따라서 이 문서는 "있는 그대로" 제공되며 업데이트되지 않습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com