실행주기(PageCycle)

앞으로 여러회에 걸쳐 ASP.NET 기초에 대해 알아보겠습니다.
그 첫번째로 페이지의 실행주기(PageCycle) 입니다. ASP.NET 프로그래밍을 하다보면 원치않는 결과가 종종 나올때가 있습니다. 이것은 페이지의 실행주기의 잘못된 이해에게 비롯되는데 초급개발자가 중급으로 넘어가기 위해서는 반드시 이해하고 있어야 합니다.

ASP.NET에서 페이지는 System.Web.UI.Page 클래스 상속받은 객체입니다. 클라이언트 특정 페이지를 요구할 때마다 페이지 객체는 생성에서 소멸까지 일련의 과정을 거칩니다. System.Web.UI.Page  객체의 처리 내부 과정은 더 복잡한 과정을 거치므로 이후 좀더 자세히 알아보겠습니다.

사용자 삽입 이미지


[그림 1.1 페이지 실행주기(PageCycle)]
Init

페이지의 객체가 생성된 다음 초기화 단계입니다. 이 단계에서는 아직 Viewstate의 값이 각 속성으로 복구되지 않았기 때문에 정확한 컨트롤의 속성값을 참조할 수 없습니다. 이 때문에 Init 이벤트에서는 컨트롤의 속성에 엑세스하지 않지만, 제일 처음 발생하는 이벤트이므로 초기화 작업에 해당하는 이벤트 핸들러르 ㄹ매핑하거나 페이지에 포함되는 컨트롤을 동적으로 로딩하는데 적합한 장소입니다.

사용자 삽입 이미지



[동적 컨트롤 생성 예제]


Load 

ViewState의 상태 설정이 완료되었으므로 페이지에 포함된 서버 컨트롤의 속성에 엑세스 할 수 있습니다. VS.NET을 사용하면 이 이벤트의 핸들러를(Page_Load) 생성해 주기 때문에 가장 많이 코딩하는 장소입니다.

 
PostBack 이벤트 처리

이 단계에서는 사용자의 반응에 따라 여러 종류의 이벤트가 발생할 수 있습니다. 버튼클릭, 텍스트 컨트롤의 속성 설정변경 등이 이런 종류의 이벤트를 일으킵니다. 페이지가 처음 요청될 때는 IsPostBack 속성이 false이므로 이 단계가 실행되지 않습니다. (IsPostBack : 페이지가 로드되고 데이터 바인딩시 포스트백안에 값이 있으면 포스트백을 일으키지 않습니다)


PreRender

컨트롤의 내용을 랜더링하기 바로 전 단계입니다. 처리 순서로 인해 발생하는 논리적 문제를 해결하기 위해 Load 단계에서 처리할 작업을 여기서 대신할 수 있습니다. (예:페이지 속성 초기화, 기본적인 데이터 바인딩)


Render 

컨트롤의 내용을 클라이언트로 출력할 HTML로 랜더링하는 메소드입니다. 일반적인 웹페이지 개발에서는 코딩하는 경우가 많지 않습니다.


Unload

페이지 객체가 소멸되기 전에 발생하는 이벤트이며 페이지가 요청된 경우는 항상 실행됩니다. 예를 들어 Page_Load 메소드에서 Response.Redirect 메소드를 이용해 다른 페이지로 이동하면 버튼 클릭 이벤트나 PreRender 이벤트는 발생하지 않으며 Unload 이벤트는 발생합니다.

이 단계에서는 페이지에서 사용한 리소스를 시스템으로 반환하는 작업을 할 수 있습니다. 가비지 컬렉터(Garbage Collector)가 자동으로 필요 없는 리소스를 정리를 해주지만, 가비지 컬렉터에 의한 리소스 정리는 시간이 걸리기 때문에 시스템 자원을 많이 소비하는 데이터베이스 연결 같은 리소스는 이 단계에서 직접 해제할 수 있습니다. Init 단계와 마찬가지로 서버 컨트롤의 ViewState와 관련된 속성은 여기서 처리하면 안 됩니다.

랜더링이란

예전 ASP 프로그래밍에서는 클라이언트로 출력할 HTML 태그를 직접 코딩했지만 ASP.NET에선 프로그래머가 직접 HTML 태그를 작성하는 일이 거의 없어졌습니다. 단지 컨트롤의 메소드와 속성을 적절히 설정하면 서버 컨트롤의 랜더링 단계에서 알맞은 HTML로 변환해 줍니다. 컨트롤의 내용을 클라이언트로 출력하 HTML로 출력할 HTML로(출력장치에 따라 다른 언어가 될 수도 있습니다) 변환하는 과정을 랜더링이라 합니다.

'닷넷 프로그래밍(~2012)' 카테고리의 다른 글

[Xaml] Rectangle(사각형) 그리기  (0) 2007.08.23
Ellipse(원) 그리기  (0) 2007.08.23
동적으로 오브젝트 생성  (0) 2007.08.16
실행주기(PageCycle)  (0) 2007.08.14
[XPS] Fxied Documents  (0) 2007.08.10
[XPS] View and Generate XPS  (0) 2007.08.10
[Controls] 25. BulletDecorator  (0) 2007.08.10
Path를 이용한 한글폰트 만들기  (0) 2007.08.09