본문 바로가기
Skills/Asp.net

Asp.net WebForms는 어떤 식으로 동작할까?

by Hoseok 2023. 8. 29.
728x90
반응형


ASP.NET은 Microsoft에서 개발한 웹 응용 프로그램 프레임워크이다. 2002년에 ASP.NET 1.0이 출시된 이후, 현재까지도 꾸준히 발전하고 있는 프레임워크이다.

 

자바 공화국인 국내에서는 사용률이 많이 떨어지지만 Stack Overflow 2023 Survey에서 알 수 있듯이 세계적으로 Spring boot보다 더 인기 있는 프레임워크이다 (ASP.NET CORE: 16.57%, ASP.NET: 12.79%, Spring Boot: 11.95%) 

 

오늘 포스팅에서는 ASP.NET의 가장 초기 프로젝트 형태인 WebForms를 알아보자.

 

ASP.NET은 서버 측 기술로 작동하며, 클라이언트 요청에 따라 웹 페이지를 동적으로 생성하고 처리하는 방식으로 동작한다. 마치 JSP, JSTL, jquery 조합과 작동하는 방식이 비슷하지만, aspx와 aspx.cs라는 ui를 담당하는 파일과, 서버 로직을 담당하는 파일로 더욱 간결한 구조로 밀접하게 결합되어 있다.

 


 

ASP.NET은 기본적으로 .aspx, .aspx.cs, .aspx.designer.cs 세 가지 확장자 파일로 이루어져 있다.

.aspx

.aspx 파일은 ASP.NET 웹 페이지의 마크업 부분을 정의한다.

HTML, 서버 컨트롤, 웹 폼, 사용자 인터페이스 요소 등을 포함한다.
ASP.NET 서버 컨트롤이나 마크업 요소에 대한 이벤트 핸들러와 연결할 수 있다.

 

<예시>

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="WebFormExample.aspx.cs" Inherits="WebFormExample" %>

<!DOCTYPE html>
<html>
<head>
    <title>ASP.NET Web Form Example</title>
</head>
<body>
    <form runat="server">
        <asp:Label ID="titleLabel" runat="server" Text="Welcome to ASP.NET Web Forms"></asp:Label>
        <br />
        <asp:Button ID="submitButton" runat="server" Text="Click Me" OnClick="submitButton_Click" />
    </form>
</body>
</html>


.aspx.cs

.aspx.cs 파일은 코드 비하인드라고 불리며, C# 또는 VB.NET 등의 코드로 이루어져 있다. (보통 C#)
.aspx.cs는 .aspx 파일의 서버 측 이벤트 처리, 데이터 연산, 로직 구현을 담당하는 서버 측 코드라고 보면 된다.

 

<예시>

using System;
using System.Web.UI;

public partial class WebFormExample : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            titleLabel.Text = "Hello, ASP.NET Web Forms!";
        }
    }

    protected void submitButton_Click(object sender, EventArgs e)
    {
        titleLabel.Text = "Button Clicked!";
    }
}


.aspx.designer.cs

.aspx.designer.cs 또는 .aspx.designer.vb 파일은 aspx 파일과 aspx.cs 파일 사이에서 이벤트 연결 등을 관리하는 파일이다. 주로 웹 페이지에 포함된 서버 컨트롤에 대한 코드와 초기화 코드가 포함된다.
.aspx.designer.cs는 자동 생성되므로, 개발자가 직접 편집할 필요가 없다.

<예시>

public partial class WebFormExample {
    protected global::System.Web.UI.WebControls.Label titleLabel;
    protected global::System.Web.UI.WebControls.Button submitButton;
}

 

요청이 시작된 이후부터, 끝나기 까지의 과정은 다음과 같다.

클라이언트 요청 수신

사용자의 웹 브라우저가 웹 페이지를 요청하면, 웹 서버(IIS)는 해당 요청을 수신한다.

HTTP 요청 처리

IIS는 HTTP 요청을 처리하고 해당 요청을 ASP.NET 프로세스에 전달한다. 이때, 요청된 URL에 따라 어떤 ASP.NET 페이지 또는 핸들러를 호출할지 결정하게 된다.

HTTP 모듈과 HTTP 핸들러 실행

ASP.NET은 여러 개의 HTTP 모듈과 HTTP 핸들러로 구성되어 있다. HTTP 모듈은 요청을 처리하기 전후에 실행되는 기능을 제공하며, HTTP 핸들러는 특정 유형의 요청을 처리하는 역할을 맡는다. 예를 들어, .aspx 확장자를 가진 파일은 ASP.NET 페이지로 처리되기 위해 해당하는 핸들러가 호출되는 식이다.

 

ASP.NET 페이지 처리

해당되는 핸들러는 ASP.NET 페이지 또는 웹 서비스와 같은 코드를 실행시킨다. 이 단계에서 ASP.NET 페이지의 라이프사이클을 따라 페이지가 생성, 초기화되고, 서버 컨트롤과 이벤트 처리, 데이터베이스 접근, 랜더링 등의 작업이 수행된다.

*페이지 라이프사이클

ASP.NET 페이지의 처리 과정은 페이지 라이프사이클을 따르게 된다. 이 라이프사이클은 페이지의 생성, 초기화, 이벤트 처리, 렌더링 등의 단계를 포함하며, 페이지의 상태와 컨트롤들의 상태 변화를 관리한다.

*서버 컨트롤과 이벤트 처리: ASP.NET 페이지는 서버 컨트롤을 포함하고 있으며, 이벤트를 처리하는 방식으로 동작한다.이벤트 처리기는 C# 또는 VB.NET과 같은 .NET 언어로 작성된다.

*페이지 렌더링: 페이지의 모든 로직이 처리되면, ASP.NET은 클라이언트 브라우저로 전송할 HTML과 다른 클라이언트 측 코드를 생성하여 렌더링을 하게 된다.

 

서버 응답 생성

ASP.NET 페이지가 로직을 처리하고 데이터를 준비한 후, 클라이언트에 전송될 HTML, CSS, JavaScript 등의 내용을 생성한다.

HTTP 응답 전송

생성된 응답은 IIS 서버를 통해 클라이언트 브라우저로 전송된다. 이때 HTTP 헤더 및 본문 등의 내용이 함께 전송되며, 클라이언트 브라우저에서 웹 페이지가 표시된다.

IIS는 클라이언트 요청을 수신하고 ASP.NET 핸들러에게 전달하는 역할을 수행한다.

 

ASP.NET 핸들러는 페이지의 로직 실행 및 데이터 처리 등을 수행하여 생성된 응답을 생성한다.

 

이러한 역할 분리를 통해 IIS와 ASP.NET은 동적인 웹 응용 프로그램을 구축하게 된다.

 


 

ASP.NET Web Forms 프로젝트의 디렉터리 구조

App_Data: 데이터베이스 파일이나 다른 데이터 저장소에 사용되는 파일이 위치하는 디렉터리.

App_Start: 애플리케이션을 초기화하는 코드 및 설정 파일이 들어있는 디렉터리.

Content: 스타일 시트(CSS) 파일, 이미지 파일 등과 같이 웹 페이지의 디자인과 관련된 자원이 들어있는 디렉터리.

Scripts: 클라이언트 측 JavaScript 파일이 들어있는 디렉터리.

MasterPages: 마스터 페이지 파일이 들어있는 디렉터리로, 웹 페이지의 레이아웃과 공통된 요소를 정의한다.

Pages 또는 Default: 주요 웹 페이지 파일들이 위치하는 디렉터리로, 확장자가 .aspx인 파일들이 포함된다.


App_Code: 애플리케이션의 코드 파일들을 포함하는 디렉터리로, 리소스 클래스, 비즈니스 로직 등이 위치할 수 있다.

App_GlobalResources: 전역 리소스 파일(.resx)이 들어있는 디렉터리로, 다국어 지원과 같은 기능을 제공한다.

App_LocalResources: 각 페이지에 특정한 리소스 파일(.resx)이 들어있는 디렉터리로, 해당 페이지의 특정 리소스를 정의할 때 사용된다.

bin: 컴파일된 어셈블리(DLL) 파일이 위치하는 디렉터리.

Web.config: 웹 애플리케이션의 구성 파일로, 애플리케이션 설정 및 데이터베이스 연결 정보 등이 포함되어있다.

Global.asax: 애플리케이션의 전역 이벤트를 처리하는 파일. Application 시작, 종료, 오류 처리 등을 정의할 수 있다.

Packages: NuGet 패키지 관련 파일이 위치하는 디렉터리.

Properties: 프로젝트 관련 속성 설정 파일들이 위치하는 디렉터리.

obj: 프로젝트 빌드 과정에서 생성되는 임시 파일들이 위치하는 디렉터리.

 

일반적으로 이러한 구조로 이루어져있으며, 개발자에 따라서 프로젝트 구조를 다르게 가져갈 수 있다.

 


 

*default.aspx 파일은 웹 애플리케이션의 초기 진입 시점이라고 할 수 있다. 마치 스프링 서버를 실행하면 main 메서드를 가장 먼저 호출하듯이, default.aspx 파일을 실행시키는 방식으로 동작한다.

 

 

728x90
반응형