이전에 ASP를 사용했던 분이라면 ASP.NET의 많은 부분들이 친근하게 느껴질 것입니다. 비록 ASP.NET의 기본 코드가 Object-Oriented design 이라 할지라도 ASP에서 사용된 연산자나 키워드들이 대부분 ASP.NET 안에 남아 있습니다.

이전 ASP에서 가장 친숙하게 쓰였던 기본적인 객체들로 Request, Response, Server, Application 그리고 Session이 있는데, 이것들은 현재 ASP.NET의 한 부분에서 여전히 사용되고 있습니다.  ASP.NET 안에서 이 객체들은 System.Web 네임스페이스 안에 새로운 클래스로 정의되어 있습니다. 이 객체들은 코드를 작성하는데 있어 새로운 객체를 인스턴스화 하지 않고서도 요청을 할 수 있다. 예를 들어 이 본질적인 객체들이 System.Web.HTTPContext 클래스의 현재의 집합이고, 새로운 context를 생성하고 웹 리소스에 대해 새로운 요청을 했을 때, 사용자가 새로운 객체를 인스턴스화 하지 않아도 ASP.NET이 자동적으로 객체를 생성합니다..

특징적으로 기본 Request 객체는 HttpContext 클래스의 프로퍼티로 정의 됩니다. 왜냐하면 HttpContext.Request 프로퍼티가 HttpRequest의 타입이기 때문에 ASP.NET 기본 Request 객체는 그것을 위해 HttpRequest의 모든 프로퍼티와 메소드들 자동적으로 가질 수 있습니다. 사용자는 단순하게 Request.ContentLength를 기입하면 클라이언트 브라우저가 보내고 콘텐츠의 길이, 바이트를 얻어오게 됩니다.

몇몇의 ASP.NET 객체들은 이전 ASP 때 처럼 Request.Write("some output")와 같이 사용하면 됩니다.

부가적으로 Request.QueryString, Request.Form, Request.ServerVariables는 ASP시절에는 아주 간단한 Collections으로 되어 있었다. 그러나 ASP.NET에서는 NameValueCollection 타입으로 수 많은 멤버들을 포함하고 있다.(MSDN 참고) 그렇다 하더라도 다음 예제와 같이 ASP때 처럼 쉽게 쓸수 있습니다.
svrname = Request.ServerVariables("SERVER_NAME")

아래는 이 기본적이고 중요한 객체인 ASP.NET Web Applications에서 Page와 Application의 설명 목차 입니다.
객체이름 사 항 ASP.NET Class
Response 현재 페이지에 output stream을 위한 access를 제공한다. 이 클래스를 이용하여 page,cookies 쓰기 뿐만 아니라 다른 것들에도 text를 넣을 수 있다. HttpReaponse
Request 현재 페이지 요청, 헤더, 쿠키, 클라이언트 증명서, 쿼리 문자열 등에 관한 요청에 access를 제공한다. 이 클래스를 이용하여 브라우저가 보낸 것을 읽을 수 있다. HttpRequest
Content 전체 현재 context에 대한 access를 제공한다. 이 클래스는 페이지와 정보를 공유하기 위해서 사용된다. HttpContext
server 가장 최근의 에러, encode와 decode HTML text 와 같은 정보를 transfer control을 사용하여 utility method에 표현한다. HttpServerUtility
Application 모든 Session에 대한 이벤트와 application-wide 메소드에 엑세스를 제공한다. HttpApplicationState
Session 현재의 사용자 세션의 정보를 제공한다. HttpSessionState
Trace HTTP page 출력물에 system과 custom 의 trace diagnostic message를 얻는 방법을 제공한다. TraceContext

다음으로 Application, Session ,Response, Request, Server를 다뤄 보겠습니다.
이번 주에는 먼저 Application과 Session을 설명하겠습니다.

1. Application 상태변수에 값을 저장하기

1-1. 프로젝트에 global.asax 파일을 추가한다.



1-2. global.asax 파일을 열고 void Application_Start(Object sender, EventArgs e){} 부분에 아래의 내용을 입력합니다.
protected void Application_Start(Object sender, EventArgs e)
{
   Application["AppCount"] = 0; // Application 상태 변수 만들기
   Application["SessCount"] = 0;

   Application["AppCount"] = (int)Application["AppCount"]+1; // 응용프로그램 시작 횟수 기록
}

1-3. 다음으로 새로운 웹 폼 페이지 파일을 하나 생성합니다.
1-4. 새로운 웹 폼 페이지에 ToolBox에서 Label을 끌어다가 놓습니다.


1-5. 웹 폼 페이지의 .cs 파일에 아래와 같이 코딩합니다.
void Page_Load(object sender, EventArgs e)
{
   Label1.Text = Application["AppCount"].ToString();
}

1-6. 컴파일 한 후 실행하면 아래 처럼 Application 상태 변수에 값이 할당되어 출력되는 것을 확인 할 수 있습니다.

2. Session 상태변수에 값을 할당하기
2-1. Application 상태 변수에 값 할당하기 에서 사용했던 global.asax 파일을 오픈합니다.
2-2. void Session_Start(Object sender, EventArgs e) 파일에 아래의 코드를 입력합니다.
void Session_Start(Object sender, EventArgs e) {
   Application["SessCount"] = (int)Application["SessCount"] + 1;
}

void Session_End(Object sender, EventArgs e) {
   Application["SessCount"] = (int)Application["SessCount"] - 1;
}

2-3. 결과는 아래의 화면과 같습니다.


Application과 Session을 만드는데 있어 코드는 큰 차이점이 없습니다.
그러나 Application과 Session은 역할은 개념에서 차이점이 있습니다. Application을 버스라 가정하고, 승객을 Session이라 하면 맞을까요?
즉, Application은 하나의 큰 흐름의 시작과 끝입니다. 버스가 출발지에서 종착지 까지 가는 원리와 비슷한 거죠... 그럼 Session은??
하나의 큰 Application 흐름 안에는 정류장을 이용하여 타고 내리는 승객처럼 여러개의 Session을 가질 수 있습니다. 이 Session 역시 시작과 끝이 존재하지요...
옆으로 조금 벗어났지만 이해하시는데는 큰 어려움이 없었을 거라 생각합니다.

+ Recent posts