ASP.NET 2.0에서 강력해진 웹 어플리케이션 관리 기능과 웹 페이지 관리 기능에 대해 학습해보자. 이 장부터는 전문적이고 반드시 이해를 해야 할 이슈들이 나오기 시작한다. 학습에 집중하도록 하자
- ASP.NET 2.0 페이지 생성 모델
- 인라인 코딩 모델
ASP.NET 1.0 과는 다르게 ASP.NET 2.0은 페이지 단위로 비지니스 로직을 코딩할 수 있다.
[표. 인라인 코딩 모델을 적용할 수 있는 ASP.NET 페이지 유형]
페이지 유형 | 파일 확장명 |
---|---|
[Web Form] | .aspx 파일 |
[Master Page] | .master 파일 |
[Web User Control] | .ascx 파일 |
[Web Service] | .asmx 파일 |
- 코드 비하인드 모델
비지니스 로직을 별도의 파일을 구성할 수 있으며 ASP.NET 2.0 부터는 분할 클래스(partial)르 지원한다.
[표. 코드 숨김 모델을 적용할 수 있는 ASP.NET 페이지 유형]
페이지 유형 | 파일 확장명 |
---|---|
[Web Form] | .aspx파일 => .aspx.cs / .aspx.vb |
[Master Page] | .master 파일 => .master.cs / .master.vb |
[Web User Control] | .ascx 파일 => .ascx.cs / .ascx.vb |
[Web Service] | .asmx 파일 => .asmx.cs / .asmx.vb |
- ASP.NET 지시문
ASP.NET 페이지에서 핵심적인 부분으로 ASP.NET 페이지나 유저 컨트롤에 적용할 수 있는 지시문은 11개가 있다.
지시문은 페이지를 컴파일 할 때 컴파일러가 사용하는 명령으로 다음과 같은 Syntax를 가진다.
<%@ [Directive] [Attribute=Value] [Attribute=Value] ... %>
지시문은 관행적으로 페이지에 맨 앞에 두는 데 다른 곳에 두어도 컴파일시 문제는 없다. ( 그러나 코드 가독성 및 중요도에서 이 방법이 좋다. )
- ASP.NET 2.0 지시문 <MSDN>
- Assembly => 어셈플리를 Page 클래스나 유저 컨트롤에 연결하는 지시문이다.
- Control => 유져 컨트롤(.ascx)을 제어하는 지시문이다.
- Implements => 닷넷 프레임워크의 특정 인터페이스를 구현하는 지시문이다.
- Import => Page 클래스나 유져 컨트롤에 특정 네임스페이스를 참조하는 지시문이다.
- Master => 마스터 페이지를 제어하는 지시문이다. 이 지시문의 특성과 값으로 마스터 페이지의 파싱과 컴파일을 제어한다. 이 지시문은 오직 마스터 페이지(.master)에서만 사용한다.
- MasterType => Page 클래스의 Master 속성에서 특정 마스터 페이지를 참조할 때 강력한 타입 참조를 제어하는 지시문이다.
- OutputCache => Page 클래스나 유져 컨트롤의 출력 캐시 정책을 제어하는 지시문이다.
- Page => 페이지를 제어하는 지시문이다. 이 지시문의 특성과 값으로 ASP.NET 페이지의 파싱과 컴파일을 제어한다. 이 지시문은 오직 ASP.NET 페이지(.aspx) 에서만 사용한다.
- PreviousPageType => ASP.NET 어플리케이션에서 페이지 간 포스트백(POSTBACK) 을 다루는 지시문이다.
- Reference => Page 클래스나 유저 컨트롤을 현재 사용하는 Page 클래스나 유저 컨트롤에 연결하는 지시문이다.
-
Register => 별칭을 사용해서 유저 컨트롤과 커스텀 서버 컨트롤의 네임스페이스와 클래스 이름을 나타내는 지시문이다.
- ASP.NET 페이지 이벤트
특정 컨트롤과 관련하여 이벤트 구현을 서버 측 코드에서 구현한다.
ASP.NET 2.0 페이지 생성 과정 이벤트
- PreInit
- Init
- InitComplete
- PreLoad
- Load
- LoadComplete
- PreRender
- PreRenderComplete
- Unload
- 포스트백 다루기
포스트백이란 페이지 정보를 스스로에게 다시 알려주는 동작이다. 따라서 ASP.NET 페이지에서는 어떤 요청이 들어올 때 이 요청이 포스트백인지 아닌지 반드시 먼저 확인할 필요가 있다.
- 페이지 간 포스팅
한페이지에서 다른 페이지로 모든 컨트롤 값을 전달, 웹 어플리케이션 개발시 가장 빈번히 발생하는 문제이다.
- ASP.NET 어플리케이션 폴더
- App_Code 폴더
클래스나 .wsdl 파일 및 형식화된 데이터 셋 등이 저장되는 폴더. 여기에 저장된 항목은 솔루션 내의 모든 페이지에서 동적으로 활용될 수 있다.
파일이 저장됨과 동시에 비주얼 스튜디오에서 자동 컴파일 된다. 또한 App_Code 폴더에 추가된 모든 파일은 하나의 단일한 어셈블리로 컴파일 되며 특정 프로그래밍 언어에 제약을 받지 않는다. 여기서 유의할 점은 단일한 어셈블리로 구현되므로 서로 다른 프로그래밍 언어를 사용하는 클래스는 함께 있을 수 없다. 따라서 서로 다른 프로그래밍 언어를 사용하려면 다음과 같이 폴더 구조를 나누고 web.config파일을 수정해야 한다.
[App_Code 폴더 구조]
\App_Code
-
VB
-
Add.vb
-
-
CS
-
Subtract.cs
-
[web.config 수정 항목]
<compilation>
<codeSubDirectories>
<add directoryName="CS"></add>
<add directoryName="VB"></add>
</codeSubDirectories>
</compilation>
- App_Data 폴더
어플리케이션이 사용하는 데이터 저장소. 예를 들면 .mdf, .mdb, .xml등의 데이터 파일을 저장한다. 어플리케이션을 구동하는 계정은 이 폴더안에 있는 모든 파일에 읽기와 쓰기 권한을 가진다.
- App_Themes 폴더
모든 페이지에 일관된 룩앤필을 제공하는 새로운 기법. .skin 파일, css 파일, 이미지 등으로 구현
- App_GlobalResources 폴더
리소스 파일은 어플리케이션에서 데이터 사전 용도롤 활용하는 문자열 테이블. .resx 파일을 추가하면 이 파일은 동적으로 컴파일되며 어플리케이션의 모든 .aspx 페이지에서 사용 가능
- App_LocalResources 폴더
특정 .aspx 페이지에만 리소스를 적용할 경우 이 폴더를 사용. 예를 들면 Default.aspx.resx, Default.aspx.fi.resx 와 같다.
- App_WebReferences 폴더
웹 참조 폴더. 어플리케이션에서 참조하는 원격지의 웹 서비스에 자동으로 엑세스 할 수 있다.
- App_Browsers 폴더
.browser파일을 저장하는 곳. 이파일은 요청한 브라우져가 무엇인지 식별하고 그 브라우져에서 제공하는 기능을 이해하는 데 사용하는 XML 파일. 기본 설정 내용은 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers폴더에서 찾을 수 있다.
- 컴파일
ASP.NET 어플리케이션의 구동 프로세스 상에서 브라우져 요청페이지의 빠른 응답을 위해서 사전 컴파일 방법을 수행한다.
컴파일러 위치 : C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler.exe
- 전체 어플리케이션 컴파일 방법
aspnet_compiler -p "C:\Inetpub\wwwroot\HOME" -v none
- 전체 어플리케이션 배포 컴파일 방법 (DLL만 배포)
aspnet_compiler -v [Application Name] -p [Physical Location] [Target]
- 컴파일 옵션
- -m
애플리케이션의 IIS 메타베이스 전체 경로를 지정한다. 만일 -m 명령어를 사용하면 -v 명령어나 -p 명령어를 사용할 수 없다.
- -v
컴파일될 어플리케이션의 가상 경로를 지정한다.
- -p
컴파일될 어플리케이션의 물리적 경로를 지정한다.
- targetDir
컴파일될 파일이 어디에 위치해야 하는지 목표 디렉토리를 지정한다.
- 전역 어플리케이션 클래스 : Global.asax
어플리케이션 수준의 이벤트, 개체, 변수 등을 관리하는 파일
처리 가능한 이벤트
- Application_Start
어플리케이션 요청이 처음 전달될 때 호출. 모든 사용자에게 반드시 유지되어야 하는 사항을 저장하는데 최적의 장소
- Session_Start
각 사용자마다 어플리케이션을 처음 엑세스 할 때 발생
- Application_BeginRequest
모든 요청이 어플리케이션에 들어오기 직전에 호출
- Applicatio_AuthenticateRequest
각 요청마다 호출되며 이 이벤트를 사용하면 해당 요청에 대한 사용자 맞춤형 인증을 설정할 수 있다.
- Application_Error
어플리케이션 임의의 지점에서 오류가 발생하면 호출
- Session_End
세션상태가 InProc 모드로 동작할 경우에만 지원되며 세션이 만료되면 호출
- Application_End
어플리케이션이 종료될 때 호출
이 글은 스프링노트에서 작성되었습니다.
댓글 없음:
댓글 쓰기