ASP.NET 페이지 수명 주기 개요
2016. 6. 30. 13:53ㆍETC Programmings
반응형
ASP.NET 페이지가 실행되면 이 페이지는 정해진 처리 단계를 수행하는 수명 주기를 거치는데 이런 주기를 잘 이용해야 페이지가 올바르게 동작하는 것을 기대할 수 있다. Control들의 수명 주기는 페이지의 수명 주기를 기반으로 하고 페이지는 Control에 대해서 많은 이벤트들을 발생시킨다.
일반적인 페이지 수명 주기 단계
- Page Request : 페이지 요청
수명 주기가 시작하기 전 단계. 사용자의 요청을 통해서 페이지를 컴파일 하고 페이지 주기를 시작할 지의 여부를 결정한다. (시작하지 않아도 되는 경우는 캐시된 페이지가 있는 경우)
- Start : 시작
Request, Response 와 같은 속성을 설정하고 페이지 요청이 PostBack 인지를 확인하여 IsPostBack 속성, UICulture 속성도 설정한다.
- Initialization : 페이지 초기화
페이지 Control들을 사용할 수 있으며, 각 Control의 UniqueID가 설정된다. 요청이 PostBack 인 경우에는 PostBack 데이터는 아직 로드 이전이다. ViewState 로부터의 값들이 아직 Control 속성에 복원되지 않은 상태이다.
- Load : 로드
로드가 되는 동안 PostBack인 경우에 Control 속성값들이 ViewState 와 ControlState 로부터 데이터가 복원된다.
- Postback event handling : 포스트백 이벤트 처리, 유효성 검사
요청이 PostBack인 경우에 Control 이벤트 핸들러가 호출이 된다. 그 이후 모든 Control의 Validate 메소드가 호출이 되고, 모든 Page와 Control 에 있는 IsValid 라는 속성 값이 설정 된다.
- Rendering : 렌더링
렌더링 전에 페이지와 Control을 위한 ViewState 가 저장이 된다. 모든 Control마다 Render 메소드가 수행이 되고 OutputStream을 통해서 Response를 작성한다.
- Unload : 언로드
페이지가 완전히 렌더링 되어 클라이언트까지 전달되면 언로드가 호출되고 Response 와 Request 와 같은 속성값을 완전히 정리한다.
수명 주기 이벤트
페이지의 수명 주기 단계마다 사용자가 작성한 코드를 실행 할 수 있도록 처리할 수 있는 이벤트를 발생시키는데 아래 각각의 이벤트 들이 있으니 알아 두는 것이 좋다.
- PreInit
IsPostBack 속성을 확인, 동적 Control을 만들거나 재생성, 마스터 페이지 동적 설정, 테마 속성 동적 설정, 프로필 속성 값을 읽거나 설정. 이 단계에서 Control의 속성을 설정하면 덮어쓰여지니 설정하지 않도록 한다.
- Init
모든 Control을 초기화 하고 모든 스킨을 적용한 이후에 발생, 이 이벤트를 활용해서 Control의 속성을 읽거나 초기화 할 수 있다.
- InitComplete
Page 개체를 통해서 발생하고 모든 초기화 작업이 완료되어야 처리 할 수 있음.
- PreLoad
Load 하기 이전에 페이지나 Control을 처리해야 하는 경우에 사용. 이 이벤트 호출 이후에 페이지와 모든 Control에 대한 ViewState 를 로드하고 Request 인스턴스에 포함된 모든 PostBack 데이터를 처리함.
- Load
페이지에 대해 OnLoad 이벤트 메서드를 호출하고 각각의 Control에 대해서 동일한 과정을 반복한다. OnLoad 를 통해서 데이터베이스 연결, Control 속성을 설정할 수 있음.
- Control Events
각각의 Control마다 TextChanged, OnClick 과 같은 이벤트를 처리 한다.
- LoadComplete
모든 Control을 로드 한 이후에 발생하는 이벤트
- PreRender
DataSourceId 속성이 설정되어있는 데이터가 바인딩 된 Control들에 대해 각각 DataBind 메서드를 호출함. 각각의 Control마다 PreRender 이벤트가 발생.
- SaveStateComplete
이 이벤트가 발생하기 전에 모든 페이지와 Control에 대해서 ViewState를 저장.
- Render
이벤트에 해당하지는 않고 Page 와 각 Control마다 Render 메소드를 호출.
- Unload
Control에 사용하면 각각의 데이터 베이스 연결을 닫는 등 Control의 최종 정리 작업을 수행할 수 있다.
페이지 수명 주기에 대한 추가 고려 사항
Init, Load 순서가 컨트롤에 대해서 각각 재귀적으로 발생하나 순서가 반대이다. 실제 한 페이지에 여러 컨트롤들이 어떻게 동작하는지를 살펴보았다.
반응형