[C#/dotnet] 페이지 수명 주기

2024. 10. 24. 00:55·C#
728x90
728x90

참조

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 등의 메서드를 호출하려고 하면 예외가 발생함

 

320x100
반응형
저작자표시 비영리 변경금지 (새창열림)

'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
'C#' 카테고리의 다른 글
  • [C#/dotnet] View State
  • [C#/dotnet] 페이지 구조 - 마스터 페이지 & 콘텐츠 페이지
  • [C#/dotnet] 제네릭 (Generics)
  • [C#/dotnet] LINQ (Language-Integrated Query)
스응
스응
    반응형
    250x250
  • 스응
    이서영의 개발 블로그
    스응
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (384)
      • Java (134)
        • Base (54)
        • Spring Boot (37)
        • JSP (16)
        • Swing (GUI) (20)
        • Design Pattern (7)
      • C# (13)
      • PHP (18)
      • SQL (27)
      • Vue.js (9)
      • Tailwind CSS (4)
      • TypeScript (7)
      • HTML & CSS (27)
      • JavaScript (26)
      • jQuery (10)
      • Android (3)
      • - - - - - - - - - - - - - - (0)
      • Hotkeys (5)
      • CS (30)
      • etc. (13)
      • Error Note (16)
      • Team Project (24)
        • Airlines Web Project (12)
        • University Web Project (6)
        • Strikers 1945 GUI Project (6)
      • My Project (18)
        • Library Web Project (8)
        • Pet Shopping Mall GUI Project (10)
  • 블로그 메뉴

    • Home
    • Write
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    SWAGGER
    php
    Hotkeys
    Wordpress
    SQL
    C#
    면접
    Android
    오블완
    http
    js
    SEO
    티스토리챌린지
    tailwindcss
    typeScript
    SpringBoot
    java
    jQuery
    git
    zapier
    cs
    CSS
    Swing
    jsp
    Codeigniter
    vuejs
    개발일지
    HTML
    errorNote
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
스응
[C#/dotnet] 페이지 수명 주기
상단으로

티스토리툴바