Data Analysis for Investment & Control
[ASP.NET] 상태관리 - Cookie, Session 본문
본 내용은 도서 <ASP.NET 4.5.1 웹 프로그래밍>의 내용을 참고하였습니다.
상태관리(State management)란 웹 페이지 요청과정에서 저장 유지되어야 할 상태 정보를 관리하는 프로세스이다. 상태 정보는 웹 페이지 요청 과정에서 생성되는 정보로서 웹 페이지가 정해진 로직대로 정상적으로 동작하는 데 필요한 모든 형태의 정보를 말한다. 예를들면, 다음과 같은 것들이 있다.
- 인증 정보
- 권한 정보
- 회원 정보
상태 관리 옵션은 상태 정보의 저장 위치에 따라 클라이언트 측 상태 관리 옵션과 서버 측 상태 관리 옵션으로 나뉜다.
클라이언트 측 상태 관리 옵션 다음과 같다.
- 숨겨진 필드, Hidden Field
- 뷰 상태, View State
- 컨트롤 상태, Control State
- 쿠키, Cookie
- 쿼리 문자열, Query String
서버 측 상태 관리 옵션은 다음과 같다.
- 응용프로그램 상태, Application State
- 세션 상태, Session State
- 프로필 속성, Profile Property
- 데이터베이스, Database
클라이언트 측 상태 관리 옵션은 상태 정보를 저장할 때 서버 리소스를 사용하지 않으므로 서버를 가볍게하여 부하를 줄이고 서버의 수행 속도를 빠르게 할 수 있지만 상태 정보를 클라이언트 측에 저장하기 때문에 보안에 취약하며 저장할 수 있는 정보의 양이 제한적이다.
쿠키, Cookie
쿠키는 상태 정보를 저장하는 임시 파일로 클라이언트 측 컴퓨터에 저장된다. 사용방법은 다음과 같다.
Reponse.Cookies["키"].Value = 값;
변수 = Request.Cookies["키"].Value;
또한 HttpCookie 클래스를 사용하면 좀 더 구조적으로 정보를 저장하고 사용할 수 있다.
[저장]
HttpCookie cookie = new HttpCookie("키");
cookie.Values.Add("키1", 값1);
cookie.Values.Add("키2", 값2);
Response.Cookies.Add(cookie);
[참조]
HttpCookie cookie = Request.Cookies["키"];
변수1 = cookie.Values["키1"];
변수2 = cookie.Values["키2"];
세션, Session
네트워크에서 말하는 세션은 사용자 간 또는 컴퓨터 간의 통신을 위해 형성된 논리적 연결을 의미한다. 특히, 웹 환경에서는 웹 브라우저와 웹 서버 간의 논리적 연결이 바로 세션인데 기본적으로 한 웹 브라우저 당 하나의 세션이 생성된다고 이해를 하면 된다.
세션 상태 정보를 기본적으로 웹 서버 메모리에 저장된다. 그리고 세션 상태는 식별자라고 불리는 고유한 세션 ID를 생성한 후에 이 세션 ID를 서버(메모리)와 클라이언트(쿠키)에 각각 저장함으로써 각각의 세션을 식별한다.
예를 들면, 클라이언트에서 요청이 들어오면 서버는 클라이언트에서 전달된 세션 ID를 서버에 있는 것과 비교하여 해당 클라이언트가 어느 세션과 연결되어 있는지 식별한다. 그리고 웹 서버의 메모리에 저장되어 있는 세션 상태 정보는 웹 서버가 중지되거나 웹 응용 프로그램 프로세스가 다시 시작될 때 삭제되는데 그래서 ASP.NET에서는 다양한 방식으로 세션 상태를 유지할 수 있도록 아래와 같이 다양한 세션 상태 모드를 제공한다.
In-Process 모드 : 웹 서버의 메모리에 세션 상태 정보를 저장한다. 이 모드는 기본 모드로 아무런 설정을 하지 않으면 이 모드가 사용된다.
State Server 모드 : ASP.NET 상태 서비스라고 하는 별도의 프로세스에 세션 상태 정보를 저장한다. ASP.NET 상태 서비스 프로세스는 웹 응용 프로그램 프로세스와 별개로 동작하는 프로세스이므로 이 모드를 사용하면 웹 응용 프로그램 프로세스가 다시 시작되더라도 세션 상태 정보가 그대로 유지된다.
SQL Server 모드 : SQL Server 데이터베이스에 세션 상태 정보를 저장한다. 이 모드를 사용하면 웹 응용 프로그램 프로세스가 다시 시작되더라도 세션 상태 정보가 그대로 유지된다.
사용자 지정 모드 : 세션 상태 저장소 공급자를 따로 구현하여 세션 상태 정보를 저장한다.
Off 모드 : 세션 상태를 비활성화한다.
위의 모드를 처리 속도와 안정성을 비교하면 다음과 같다.
처리 속도 : In-Process > State Server > SQL Server
안정성 : In-Process < State Server < SQL Server
세션 상태모드는 web.config 파일에서 <sessionState> 요소의 mode 특성을 통해 설정할 수 있다.
<system.web>
<sessionState mode="InProc"></sessionState>
</system.web>
<sessionState> 요소에 timeout 특성을 지정하여 세션 상태의 만료 시기를 설정할 수 있다. timeout 특성에는 분 단위의 정수 값을 지정할 수 있는데, 525,600분(1년)보다 큰 값을 지정할 수는 없으며, 만약 특성을 지정하지 않으면 기본값인 20(분)이 지정된다.
<system.web>
<sessionState timeout="20"></sessionState>
</system.web>
세션 상태에 정보를 저장하고 참조할 때는 Session 속성을 사용하면 된다.
[저장]
Session["키"] = 값;
[참조]
변수 = Session["키"];
Session 속성은 컬렉션 형식으로 구성되어 있으므로 위와 같이 키(Key)를 통해 해당 세션 상태에 접근하면 된다.
'Code' 카테고리의 다른 글
MySQL에서의 DateTime 오류 - Closed (0) | 2017.03.29 |
---|---|
[리뉴얼] DB 테이블 리스트 (0) | 2010.11.02 |
안드로이드란 무엇인가? - What is Android? (0) | 2009.07.05 |
삼성 옴니아 핸드폰 해킹 - 안드로이드 포팅 (1) | 2009.07.05 |
안드로이드(Android) 어플리케이션 개발 환경 설정 (2) | 2009.07.03 |