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
반응형