Skills/ASP.NET

ASP.NET Web Forms 요청부터 응답까지, 내부 구조 완전 정복

Homil-Rye 2025. 6. 22. 19:21
728x90
반응형

 

 


 

1. 요청 수신 – IIS에서 시작

1-1. HTTP.sys (커널 모드 HTTP 리스너)

  • Windows OS의 커널 레벨에서 HTTP 요청 수신
  • 요청 도착 시 등록된 URL에 따라 애플리케이션 풀로 요청을 전달
  • 워커 프로세스(w3wp.exe)가 없으면 새로 생성됨

1-2. IIS 요청 처리 방식 (버전별 차이)

IIS 6 이하 ISAPI 확장 aspnet_isapi.dll로 ASP.NET 요청 처리, IIS와 ASP.NET 파이프라인 분리됨
IIS 7 이상 통합 파이프라인 요청 파이프라인 통합, 네이티브 모듈과 ASP.NET 모듈이 동일 이벤트 흐름에서 작동
 

 

2. ASP.NET 애플리케이션 초기화

2-1. AppDomain 생성

AppDomain이란?

  • 애플리케이션 단위로 격리된 실행 환경
  • 하나의 물리적 프로세스(w3wp.exe) 안에서 여러 AppDomain이 존재할 수 있음
  • 보안, 안정성, 리소스 관리 차원에서 .NET에서 가장 바깥 레벨의 격리 영역

ASP.NET에서는 최초 요청 시 ApplicationManager가 AppDomain을 생성하며, 해당 도메인에서 웹 애플리케이션의 모든 코드가 실행됩니다.

AppDomain이 재시작되는 경우: web.config 수정, bin 폴더 변경, 일정 메모리 초과, 타임아웃 등

 

2-2. HttpApplication 객체 풀 구성

HttpApplication이란?

  • 하나의 HTTP 요청을 처리하는 ASP.NET 애플리케이션의 진입 지점
  • 요청 생명주기 이벤트(BeginRequest~EndRequest)를 정의하며, 모듈 및 페이지 핸들러를 연결
  • ASP.NET은 다수의 요청을 처리하기 위해 이 객체를 풀링(Pooling) 하여 사용

2-3. HttpModule 등록 및 초기화

HttpModule이란?

  • 요청 처리 흐름에 끼어들어 전처리/후처리를 수행하는 구성 요소
  • 인증, 세션, 캐시, 로깅, URL 재작성 등 다양한 역할 수행
  • web.config에 등록하여 요청 수명주기 이벤트에 응답 가능

예: FormsAuthenticationModule, SessionStateModule, 사용자 정의 모듈 등

 


 

3. 요청 파이프라인 흐름 (이벤트 중심)

HttpApplication이 실행하는 이벤트 흐름


1 BeginRequest 요청 수신 후 최초 실행
2 AuthenticateRequest 인증 처리
3 AuthorizeRequest 권한 확인
4 ResolveRequestCache 캐시 여부 확인
5 MapRequestHandler 요청 처리 핸들러 결정
6 AcquireRequestState 세션/프로필 상태 로딩
7 ExecuteRequestHandler 핸들러 실행 (예: Page 객체)
8 ReleaseRequestState 상태 저장
9 EndRequest 요청 종료 처리, 로그, 오류 등
 

 

4. HttpContext, HttpRequest, HttpResponse

HttpContext

  • 요청 수명주기 전체에 걸쳐 공유되는 컨텍스트 객체
  • HttpContext.Current를 통해 접근 가능

HttpRequest

  • 클라이언트가 보낸 요청 정보(메서드, 쿼리, 폼 데이터, 헤더 등)를 담음
  • 주요 속성:
    • Request.Url, Request.HttpMethod
    • Request.QueryString, Request.Form
    • Request.Cookies, Request.Headers

HttpResponse

  • 서버가 클라이언트에 보낼 응답 정보 출력
  • 주요 속성 및 메서드:
    • Response.Write() – HTML 출력
    • Response.ContentType – 콘텐츠 타입 설정
    • Response.Redirect(), Response.StatusCode

Page 객체는 내부적으로 HttpContext.Current.Request와 Response를 사용하여 모든 입출력을 처리합니다.


 

5. 핸들러 처리: PageHandlerFactory와 Page 객체

5-1. PageHandlerFactory

  • .aspx 요청이면 이 핸들러 팩토리가 호출되어 Page 인스턴스를 생성하고 실행
  • IHttpHandler.ProcessRequest(HttpContext context) 메서드를 호출

5-2. Page 객체란?

Page란?

  • ASP.NET Web Forms의 UI 단위이자 요청 처리의 핵심 객체
  • System.Web.UI.Page 클래스를 상속하며, .aspx 파일이 컴파일된 결과물
  • HTML, 코드 비하인드, 서버 컨트롤 이벤트 처리까지 담당

Page 객체는 다음 작업을 수행함:

  • Request 파라미터 처리
  • ViewState 로딩 및 저장
  • PostBack 이벤트 처리
  • HTML 렌더링
  • 사용자 정의 로직 실행 (Page_Load 등)

 

6. Page 생명주기


1 Init 컨트롤 인스턴스화 및 초기화
2 InitComplete 초기화 완료
3 PreLoad ViewState 로딩 전
4 Load 사용자 정의 코드 실행, 데이터 바인딩
5 LoadComplete 로딩 마무리
6 PreRender 최종 조정
7 SaveViewState ViewState 직렬화
8 Render HTML 출력 (Response에 기록)
9 Unload 리소스 해제 (응답 종료 후)
 

※ PostBack이 있는 경우 중간에 LoadPostData, RaisePostBackEvent가 실행됩니다.

 


 

7. 응답 마무리

  • Page가 렌더링한 결과는 HttpResponse.Output에 기록됨
  • EndRequest 이벤트에서 마무리 처리
  • 응답은 HTTP.sys → 네트워크 → 클라이언트 브라우저로 전달됨

 

전체 구조

 
[클라이언트 요청]
HTTP.sys (Windows 커널) →
IIS (요청 라우팅, 파이프라인 결정) →
AppDomain 생성 (최초 요청 시) →
HttpApplication 인스턴스 할당 →
HttpModule 초기화 및 파이프라인 이벤트 실행 →
HttpRequest 객체 생성 →
PageHandlerFactory 호출 →
Page 인스턴스 생성 →
Page 생명주기 처리 (Init → Load → Render)
HttpResponse에 HTML 출력 →
요청 종료 및 응답 반환

728x90
반응형