ASP.NET 웹 폼
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
ASP.NET 웹 폼은 마이크로소프트의 ASP.NET 프레임워크에서 애플리케이션 개발을 위한 주요 구성 요소였으며, 웹 애플리케이션과 웹 사이트의 두 가지 개발 방식을 제공한다. 웹 폼은 .aspx 확장자를 가진 파일에 HTML 마크업, 서버 측 웹 컨트롤, 동적 코드를 포함하며, 코드 숨김 모델을 통해 프레젠테이션과 비즈니스 로직을 분리한다. ASP.NET은 지시어, 사용자 정의 컨트롤, 렌더링 기술, 그리고 상태 관리를 위한 다양한 기능을 제공하며, 애플리케이션 상태, 세션 상태, 뷰 상태, 쿠키, 캐싱, 쿼리 문자열 등 다양한 상태 관리 방법을 지원한다. ASP.NET은 컴파일된 코드를 사용하여 성능을 향상시키고, 클래식 ASP와 비교하여 객체 지향 설계, 예외 처리, 다양한 컨트롤과 라이브러리, 다중 언어 지원 등의 장점을 제공한다.
더 읽어볼만한 페이지
- ASP.NET - 블레이저 (웹 프레임워크)
블레이저는 마이크로소프트가 개발한 웹 프레임워크로, .NET을 사용하여 웹 애플리케이션을 구축하며, C#과 Razor 구문을 사용해 컴포넌트를 만들고, 서버 측 및 클라이언트 측 렌더링을 모두 지원한다. - ASP.NET - ASP.NET MVC
ASP.NET MVC는 마이크로소프트가 개발한 웹 애플리케이션 프레임워크로, ASP.NET의 일부로서 모델-뷰-컨트롤러 디자인 패턴을 사용하여 웹 애플리케이션의 개발, 테스트, 유지 관리를 용이하게 하고 웹 표준 기술과 디자인 패턴을 활용하여 현대적인 웹 애플리케이션 개발에 적합한 환경을 제공한다. - 마이크로소프트 비주얼 스튜디오 - 비주얼 베이직
비주얼 베이직은 1991년 마이크로소프트에서 출시된 GUI 기반 응용 프로그램 개발에 강점을 가진 프로그래밍 언어이며, 윈도우용 응용 프로그램 및 데이터베이스 조작 프로그램 개발에 주로 사용되었고, 2005년 표준 지원이 중단되었다. - 마이크로소프트 비주얼 스튜디오 - J 샤프
J#은 마이크로소프트에서 개발한 .NET Framework 기반의 프로그래밍 언어로, 자바와 유사한 문법을 가지며 기존 자바 코드의 .NET 플랫폼 이전 및 .NET 언어와의 상호 운용성을 지원했으나 현재는 개발이 중단되었다. - 마이크로소프트의 자유 소프트웨어 - 마이크로소프트 코그니티브 툴킷
- 마이크로소프트의 자유 소프트웨어 - ASP.NET
ASP.NET은 .NET Framework 기반의 마이크로소프트 웹 애플리케이션 개발 플랫폼으로, ISAPI를 통해 동작하며 다양한 프로그래밍 모델과 개발 도구를 지원하고, 부트스트랩, OAuth 2.0, OData 등 최신 기술을 통합하여 강력한 웹 개발 환경을 제공한다.
ASP.NET 웹 폼 - [IT 관련 정보]에 관한 문서 | |
---|---|
기본 정보 | |
![]() | |
개발자 | 마이크로소프트 |
최초 릴리스 | 2002년 |
운영 체제 | 윈도우 |
플랫폼 | .NET Framework |
장르 | 웹 애플리케이션 프레임워크 |
웹사이트 | ASP.NET Web Forms 공식 웹사이트 |
일반 정보 | |
ASP.NET Web Forms | 마이크로소프트에서 개발한 웹 애플리케이션 프레임워크이다. |
특징 | 이벤트 기반 프로그래밍 모델과 서버 컨트롤을 사용하여 웹 애플리케이션을 구축할 수 있도록 한다. |
기술적 특징 | |
뷰 스테이트 (View State) | 페이지와 컨트롤의 상태를 유지하는 데 사용된다. |
서버 컨트롤 | 웹 페이지에서 사용자 인터페이스 요소를 나타내는 재사용 가능한 구성 요소이다. |
ASP.NET vs ASP.NET Core | |
선택 | ASP.NET과 ASP.NET Core 중에서 선택해야 할 경우, 프로젝트의 요구 사항과 목표에 따라 신중하게 결정해야 한다. |
2. 특징
ASP.NET 웹 폼은 개발자가 윈도우 컨트롤을 사용하여 웹 페이지를 구축할 수 있게 해준다. 이를 통해 윈도우 응용 프로그램 개발에서 웹 개발로 쉽게 전환할 수 있다. 버튼이나 라벨과 같은 웹 컨트롤은 윈도우에서와 거의 같은 방식으로 작동하며, 코드는 속성을 할당하고 이벤트에 응답할 수 있다.
ASP.NET 웹 폼은 사건 기반 GUI 모델을 사용하여 애플리케이션을 개발하도록 돕는다. 프레임워크는 ViewState와 같은 내부 구성 요소를 통해 무상태 웹 환경에 지속적인(요청 간) 상태를 제공한다.[5]
웹 폼은 ASP.NET에서 애플리케이션 개발의 주요 구성 요소였다.[4] 웹 폼에는 웹 애플리케이션 형식과 웹 사이트 형식의 두 가지 방법론이 있다.[6] 웹 애플리케이션은 배포 전에 컴파일해야 하는 반면, 웹 사이트는 사용자가 사전 컴파일 없이 파일을 서버에 직접 복사할 수 있다.
ASP.NET Framework 2.0에서 마이크로소프트는 "코드 비하인드" 모델을 도입하여 정적 텍스트는 .aspx 페이지에, 동적 코드는 .aspx.vb 또는 .aspx.cs 파일에 있도록 하였다.[7]
2. 1. 구성 요소
ASP.NET 웹 폼은 개발자가 윈도우 사용자 인터페이스와 비슷한 컨트롤을 사용하여 웹 페이지를 만들 수 있게 해준다. 버튼이나 라벨 같은 웹 컨트롤은 윈도우에서와 거의 같은 방식으로 작동한다. 코드는 속성을 할당하고 이벤트에 응답할 수 있다. 컨트롤은 스스로 렌더링하는 방법을 알고 있다. 윈도우 컨트롤이 화면에 자신을 그리는 반면, 웹 컨트롤은 최종 사용자의 브라우저로 전송되는 결과 페이지의 일부를 구성하는 HTML 및 자바스크립트 세그먼트를 생성한다.[4]ASP.NET 웹 폼은 프로그래머가 ASP 및 PHP와 같은 기존 웹 스크립트 환경이 아닌 사건 기반 GUI 모델을 사용하여 애플리케이션을 개발하도록 돕는다. 프레임워크는 자바스크립트와 같은 기존 기술을 "ViewState"와 같은 내부 구성 요소와 결합하여, 무상태 웹 환경에 지속적인(요청 간) 상태를 제공한다.[5]
웹 폼은 ".aspx" 확장자를 가진 파일에 포함되며, 이러한 파일에는 일반적으로 정적 (X)HTML 마크업 또는 컴포넌트 마크업이 포함된다. 컴포넌트 마크업에는 프레임워크 또는 웹 페이지에서 정의된 서버 측 웹 컨트롤 및 사용자 정의 컨트롤이 포함될 수 있다. 예를 들어, 텍스트 상자 컴포넌트는 `
2. 2. 코드 숨김 모델
마이크로소프트는 동적 프로그램 코드를 처리하기 위해 코드 숨김 모델을 사용하는 것을 권장한다. 이 모델은 코드를 별도의 파일이나 특별히 지정된 스크립트 태그에 배치한다.[7] 코드 숨김 파일은 일반적으로 "MyPage.aspx.cs" 또는 "MyPage.aspx.vb"와 같은 이름을 가지며, 페이지 파일은 MyPage.aspx이다(페이지 파일(ASPX)과 동일한 파일 이름이지만 마지막 확장자는 페이지 언어를 나타냄). 이 방식은 비주얼 스튜디오 및 기타 IDE에서 자동으로 적용되지만, 사용자는 코드 숨김 페이지 이름을 변경할 수 있다. 웹 애플리케이션 형식에서는 pagename.aspx.cs가 pagename.designer.cs 파일에 연결된 부분 클래스이다. 디자이너 파일은 ASPX 페이지에서 자동으로 생성되며, 프로그래머가 ASPX 페이지의 구성 요소를 코드 숨김 페이지에서 수동으로 선언할 필요 없이 참조할 수 있도록 한다. 이는 2.0 이전의 ASP.NET 버전에서 필요했다.[8] 이 스타일로 프로그래밍할 때 개발자는 페이지가 로드되거나 컨트롤이 클릭되는 것과 같은 다양한 이벤트에 응답하는 코드를 작성하며, 문서의 절차적 안내는 작성하지 않는다.ASP.NET의 코드 숨김 모델은 개발자가 프레젠테이션과 내용 분리를 염두에 두고 애플리케이션을 구축하도록 장려한다는 점에서 클래식 ASP와는 다르다. 이론적으로 이것은 웹 디자이너가 디자인 마크업에 집중할 수 있게 하여, 프로그래밍 코드를 방해할 가능성을 줄여준다. 이는 MVC 프레임워크에서 뷰와 컨트롤러를 분리하는 것과 유사하다.
2. 3. 지시어
지시어는 ASP.NET이 페이지를 처리하는 방법에 대한 특수 지침이다.[9] 가장 일반적인 지시어는 <%@ Page %>이며, ASP.NET 페이지 파서 및 컴파일러에서 사용되는 많은 특성을 지정할 수 있다.2. 4. 사용자 정의 컨트롤 및 사용자 지정 컨트롤
ASP.NET에서 '''사용자 정의 컨트롤'''은 컨트롤로 등록되어 사용되는 페이지 섹션의 캡슐화된 부분이다. 프로그래머는 ASP.NET 애플리케이션을 위한 ''사용자 정의 컨트롤''을 만들 수도 있다. 사용자 정의 컨트롤은 ASCX 마크업 파일이 없으며, 모든 코드가 동적 연결 라이브러리(DLL) 파일로 컴파일된다는 점에서 사용자 지정 컨트롤과 다르다. 이러한 사용자 정의 컨트롤은 여러 웹 애플리케이션 및 Visual Studio 2013 프로젝트에서 사용할 수 있다.2. 5. 렌더링 기술
ASP.NET 웹 폼은 "방문자 패턴" 렌더링 기술을 사용한다. 컴파일 과정에서 템플릿(.aspx) 파일은 원래 템플릿을 나타내는 컨트롤 트리(복합체)를 구축하는 초기화 코드로 컴파일된다. 리터럴 텍스트는 Literal 컨트롤 클래스의 인스턴스로 들어가고, 서버 컨트롤은 특정 컨트롤 클래스의 인스턴스로 표현된다. 초기화 코드는 사용자 작성 코드(일반적으로 여러 부분 클래스의 어셈블리를 통해)와 결합되어 페이지에 특정한 클래스가 생성된다. 이 페이지는 컨트롤 트리의 루트 역할을 한다.페이지에 대한 실제 요청은 여러 단계를 거쳐 처리된다. 먼저, 초기화 단계에서 페이지 클래스의 인스턴스가 생성되고 초기화 코드가 실행된다. 이렇게 생성된 초기 컨트롤 트리는 일반적으로 다음 단계에서 페이지의 메서드에 의해 조작된다. 트리 내의 각 노드는 클래스의 인스턴스로 표현되는 컨트롤이므로 코드는 트리 구조를 변경하고 개별 노드의 속성/메서드를 조작할 수 있다. 마지막으로, 렌더링 단계에서 방문자 패턴이 사용되어 트리의 모든 노드를 방문하고 각 노드에게 방문자의 메서드를 사용하여 자체적으로 렌더링하도록 요청한다. 그 결과로 생성된 HTML 출력은 클라이언트로 전송된다.
요청이 처리된 후 페이지 클래스의 인스턴스는 전체 컨트롤 트리와 함께 폐기된다. 이는 모든 페이지 요청/응답 주기마다 손실되는 클래스 인스턴스 멤버에 의존하는 초보 ASP.NET 프로그래머들 사이에서 혼란의 원인이 된다.
2. 6. 상태 관리
ASP.NET 응용 프로그램은 무상태 HTTP 프로토콜을 사용하여 접근되므로, 응용 프로그램이 상태 기반 상호 작용을 사용하는 경우 자체적으로 상태 관리를 구현해야 한다. ASP.NET은 개념적으로 "상태"를 GUI 상태로 취급하며, 상태 관리를 위한 다양한 기능을 제공한다.ASP.NET은 다음과 같은 상태 관리 방법을 제공한다.[10][11][12]
- 애플리케이션 상태: 애플리케이션의 첫 번째 인스턴스가 로드될 때 설정 및 초기화되어 마지막 인스턴스가 종료될 때까지 사용 가능한 공유 변수들을 통해 상태를 관리한다.
- 세션 상태: 사용자 세션 동안 지속되는 사용자 정의 세션 변수들을 통해 상태를 관리한다.
- 뷰 상태: 페이지 수준에서 웹 폼 컨트롤 및 위젯의 상태를 유지하는 메커니즘으로, 포스트백에서 폼 정보를 보존하는 데 주로 사용된다.
- 기타: 쿠키, 캐싱, 쿼리 문자열 등을 이용한 상태 관리도 지원한다.
하지만, 요청 간에 임시 상태에 있을 수 있거나 초기화하는 데 오랜 시간이 걸리는 유한 상태 기계와 같이 응용 프로그램이 "데이터 상태"를 추적해야 하는 경우에는 문제가 발생할 수 있다. 또한, ASP.NET 페이지에서 인증을 사용하는 상태 관리는 웹 스크래핑을 어렵게 만들거나 불가능하게 할 수 있다.
2. 6. 1. 애플리케이션 상태
애플리케이션 상태는 공유된 사용자 정의 변수 모음에 의해 유지된다. 이 변수들은 애플리케이션의 첫 번째 인스턴스가 로드될 때 `Application_OnStart` 이벤트가 발생하면서 설정 및 초기화되며, 마지막 인스턴스가 종료될 때까지 사용 가능하다. 애플리케이션 상태 변수는 애플리케이션 상태를 위한 래퍼를 제공하는 `Applications` 컬렉션을 사용하여 접근한다. 애플리케이션 상태 변수는 이름으로 식별된다.[10] 애플리케이션은 상태 관리이다.2. 6. 2. 세션 상태
서버 측 세션 상태는 사용자 세션 동안 지속되는 사용자 정의 세션 변수의 모음에 의해 유지된다. `Session` 컬렉션을 사용하여 접근하는 이 변수는 각 세션 인스턴스에 고유하다. 변수는 세션이 종료되지 않더라도 정의된 비활성 시간 후에 자동으로 삭제되도록 설정할 수 있다. 클라이언트 측 사용자 세션은 쿠키 또는 URL 자체에 세션 ID를 인코딩하여 유지 관리된다.[10]ASP.NET은 서버 측 세션 변수에 대해 세 가지 영속성 모드를 지원한다.[10]
- 프로세스 내 모드: 세션 변수는 ASP.NET 프로세스 내에서 유지 관리된다. 이는 가장 빠른 방법이지만, 이 모드에서는 ASP.NET 프로세스가 재활용되거나 종료될 때 변수가 삭제된다.
- 상태 서버 모드: ASP.NET은 상태 변수를 유지 관리하는 별도의 Windows 서비스를 실행한다. 상태 관리는 ASP.NET 프로세스 외부에서 발생하고 ASP.NET 엔진이 .NET Remoting을 사용하여 데이터에 접근하므로 ASPState는 프로세스 내 모드보다 느리다. 이 모드를 사용하면 ASP.NET 애플리케이션을 여러 서버에서 로드 밸런싱하고 확장할 수 있다. 상태 관리 서비스는 ASP.NET과 독립적으로 실행되므로 세션 변수는 ASP.NET 프로세스 종료 시에도 지속될 수 있다. 그러나 세션 상태 서버는 하나의 인스턴스로 실행되므로 여전히 세션 상태에 대한 단일 실패 지점이다. 세션 상태 서비스는 로드 밸런싱할 수 없으며 세션 변수에 저장할 수 있는 유형에 제한이 있다.
- SQL Server 모드: 상태 변수는 데이터베이스에 저장되므로 ASP.NET 프로세스 종료 시에도 세션 변수를 유지할 수 있다. 이 모드의 주요 장점은 애플리케이션이 서버 클러스터에서 부하를 분산하여 서버 간에 세션을 공유할 수 있다는 것이다. 이는 ASP.NET에서 세션 상태 관리를 위한 가장 느린 방법이다.
ASP.NET 세션 상태를 사용하면 사용자가 웹 애플리케이션에서 ASP.NET 페이지를 탐색할 때 사용자에 대한 값을 저장하고 검색할 수 있다. HTTP는 상태 비저장 프로토콜이다. 즉, 웹 서버는 페이지에 대한 각 HTTP 요청을 독립적인 요청으로 처리한다. 서버는 이전 요청 중에 사용된 변수 값에 대한 지식을 유지하지 않는다. ASP.NET 세션 상태는 제한된 시간 동안 동일한 브라우저의 요청을 세션으로 식별하고 해당 세션 동안 변수 값을 지속할 수 있는 방법을 제공한다. 기본적으로 ASP.NET 세션 상태는 모든 ASP.NET 애플리케이션에 대해 활성화되어 있다.
세션 상태의 대안은 다음과 같다.
- 애플리케이션 상태는 ASP.NET 애플리케이션의 모든 사용자가 접근할 수 있는 변수를 저장한다.
- 프로필 속성은 사용자 값을 만료하지 않고 데이터 저장소에 지속한다.
- ASP.NET 캐싱은 모든 ASP.NET 애플리케이션에서 사용할 수 있는 메모리에 값을 저장한다.
- 보기 상태는 페이지에 값을 지속한다.
- 쿠키.
- HTTP 요청에서 사용할 수 있는 HTML 양식의 쿼리 문자열 및 필드.
2. 6. 3. 뷰 상태
ASP.NET 웹 폼은 프로그래머가 ASP 및 PHP와 같은 기존 웹 스크립트 환경이 아닌 사건 기반 GUI 모델을 사용하여 애플리케이션을 개발하도록 권장한다. 프레임워크는 자바스크립트와 같은 기존 기술을 "ViewState"와 같은 내부 구성 요소와 결합하여 본질적으로 무상태인 웹 환경에 지속적인(요청 간) 상태를 제공한다.뷰 상태는 ASP.NET 애플리케이션에서 내보내는 HTML 페이지에서 웹 폼 컨트롤 및 위젯의 상태를 유지하기 위해 사용되는 페이지 수준 상태 관리 메커니즘이다. 컨트롤의 상태는 인코딩되어 `__VIEWSTATE`라는 숨겨진 필드에 담겨 모든 폼 전송 시 서버로 전송된다. 서버는 페이지가 다시 렌더링될 때 컨트롤이 마지막 상태로 렌더링되도록 변수를 다시 보낸다. 서버 측에서 애플리케이션은 처리 과정에서 모든 컨트롤의 상태 변경이 필요한 경우 뷰 상태를 변경할 수 있다. 개별 컨트롤의 상태는 서버에서 디코딩되며 `ViewState` 컬렉션을 사용하여 ASP.NET 페이지에서 사용할 수 있다.[11]
뷰 상태의 주요 용도는 포스트백에서 폼 정보를 보존하는 것이다. 뷰 상태는 기본적으로 활성화되어 있으며, 포스트백 중에 실제로 사용되는지 여부에 관계없이 페이지의 모든 컨트롤에 있는 데이터를 일반적으로 직렬화한다. 하지만 뷰 상태는 컨트롤별, 페이지별 또는 서버 전체에서 비활성화될 수 있으므로 이 동작을 수정할 수 있으며, 수정해야 한다.
개발자는 페이지 또는 컨트롤의 뷰 상태에 민감하거나 개인적인 정보를 저장하는 데 주의해야 한다. 뷰 상태 데이터를 포함하는 Base64 문자열은 쉽게 역직렬화될 수 있기 때문이다. 기본적으로 뷰 상태는 `__VIEWSTATE` 값을 암호화하지 않는다. 서버 전체(및 서버별)에서 암호화를 활성화하여 어느 정도의 보안 수준을 유지할 수 있다.[12]
2. 6. 4. 기타 상태 관리
ASP.NET은 애플리케이션 전체에서 공유되며 다양한 객체를 저장하는 데 사용될 수 있는 "캐시" 객체를 제공한다. "캐시" 객체는 지정된 시간 동안만 데이터를 보관한다.ASP.NET에서 지원하는 다른 상태 관리 방법으로는 쿠키, 캐싱, 쿼리 문자열이 있다.
2. 7. 템플릿 엔진
ASP.NET은 처음 출시되었을 때 템플릿 엔진이 없었다. .NET Framework가 객체 지향 프로그래밍을 지원하고 상속을 허용했기 때문에 많은 개발자들이 "System.Web.UI.Page
"에서 상속받는 새로운 기본 클래스를 정의하고, HTML을 렌더링하는 메서드를 작성한 다음, 애플리케이션의 페이지가 이 새로운 클래스에서 상속받도록 했다. 이렇게 하면 사이트 전체에서 공통 요소를 재사용할 수 있지만, 복잡성이 증가하고 소스 코드와 마크업이 혼합되었다. 또한, 이 방법은 애플리케이션을 실행해야만 시각적으로 테스트할 수 있었고, 디자인하는 동안에는 테스트할 수 없었다. 다른 개발자들은 모든 페이지에서 동일한 탐색 및 기타 요소를 구현하는 것을 피하고자 헤더 파일 및 기타 방법을 사용했다.ASP.NET 2.0에서는 웹 템플릿 기반 페이지 개발을 허용하는 '마스터 페이지' 개념이 도입되었다. 웹 애플리케이션은 하나 이상의 마스터 페이지를 가질 수 있으며, ASP.NET 2.0부터 중첩될 수 있다.[13] 마스터 템플릿에는 동적 콘텐츠가 들어갈 위치를 나타내는 'ContentPlaceHolder'라는 자리 표시자 컨트롤과 자식 페이지에서 공유되는 HTML 및 JavaScript가 있다.
자식 페이지는 해당 ContentPlaceHolder 컨트롤을 사용하며, 콘텐츠 페이지가 채우는 마스터 페이지의 자리 표시자에 매핑되어야 한다. 페이지의 나머지 부분은 마스터 페이지의 공유 부분에 의해 정의되며, 이는 워드 프로세서의 메일 병합과 유사하다. 콘텐츠 페이지의 모든 마크업 및 서버 컨트롤은 ContentPlaceHolder 컨트롤 내에 배치해야 한다.
콘텐츠 페이지에 대한 요청이 이루어지면 ASP.NET은 콘텐츠 페이지의 출력과 마스터 페이지의 출력을 병합하여 사용자에게 보낸다.
마스터 페이지는 콘텐츠 페이지에서 완전히 접근할 수 있다. 즉, 콘텐츠 페이지는 헤더를 조작하고, 제목을 변경하고, 캐싱을 구성하는 등의 작업을 수행할 수 있다. 마스터 페이지가 공용 속성 또는 메서드(예: 저작권 고지 설정)를 노출하는 경우 콘텐츠 페이지에서도 이를 사용할 수 있다.
2. 8. 기타 파일
다음은 ASP.NET과 관련된 파일 확장자들이다.확장자 | 버전 | 설명 |
---|---|---|
asax | 1.0 | 전역 응용 프로그램 파일. 웹 응용 프로그램의 모든 웹 페이지에서 접근 가능한 전역 변수를 정의하는 데 사용된다. 주로 응용 프로그램 및 세션 객체와 관련된 전반적인 응용 프로그램 이벤트를 정의한다. Global.asax는 응용 프로그램 수준 로직에 사용된다.[14] |
ascx | 1.0 | 사용자 정의 컨트롤, 사용자 정의 컨트롤 파일 로직에 사용된다.[15] |
ashx | 1.0 | 사용자 인터페이스가 없는 사용자 지정 HTTP 처리기이다. |
asmx | 1.0 | 웹 서비스 페이지. 버전 2.0부터 asmx 파일의 코드 비하인드 페이지는 app_code 폴더에 배치된다. |
aspx | 1.0 | 웹 컨트롤 및 표현과 비즈니스 로직을 포함할 수 있는 ASP.NET 웹 폼 페이지이다. |
axd | 1.0 | web.config에서 활성화되면 trace.axd를 요청하여 응용 프로그램 수준의 추적을 출력한다. 또한 특수 webresource.axd 처리기에 사용되며, 이를 통해 컨트롤/구성 요소 개발자는 이미지, 스크립트, css 등과 함께 완전한 구성 요소/컨트롤을 하나의 파일(어셈블리)로 배포할 수 있다. |
browser | 2.0 | XML 형식으로 저장된 브라우저 기능 파일. ASP.NET 2는 일반적인 웹 브라우저를 지원하기 위해 기본적으로 이러한 파일 중 다수를 포함한다. 어떤 브라우저가 어떤 기능을 가지고 있는지 지정하여 ASP.NET 2가 그에 따라 출력을 자동으로 사용자 지정하고 최적화할 수 있도록 한다. |
config | 1.0 | web.config는 특정 웹 응용 프로그램에서 기본적으로 이 확장자를 사용하는 유일한 파일이다(machine.config도 마찬가지로 전체 웹 서버와 모든 응용 프로그램에 영향을 미침). ASP.NET은 다른 구성 파일을 만들고 사용할 수 있는 기능을 제공하며, 이러한 파일은 XML 형식으로 저장된다. |
cs/vb/fs | 1.0 | 코드 파일(cs는 C#, vb는 Visual Basic, fs는 F#을 나타낸다). 코드 비하인드 파일은 주로 ".aspx.cs " 또는 ".aspx.vb " 확장자를 갖는다. |
cshtml | 4.1 | Razor 구문을 사용하는 C# 및 HTML 혼합 뷰 |
dbml | 3.5 | LINQ to SQL 데이터 클래스 파일 |
edmx | 3.5 | ADO.NET Entity Framework 모델 |
master | 2.0 | 마스터 페이지 파일. 기본 파일 이름은 Master1.master이다. |
resx | 1.0 | 국제화 및 지역화를 위한 리소스 파일. 리소스 파일은 전역(예: 메시지) 또는 로컬(하나의 aspx 또는 ascx 파일에 특정)일 수 있다. |
sitemap | 2.0 | 사이트맵 구성 파일. 기본 파일 이름은 web.sitemap이다. |
skin | 2.0 | 테마 스킨 파일. |
svc | 3.0 | Windows Communication Foundation 서비스 파일 |
vbhtml | 4.1 | Razor 구문을 사용하는 VB 및 HTML 혼합 뷰 |
2. 9. 디렉토리 구조
ASP.NET 디렉터리 구조는 개발자의 선호에 따라 달라질 수 있지만, 몇몇 예약된 특수 디렉터리 이름이 존재한다.[16] 이 구조는 일반적으로 URL에 직접 반영된다.특수 디렉터리 이름 (ASP.NET 2.0 이상):[16]
디렉터리 이름 | 설명 |
---|---|
App_Code | "raw code" 디렉터리. 이 폴더의 파일(및 하위 디렉터리)은 자동으로 컴파일되어 사이트의 모든 페이지에서 액세스할 수 있다. 데이터 액세스 추상화 코드, 모델 코드, 비즈니스 코드 등에 사용된다. |
App_Data | ASP.NET 웹 사이트에서 사용하는 모든 데이터베이스의 기본 디렉터리. Access(mdb) 파일 또는 SQL Server(mdf) 파일 등이 포함될 수 있다. ASP.NET 웹 응용 프로그램에 쓰기 액세스가 활성화된 유일한 디렉터리이다.[17] |
App_GlobalResources | 사이트의 모든 페이지에서 사용할 수 있는 지역화된 리소스를 가진 resx 파일을 보관한다. 여러 페이지에서 사용되는 지역화된 메시지 등을 저장하는 곳이다. |
App_LocalResources | 특정 페이지에 대한 지역화된 리소스를 보관한다. 예를 들어 CheckOut.aspx.fr-FR.resx 파일은 CheckOut.aspx 페이지의 프랑스어 버전에 대한 지역화된 리소스를 보관한다. |
App_Offline.htm | 모든 응용 프로그램 요청에 대해 파일의 내용을 반환하여 응용 프로그램을 비활성화하는 파일 (디렉토리가 아님)이다. |
App_Themes | 웹 사이트 전체에서 일관된 모양을 유지하고 필요할 때 웹 사이트의 모양을 쉽게 변경할 수 있도록 도와주는 테마 관련 파일을 보관하는 폴더이다. |
App_WebReferences | 사이트에서 사용할 웹 서비스에 대한 참조를 위한 검색 파일 및 WSDL 파일을 보관한다. |
Bin | 컨트롤, 구성 요소 또는 응용 프로그램에서 참조하려는 기타 코드에 대한 컴파일된 코드(.dll 파일)를 포함한다. Bin 폴더의 코드는 응용 프로그램에서 자동으로 참조된다. |
ASP.NET은 서버 측 코드를 처음 사용할 때 하나 이상의 DLL 파일로 웹 서버에서 컴파일하여 다른 스크립트 기반 기술(클래식 ASP 포함)보다 성능상의 이점을 목표로 한다. 이러한 DLL 파일 또는 어셈블리는 공용 언어 런타임 내에서 실행하기 위한 MSIL(Microsoft Intermediate Language)을 포함한다. 이는 순수 스크립트 언어보다 성능 향상을 제공하며 JavaServer Pages와 유사하며 Python에서 사용되는 방식과 유사하다.[18] 이 컴파일은 페이지가 처음 요청될 때 자동으로 수행된다(개발자는 페이지에 대한 별도의 컴파일 단계를 수행할 필요가 없다).
ASP.NET 웹 폼은 프로그래머가 ASP 및 PHP와 같은 기존 웹 스크립팅 환경 대신 이벤트 기반 GUI 모델을 사용하여 애플리케이션을 개발하도록 권장한다. 이 프레임워크는 JavaScript와 "ViewState"와 같은 내부 구성 요소를 결합하여 본질적으로 상태 비저장 웹 환경에 지속적인 (요청 간) 상태를 제공한다.
3. 성능
이 기능은 스크립트 언어가 제공하는 개발 용이성과 컴파일된 바이너리의 성능 이점을 제공한다. 그러나 컴파일은 새로 편집된 페이지가 웹 서버에서 처음 요청될 때 사용자에게 눈에 띄지만 짧은 지연을 유발할 수 있지만, 요청된 페이지가 더 이상 업데이트되지 않으면 다시 발생하지 않는다.
ASPX 및 기타 리소스 파일은 인터넷 정보 서비스 서버(또는 기타 호환되는 ASP.NET 서버, 아래 기타 구현 참조)의 가상 호스트에 배치된다. 클라이언트가 처음 페이지를 요청하면 .NET Framework가 파일을 구문 분석하고 .NET 어셈블리로 컴파일하여 응답을 보낸다. 후속 요청은 DLL 파일에서 제공된다. 기본적으로 ASP.NET은 처음 요청 시 전체 사이트를 1000개의 파일 묶음으로 컴파일한다. 컴파일 지연으로 문제가 발생하는 경우 일괄 처리 크기 또는 컴파일 전략을 조정할 수 있다.
개발자는 또한 Microsoft Visual Studio를 사용하여 배포 전에 "코드 비하인드" 파일을 미리 컴파일하여 프로덕션 환경에서 JIT 컴파일의 필요성을 없앨 수도 있다.[19] 이렇게 하면 웹 서버에 소스 코드를 보관할 필요도 없어진다. 또한 텍스트 사전 컴파일도 지원한다.
4. ASP.NET과 클래식 ASP의 비교
클래식 ASP와 비교한 다른 차이점은 다음과 같다.
5. 비판 및 한계
ASP.NET 웹 폼은 윈도우 애플리케이션 개발자들이 웹 개발로 쉽게 전환할 수 있도록 설계되었지만, 몇 가지 비판과 한계점이 존재한다.
- 표준 준수 부족 (2.0 이전 버전): 클라이언트 브라우저로 전송되는 HTML 및 JavaScript가 W3C/ECMA 표준을 항상 준수하지는 않았다.[1] 또한, 프레임워크의 브라우저 감지 기능이 인터넷 익스플로러가 아닌 다른 웹 브라우저를 잘못 식별하여 기능이 제한되거나 손상된 출력을 반환하는 경우도 있었다.[1]
- 웹 서버 컨트롤: 웹 폼의 UI를 제공하기 위해 도입된 상태 관리형 WYSIWYG 컨트롤은 때때로 복잡한 동작을 유발할 수 있다.[1]
하지만, 버전 2.0부터는 이러한 문제점들이 개선되어, 사이트 구성에 따라 모든 컨트롤이 유효한 HTML 4.0, XHTML 1.0 (기본값) 또는 XHTML 1.1 출력을 생성한다.[1] 표준 준수 웹 브라우저 감지가 더욱 강화되었고, 캐스케이딩 스타일 시트 지원도 확대되었다.[1]
참조
[1]
웹사이트
What is Web Forms
https://docs.microso[...]
2023-06-15
[2]
웹사이트
ASP.NET View State Overview
https://msdn.microso[...]
2014-12-04
[3]
웹사이트
Choose between ASP.NET and ASP.NET Core
https://docs.microso[...]
2024-04-10
[4]
뉴스
Overview of ASP.NET and Web Forms
http://msdn.microsof[...]
Microsoft
2001-11
[5]
서적
[6]
웹사이트
Web Application Projects versus Web Site Projects in Visual Studio
https://msdn.microso[...]
2013-08-26
[7]
웹사이트
Code Behind vs. Code Inline
http://quickstarts.a[...]
Microsoft
2010-11-22
[8]
웹사이트
aspx.designer.cs how does it work?
"//stackoverflow.com[...]
2015-09-10
[9]
웹사이트
ASP.NET Web Page Syntax Overview
http://msdn.microsof[...]
Microsoft
2010-11-22
[10]
웹사이트
INFO: ASP.NET State Management Overview
http://support.micro[...]
2007-10-23
[11]
웹사이트
ViewState in ASP.NET
http://www.extremeex[...]
2007-10-23
[12]
웹사이트
Encrypting Viewstate in ASP.NET
http://msdn.microsof[...]
2009-07-19
[13]
웹사이트
ASP.NET Master Pages
http://msdn2.microso[...]
Microsoft
2014-12-04
[14]
웹사이트
Global.asax Syntax
http://msdn.microsof[...]
Microsoft
[15]
웹사이트
Turning an .ascx User Control into a Redistributable Custom Control
http://msdn.microsof[...]
Microsoft
2011-06-24
[16]
웹사이트
ASP.NET Web Project Folder Structure
http://msdn2.microso[...]
Microsoft
2014-12-04
[17]
웹사이트
ASP.NET Directory Structure
http://aspnet4.com/a[...]
2018-06-16
[18]
서적
[19]
웹사이트
ASP.NET Web Site Project Precompilation Overview: Performing Precompilation
https://msdn.microso[...]
2014-12-04
[20]
Github
pygments/tests/examplefiles/aspx-cs/aspx-cs_example.aspx
https://github.com/p[...]
[21]
웹인용
What is Web Forms
https://docs.microso[...]
[22]
웹인용
ASP.NET View State Overview
https://msdn.microso[...]
[23]
웹인용
Choose between ASP.NET and ASP.NET Core
https://docs.microso[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com