참조
https://learn.microsoft.com/en-us/previous-versions/aspnet/ms178472(v=vs.100)
페이지 생명 주기
1. Page Request (페이지 요청)
- 페이지 생명 주기가 시작되기 전
- 사용자가 페이지 요청함
→ 해당 페이지를 새로 파싱하고 컴파일해야 하는지, 아니면 캐시된 버전을 보낼 수 있는지를 결정함
→ 전자라면 페이지 생명 주기가 시작됨
2. Start (시작)
- Request와 Response 속성 설정
- IsPostBack 속성 설정
· Postback (포스트백)
: 페이지가 처음 로드되는 것이 아니라, 사용자가 웹 페이지에 데이터를 입력하고 서버에 다시 요청을 보낸 경우
- UICulture 속성 설정
: 페이지의 언어 및 지역화 설정
3. Initialization (초기화)
- 페이지의 컨트롤들이 사용할 수 있는 상태가 됨
- 각 컨트롤의 UniqueId 속성이 설정됨
- 마스터 페이지와 테마 적용
- Postback 요청인 경우
· Postback 데이터는 아직 로드되지 않음
· 컨트롤의 속성 값도 View State에서 아직 복원되지 않음
4. Load (로드)
- Postback 요청인 경우
· 컨트롤의 속성 값이 View State와 Control State에서 복원됨
→ 이전 상태를 유지함
5. Postback Event Handling (포스트백 이벤트 처리)
- Postback 요청인 경우
· 컨트롤의 이벤트 핸들러가 호출됨
- Validate
· 모든 Validator Controls의 Validate 메서드로 호출됨
→ 각 컨트롤과 페이지의 IsValid 속성을 설정함
- 유효성 검사를 유발한 이벤트 핸들러는 Validate 후에 호출됨
6. Rendering (렌더링)
- 페이지와 모든 컨트롤의 View State가 저장됨
- 각 컨트롤에 대해 Render 메서드가 호출됨
→ Text Writer를 사용하여 출력 결과를 페이지의 Response 객체의 OutputStream에 기입함
7. Unload (언로드)
- 페이지가 완전히 렌더링되고, 클라이언트에게 전송된 후에 발생함
- 페이지 속성 해제 (Response, Request 등)
- 리소스 정리 수행
페이지 생명 주기 이벤트
1. PreInit
- 발생 시기 : 페이지 초기화가 시작되기 전
- IsPostBack 속성을 통해 페이지가 처음 로드되는 것인지, Postback인지 확인함
- IsCallback 속성과 IsCrossPagePostBack 속성도 설정되어 있음
- 동적 컨트롤을 생성함
- 마스터 페이지를 동적으로 설정함
ex) 사용자의 상태에 따라 마스터 페이지를 변경해야 할 때
- Theme 속성을 동적으로 설정함
- 프로필 속성 값을 읽거나 설정함
- 페이지 초기 설정을 제어해야 할 때
※ Postback 요청인 경우, 아직 이 단계에는 View State에서 컨트롤의 값이 복원되지 않음
→ 이 단계에서 컨트롤의 값을 설정하면 다음 이벤트에서 값이 덮어쓰기될 수 있음
2. Init
- 발생 시기 : 모든 컨트롤이 초기화되고 스킨 설정이 적용된 후
- 페이지의 기본 구조를 준비하는 단계
- 개별 컨트롤의 Init 이벤트는 페이지의 Init 이벤트보다 먼저 발생함
- 컨트롤의 속성을 설정하거나 초기화할 때 사용함
3. InitComplete
- 발생 시기 : 페이지 초기화 단계가 끝난 후
- Init과 InitComplete 이벤트 사이에는 View State Tracking만 활성화됨
→ 활성화되면 컨트롤이 View State 컬렉션에 추가된 값을 유지할 수 있음
- 다음 Postback에서 유지되길 원하는 View State 변경을 할 때 사용함
4. PreLoad
- 발생 시기 : 페이지가 View State를 자신과 모든 컨트롤에 대해 로드하고 나서,
Request 인스턴스에 포함된 Postback 데이터를 처리한 후
5. Load
- Page 객체가 자신의 OnLoad 메서드를 호출한 후, 페이지와 모든 자식 컨트롤을 로드할 때까지 동일한 작업을
재귀적으로 수행함
- 개별 컨트롤의 Load 이벤트는 페이지의 Load 이벤트 이후에 발생함
- 컨트롤 속성을 설정하고 DB 연결을 설정할 때 사용함
- DB에서 데이터를 가져오거나, 페이지에 동적으로 데이터를 로드할 때 사용함
- 비즈니스 로직과 UI 처리
6. Control events
- 특정 컨트롤 이벤트를 처리할 때 사용함
- 사용자 입력에 대한 처리를 담당함
7. LoadComplete
- 발생 시기 : 이벤트 처리 단계의 끝에서
- 모든 컨트롤이 로드된 후 수행해야 할 작업이 있다면 이 이벤트를 사용함
8. PreRender
- 발생 시기 : 페이지가 렌더링되기 전에 모든 컨트롤을 생성한 후
- 페이지는 각 컨트롤과 페이지 자체에 대해 EnsureChildControls 메서드를 호출함
- 페이지/컨트롤의 내용을 렌더링 단계가 시작되기 전에 최종적으로 변경할 때 사용함
- 페이지가 렌더링되기 직전에 마지막으로 컨트롤을 수정할 때 사용함
9. PreRenderComplete
- 발생 시기 : DataSourceID 속성이 설정된 데이터 바인딩 컨트롤이 DataBind 메서드를 호출한 후
10. SaveStateComplete
- 발생 시기 : 페이지와 모든 컨트롤의 View State 및 Control State가 저장된 후
- 이 시점 이후에 페이지/컨트롤을 변경하는 경우
→ 렌더링에는 영향을 미치지만, 다음 Postback에서 변경 사항이 유지되지 않음
11. Render
- 이벤트가 아님
- 이 단계에서는 Page 객체가 각 컨트롤에 대해 Render 메서드를 호출함
12. UnLoad
- 각 컨트롤/페이지에 대해 마지막 정리 작업을 할 때 사용함 (리소스 해제, DB 연결 종료, 파일 닫기 등)
※ 페이지/컨트롤이 이미 렌더링되었기 때문에 응답 스트림을 더 이상 수정할 수 없음
→ Response.Write 등의 메서드를 호출하려고 하면 예외가 발생함
'C#' 카테고리의 다른 글
[C#/dotnet] View State (1) | 2024.10.24 |
---|---|
[C#/dotnet] 페이지 구조 - 마스터 페이지 & 콘텐츠 페이지 (1) | 2024.10.24 |
[C#/dotnet] 제네릭 (Generics) (0) | 2024.10.23 |
[C#/dotnet] LINQ (Language-Integrated Query) (0) | 2024.10.23 |
[C#/dotnet] 일반적인 C# 코드 규칙 (2) | 2024.10.23 |