본문 바로가기

ETC Programmings

ASP.NET 페이지 수명 주기 개요

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

ASP.NET 페이지가 실행되면 이 페이지는 정해진 처리 단계를 수행하는 수명 주기를 거치는데 이런 주기를 잘 이용해야 페이지가 올바르게 동작하는 것을 기대할 수 있다. Control들의 수명 주기는 페이지의 수명 주기를 기반으로 하고 페이지는 Control에 대해서 많은 이벤트들을 발생시킨다.

 

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

 

  1. Page Request : 페이지 요청
    수명 주기가 시작하기 전 단계. 사용자의 요청을 통해서 페이지를 컴파일 하고 페이지 주기를 시작할 지의 여부를 결정한다. (시작하지 않아도 되는 경우는 캐시된 페이지가 있는 경우)
  2. Start : 시작
    Request, Response 와 같은 속성을 설정하고 페이지 요청이 PostBack 인지를 확인하여 IsPostBack 속성, UICulture 속성도 설정한다.
  3. Initialization : 페이지 초기화
    페이지 Control들을 사용할 수 있으며, 각 Control의 UniqueID가 설정된다. 요청이 PostBack 인 경우에는 PostBack 데이터는 아직 로드 이전이다. ViewState 로부터의 값들이 아직 Control 속성에 복원되지 않은 상태이다.
  4. Load : 로드
    로드가 되는 동안 PostBack인 경우에 Control 속성값들이 ViewState 와 ControlState 로부터 데이터가 복원된다.
  5. Postback event handling : 포스트백 이벤트 처리, 유효성 검사
    요청이 PostBack인 경우에 Control 이벤트 핸들러가 호출이 된다. 그 이후 모든 Control의 Validate 메소드가 호출이 되고, 모든 Page와 Control 에 있는 IsValid 라는 속성 값이 설정 된다.
  6. Rendering : 렌더링
    렌더링 전에 페이지와 Control을 위한 ViewState 가 저장이 된다. 모든 Control마다 Render 메소드가 수행이 되고 OutputStream을 통해서 Response를 작성한다.
  7. Unload : 언로드
    페이지가 완전히 렌더링 되어 클라이언트까지 전달되면 언로드가 호출되고 Response 와 Request 와 같은 속성값을 완전히 정리한다.

 

 

수명 주기 이벤트

 

페이지의 수명 주기 단계마다 사용자가 작성한 코드를 실행 할 수 있도록 처리할 수 있는 이벤트를 발생시키는데 아래 각각의 이벤트 들이 있으니 알아 두는 것이 좋다.

  1. PreInit
    IsPostBack 속성을 확인, 동적 Control을 만들거나 재생성, 마스터 페이지 동적 설정, 테마 속성 동적 설정, 프로필 속성 값을 읽거나 설정. 이 단계에서 Control의 속성을 설정하면 덮어쓰여지니 설정하지 않도록 한다.
  2. Init
    모든 Control을 초기화 하고 모든 스킨을 적용한 이후에 발생, 이 이벤트를 활용해서 Control의 속성을 읽거나 초기화 할 수 있다.
  3. InitComplete
    Page 개체를 통해서 발생하고 모든 초기화 작업이 완료되어야 처리 할 수 있음.
  4. PreLoad
    Load 하기 이전에 페이지나 Control을 처리해야 하는 경우에 사용. 이 이벤트 호출 이후에 페이지와 모든 Control에 대한 ViewState 를 로드하고 Request 인스턴스에 포함된 모든 PostBack 데이터를 처리함.
  5. Load
    페이지에 대해 OnLoad 이벤트 메서드를 호출하고 각각의 Control에 대해서 동일한 과정을 반복한다. OnLoad 를 통해서 데이터베이스 연결, Control 속성을 설정할 수 있음.
  6. Control Events
    각각의 Control마다 TextChanged, OnClick 과 같은 이벤트를 처리 한다.
  7. LoadComplete
    모든 Control을 로드 한 이후에 발생하는 이벤트
  8. PreRender
    DataSourceId 속성이 설정되어있는 데이터가 바인딩 된 Control들에 대해 각각 DataBind 메서드를 호출함. 각각의 Control마다 PreRender 이벤트가 발생.
  9. SaveStateComplete
    이 이벤트가 발생하기 전에 모든 페이지와 Control에 대해서 ViewState를 저장.
  10. Render
    이벤트에 해당하지는 않고 Page 와 각 Control마다 Render 메소드를 호출.
  11. Unload
    Control에 사용하면 각각의 데이터 베이스 연결을 닫는 등 Control의 최종 정리 작업을 수행할 수 있다.

 

 

 

 

페이지 수명 주기에 대한 추가 고려 사항

 

Init, Load 순서가 컨트롤에 대해서 각각 재귀적으로 발생하나 순서가 반대이다. 실제 한 페이지에 여러 컨트롤들이 어떻게 동작하는지를 살펴보았다.