출처 카페 > 데브나라 | 블루나라
원문 http://cafe.naver.com/devnara/3

일반적인 페이지 수명 주기 단계

 

1. 페이지 요청

    페이지 요청은 페이지 수명 주기가 시작되기 전에 발생합니다. 사용자가 페이지를 요청하면 ASP.NET에서는 페이지를 구문 분석하고 컴파일하여 페이지 주기를 시작할지 여부 또는 페이지를 실행하지 않고 캐시된 버전의 페이지를 응답으로 보낼 수 있는지 여부를 결정합니다.

 

2. 시작

    시작 단계에서는 RequestResponse 같은 페이지 속성이 설정됩니다. 이 단계에서 페이지는 요청이 다시 게시인지 아니면 새 요청인지를 확인하여 IsPostBack 속성을 설정합니다. 또한 시작 단계에서는 페이지의 UICulture 속성도 설정됩니다.

 

3. 페이지 초기화

    페이지 초기화 단계에서는 페이지의 컨트롤을 사용할 수 있으며 각 컨트롤의 UniqueID 속성이 설정됩니다. 또한 테마가 페이지에 적용됩니다. 현재 요청이 다시 게시인 경우에는 다시 게시 데이터가 아직 로드되지 않았고 컨트롤 속성 값이 뷰 상태의 값으로 복원되지 않았습니다.

 

4. 로드

    로드 단계에서는 현재 요청이 다시 게시인 경우 뷰 상태 및 컨트롤 상태에서 복구된 정보와 함께 컨트롤 속성이 로드됩니다.

 

5. 유효성 검사

    유효성 검사 단계에서는 모든 유효성 검사기 컨트롤의 Validate 메서드가 호출되어 각 유효성 검사기 컨트롤 및 페이지의 IsValid 속성을 설정합니다.

 

6. 다시 게시 이벤트 처리

    요청이 다시 게시인 경우 이벤트 처리기가 호출됩니다.

 

7. 렌더링

    렌더링 단계에서는 뷰 상태가 페이지에 저장된 다음, 페이지에서 각 컨트롤을 호출하여 페이지에 대한 Response 속성의 OutputStream에 렌더링된 출력을 적용합니다.

 

8. 언로드

    페이지가 완전히 렌더링되어 클라이언트에 전달되고 삭제할 준비가 되면 언로드가 호출됩니다. 이 단계에서는 ResponseRequest 같은 페이지 속성이 언로드되고 정리 작업이 수행됩니다.

 

 

수명 주기 이벤트

 

1. Page_PreInit

   IsPostBack 속성을 사용하여 페이지가 처음으로 처리되는 것인지 여부를 확인합니다.

   동적 컨트롤을 만들거나 다시 만듭니다.

   마스터 페이지를 동적으로 설정합니다.

   Theme 속성을 동적으로 설정합니다.

   프로필 속성 값을 읽거나 설정합니다.

 

2. Page_Init

   컨트롤 속성을 읽거나 초기화합니다.

 

3. Page_Load

    컨트롤 속성을 읽고 업데이트합니다.

 

4. Control events

    응용 프로그램별 처리 과정을 수행합니다.

    페이지에 유효성 검사기 컨트롤이 포함되어 있으면 처리를 수행하기 전에 페이지 및 각 유효성 검사기 컨트롤의 IsValid 속성을 확인합니다.

   특정 이벤트(예: Button 컨트롤의 Click 이벤트)를 처리합니다.

 

5. Page_PreRender

    페이지 내용을 최종 변경합니다.

 

6. Page_Unload

    다음을 포함하여 최종 정리 작업을 수행합니다.

    열려 있는 파일 및 데이터베이스 연결을 닫습니다.

    로깅 또는 기타 요청 관련 작업을 마칩니다.

 
 

일반적인 응용 프로그램 수명 주기

 

응용 프로그램의 수명 동안 ASP.NET은 Global.asax 파생 HttpApplication 인스턴스의 풀을 유지 관리합니다. 응용 프로그램이 HTTP 요청을 받을 때 ASP.NET 페이지 프레임워크는 이러한 인스턴스 중 하나를 할당하여 해당 요청을 처리합니다. 이러한 특정 HttpApplication 인스턴스는 할당된 요청의 전체 수명을 관리해야 하며 요청이 완료된 후에만 이 인스턴스를 다시 사용할 수 있습니다.

 

 

 

 

1. 사용자가 웹 서버에서 응용 프로그램 리소스를 요청합니다.

   브라우저에서 웹 서버(ASP.NET 응용 프로그램의 경우에는 대개 IIS)에 요청을 보내면 ASP.NET 응용 프로그램의 수명 주기가 시작됩니다. ASP.NET은 웹 서버에서 ISAPI 확장입니다. 웹 서버에서는 요청을 받으면 요청된 파일의 확장명을 검사하고 요청을 처리할 ISAPI 확장을 확인한 다음 적절한 ISAPI 확장에 요청을 전달합니다. ASP.NET에서는 .aspx, .ascx, .ashx, .asmx 등의 매핑된 파일 이름 확장명을 처리합니다.

 

2. ASP.NET에서 응용 프로그램에 대한 첫 번째 요청을 받습니다.

   ASP.NET에서 응용 프로그램 리소스에 대한 첫 번째 요청을 받으면 ApplicationManager라는 클래스에서 응용 프로그램 도메인을 만듭니다. 응용 프로그램 도메인을 사용하면 전역 변수에 대해 각 응용 프로그램을 격리시켜 개별적으로 언로드할 수 있습니다. 응용 프로그램 도메인 내에서는 HostingEnvironment라는 클래스 인스턴스가 만들어집니다. 이를 통해 응용 프로그램이 저장되어 있는 폴더의 이름 등과 같은 응용 프로그램 정보에 액세스할 수 있습니다.

 

3. 각 요청에 대해 ASP.NET 핵심 개체가 만들어집니다.

   응용 프로그램 도메인이 만들어지고 HostingEnvironment 개체가 인스턴스화된 후 ASP.NET에서는 HttpContext, HttpRequestHttpResponse 같은 핵심 개체를 만들고 초기화합니다. HttpContext 클래스에는 현재 응용 프로그램 요청과 관련된 특정 개체(예: HttpRequestHttpResponse 개체)가 포함되어 있습니다. HttpRequest 개체에는 쿠키와 브라우저 정보처럼 현재 요청에 대한 정보가 포함되어 있고 HttpResponse 개체에는 렌더링된 모든 출력과 쿠키처럼 클라이언트에 전달되는 응답이 포함되어 있습니다.

 

4. HttpApplication 개체가 요청에 할당됩니다.

   모든 핵심 응용 프로그램 개체가 초기화된 후 HttpApplication 클래스의 인스턴스를 만들어 응용 프로그램이 시작됩니다. 응용 프로그램에 Global.asax 파일이 있는 경우 ASP.NET에서는 HttpApplication 클래스에서 파생되는 Global.asax 클래스의 인스턴스를 만들고 이 파생 클래스를 사용하여 응용 프로그램을 나타냅니다.

 

5. HttpApplication 파이프라인에 의해 요청이 처리됩니다.

 

 

 

 

 

HttpApplication 이벤트 처리순서

 

1. 브라우저에서 보낸 정보를 검사하고 악의적인 태그가 포함되어 있는지 확인하여 요청의 유효성을 검사합니다. 자세한 내용은 ValidateRequest스크립트 악용 개요를 참조하십시오.

2. Web.config 파일의 UrlMappingsSection 섹션에 URL이 구성되어 있으면 URL 매핑을 수행합니다.

3. BeginRequest 이벤트를 발생시킵니다.

4. AuthenticateRequest 이벤트를 발생시킵니다.

5. PostAuthenticateRequest 이벤트를 발생시킵니다.

6. AuthorizeRequest 이벤트를 발생시킵니다.

7. PostAuthorizeRequest 이벤트를 발생시킵니다.

8. ResolveRequestCache 이벤트를 발생시킵니다.

9. PostResolveRequestCache 이벤트를 발생시킵니다.

10. 요청된 리소스의 파일 이름 확장명에 따라(응용 프로그램의 구성 파일에서 매핑됨) 요청을 처리할 IHttpHandler를 구현하는 클래스를 선택합니다. Page 클래스에서 파생된 개체(페이지)에 대한 요청이고 이 페이지를 컴파일해야 할 경우에는 ASP.NET에서 인스턴스를 만들기 전에 페이지를 컴파일합니다.

11. PostMapRequestHandler 이벤트를 발생시킵니다.

12. AcquireRequestState 이벤트를 발생시킵니다.

13.

PostAcquireRequestState 이벤트를 발생시킵니다.

14. PreRequestHandlerExecute 이벤트를 발생시킵니다.

15. 요청에 대해 적절한 IHttpHandler 클래스의 ProcessRequest 메서드 또는 비동기 버전의 BeginProcessRequest를 호출합니다. 예를 들어 페이지에 대한 요청인 경우 현재 페이지 인스턴스에서 요청을 처리합니다.

16. PostRequestHandlerExecute 이벤트를 발생시킵니다.

17. ReleaseRequestState 이벤트를 발생시킵니다.

18. PostReleaseRequestState 이벤트를 발생시킵니다.

19. Filter 속성이 정의되어 있는 경우 응답 필터링을 수행합니다.

20. UpdateRequestCache 이벤트를 발생시킵니다.

21. PostUpdateRequestCache 이벤트를 발생시킵니다.

22. EndRequest 이벤트를 발생시킵니다.

 

 

 

응용 프로그램 수명 주기 동안 사용되는 일부 이벤트와 메서드

 

1.Application_Start

   ASP.NET 응용 프로그램의 리소스(예: 페이지)가 처음으로 요청되면 호출됩니다. Application_Start 메서드는 응용 프로그램 수명 주기 동안 한 번만 호출됩니다. 이 메서드를 사용하면 데이터를 캐시에 로드하고 정적 값을 초기화하는 등 시작 작업을 수행할 수 있습니다.

  응용 프로그램을 시작하는 동안에는 정적 데이터만 설정해야 합니다. 인스턴스 데이터는 HttpApplication 클래스의 첫 번째 인스턴스에서만 사용할 수 있으므로 설정하지 마십시오.

 

2. Application_ event

   이 항목의 앞부분에 나오는 응용 프로그램 수명 주기 표에 있는 것처럼 응용 프로그램 수명 주기에서 적절한 시점에 발생합니다.

   Application_Error는 응용 프로그램 수명 주기의 모든 단계에서 발생할 수 있습니다.

   요청은 단락(short-circuit)될 수 있으므로 모든 요청에서 항상 발생하는 유일한 이벤트는 Application_EndRequest입니다. 예를 들어 두 개의 모듈에서 Application_BeginRequest 이벤트를 처리하는 경우 첫 번째 모듈에서 예외를 throw하면 두 번째 모듈에 대해 Application_BeginRequest 이벤트가 호출되지 않습니다. 그러나 응용 프로그램에서 리소스를 정리할 수 있도록 Application_EndRequest 메서드가 항상 호출됩니다.

 

3. HttpApplication.Init

   모든 모듈이 만들어진 후에 HttpApplication 클래스의 모든 인스턴스에 대해 한 번 호출됩니다.

 

4. Dispose

   응용 프로그램 인스턴스가 소멸되기 전에 호출됩니다. 이 메서드를 사용하면 관리되지 않는 리소스를 수동으로 해제할 수 있습니다. 자세한 내용은 관리되지 않는 리소스 정리를 참조하십시오.

 

5. Application_End

   응용 프로그램 실행 주기에서 응용 프로그램이 언로드되기 전에 한 번 호출됩니다.

 

 

ASP.NET 최상위 항목이 컴파일되는 순서

 

1. App_GlobalResources

    응용 프로그램의 전역 리소스가 컴파일되고 리소스 어셈블리가 빌드됩니다. 응용 프로그램의 Bin 폴더에 있는 모든 어셈블리가 리소스 어셈블리에 연결됩니다.

2. App_WebResources

    웹 서비스의 프록시 형식이 생성되고 컴파일됩니다. 그 결과로 생성되는 웹 참조 어셈블리는 리소스 어셈블리에 연결됩니다.

3. Web.config 파일에 정의된 프로필 속성

    응용 프로그램의 Web.config 파일에 프로필 속성이 정의되어 있는 경우 프로필 개체를 포함하는 어셈블리가 생성됩니다.

4. App_Code

    소스 코드 파일이 빌드되고 하나 이상의 어셈블리가 생성됩니다. 코드 어셈블리 및 프로필 어셈블리는 모두 리소스 및 웹 참조 어셈블리에 연결됩니다.

5. Global.asax

    응용 프로그램 개체가 컴파일되고 앞서 생성된 모든 어셈블리에 연결됩니다.

 

 

ASP.NET 폴더 및 항목이 컴파일되는 순서

 

1. App_LocalResources

요청된 항목을 포함하는 폴더에 App_LocalResources 폴더가 들어 있는 경우 로컬 리소스 폴더의 내용이 컴파일되고 전역 리소스 어셈블리에 연결됩니다.

2. 개별 웹 페이지(.aspx 파일), 사용자 정의 컨트롤(.ascx 파일), HTTP 처리기(.ashx 파일) 및 HTTP 모듈(.asmx 파일)

    필요에 따라 컴파일되고 로컬 리소스 어셈블리 및 최상위 어셈블리에 연결됩니다.

    페이지에서 참조하는 개별 테마의 스킨 파일, 마스터 페이지 및 기타 소스 코드 파일은 참조하는 페이지가 컴파일된 다음 컴파일됩니다.

3. 테마, 마스터 페이지, 기타 리소스 파일

 

 

응용 프로그램 다시 시작

 

1. 응용 프로그램의 Bin 폴더에서 어셈블리를 추가, 수정 또는 삭제

2. App_GlobalResources 또는 App_LocalResources 폴더에서 지역화 리소스를 추가, 수정 또는 삭제

3. 응용 프로그램의 Global.asax 파일을 추가, 수정 또는 삭제

4. App_Code 디렉터리에서 소스 코드 파일을 추가, 수정 또는 삭제

5. 프로필 구성을 추가, 수정 또는 삭제

6. App_WebReferences 디렉터리에서 웹 서비스 참조를 추가, 수정 또는 삭제

7. 응용 프로그램의 Web.config 파일을 추가, 수정 또는 삭제

+ Recent posts