ASP .NET 의 Session 관리 방법

State Server 모드

정의: ASP .NET의 세션 관리만 담당하는 서비스로서 IIS가 관리하던세션 관리를 전용 프로세스에게 위탁하는 서비스이다.

 

장점

1.       웹 서버의 메모리 부하를 분산
예를 들어, 복수의웹서버와 1대의 세션 관리 서버가 존재하는 경우에 유저가 증가하면세션 관리 서버의 메모리만 증가시키면 된다(각 웹서버의메모리를 증설할 필요가 없다).

2.       어플리케이션을 재기동해도 세션 유지가 가능
웹 어플리케이션 또는 aspnet_wp.exe 가 재기동되는 경우

       global.asaxweb.config가 경신된 경우

       web.config<processModel> 요소 중에서프로세스 재기동 조건으로서 requestLimitmemoryLimit 가 설정되어 있고, 그 조건에 부합하는 경우

       /bin 폴더내의어셈블리를 경신한 경우

       어플리케이션 장해로 웹서버를 재기동해야 하는 경우

위와 같은 경우에도 세션 관리 서버는그대로 유지되므로 세션 정보를 손실할 우려가 없다.

3.       여러 대의 웹 서버가 세션 공유 가능

단점

세션 정보를 관리 프로세스가 관리하므로, 세션 정보의 참조나 설정시 관리 프로세스에 액세스해야 한다. 동일 프로세스로의 액세스와 비교하면 오버헤드가 증가하므로, 오버헤드로 인한 손실이 위의 장점보다 큰 경우에는 사용하지 말 것을 권장한다.

 

기동 순서

1.       State 서비스의 기동
관리 도구 -> 서비스 -> ASP.NET State Service 를 시작

2.      State 서비스의 활성화
web.config
sessionState 요소를 이하와 같이 설정한다(가상 디렉터리안에있는 web.config만 설정할 수 있다).
<?xmlversion="1.0" encoding="UTF-8" ?>
<configuration>
  <system.web>
    <sessionStatemode="StateServer"
     stateConnectionString="tcpip=127.0.0.1:42424"
      stateNetworkTimeout="10"/>
  </system.web>
</configuration>

3.       서비스의 기동 확인
작업 관리자 -> 프로세스 에서 aspnet_state.exe 가 기동되고있는지 확인한다.

 

 

다른 방법

SQL Server로 세션 정보를 관리하는 방법

정의: 세션 정보를SQL Server의 테이블에 보존하므로 세션 정보가 늘어나도 메모리부하는 증가하지 않는다.

필요성: State Service로 세션 정보를 관리하는 것도 결국 메모리상에서 관리하는 방법이므로, DataSet오브젝트와 같이 대량의 데이터를 세션 정보로서 관리하는 경우에는 State Service 서버의 메모리 부하도 증가하게 된다.

 

기동 순서

1.       다음과 같이osql 커맨드를 사용하여 C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322 (Windows XP의 경우) 폴더의 InstallSqlState.sql파일 안에 있는 내용을 복사하여 붙여넣기한다.
> osql -U sa
패스워드 : **
1>
USE master
GO
/* Drop the database containing our sprocs */
IF DB_ID('ASPState') IS NOT NULL BEGIN
DROP DATABASE ASPState
END
이하 생략

정상적으로 완료되면 ASPState(세션 조작용 StoredProcedure) DBtempdb(세션 보관용 테이블) DB가 생성된다.

2.       SQL Server 활성화
web.conf
sessionState 요소를 다음과 같이 설정한다
<?xmlversion="1.0" encoding="UTF-8" ?>
<configuration>
  <system.web>
    <sessionStatemode="SQLServer"
      sqlConnectionString="DataSource=(local);user id=sa;password=sa" />
  </system.web>
</configuration>

 

부하 측면에서는SQLServer > State Service > Inprocess 순이므로, 속도는Inprocess가 가장 빠르다. 따라서 자신의 환경에 가장 적합한 관리 방법을 선택하는것이 중요하다고 할 수 있다.

by Jang | 2008/10/16 17:14 | Memo | 트랙백

트랙백 주소 : http://misman95.egloos.com/tb/2100058
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

◀ 이전 페이지          다음 페이지 ▶