기술지원 문의

세션공유관련 문의 답변
권용찬 / 2006-08-23 10:41

서버이전중이라 작성하신 내용이 보이지 않을 수 있습니다. 아래는 문의내용에 대한 답변입니다.

 

[답변]Session 공유를 위한 설정법 문의

세션에 대해서 일단 구분을 조금 하겠습니다.

말씀하신 세션은 Application에서 사용되는 JAVA Session즉 JSESSIONID로 통칭되는 키 값을 가지고 메모리상에 생성되는 세션을 의미하고 이 세션은 하나의 컨텍스트(도메인이라고 생각하셔도 됩니다.) 내에서 유일하게 존재하고 다른 컨텍스트의 세션정보를 참조할 수 없는 것이 JAVA Spec의 표준입니다.

 

Servlet Spec Version 2.3 에서 context간의 session 공유는 불가능하다고 명세되어 있습니다. 물론 엔진 벤더에 따라 이를 가능하게한 경우도 있습니다만 원칙적으로는 불가능합니다.
다음은 Java Servlet Specification Version 2.3 Document 50페이지 SRV.7.3 Session Scope 내용입니다.

SRV.7.3 Session Scope

HttpSession objects must be scoped at the application (or servlet context) level.
The underlying mechanism, such as the cookie used to establish the session, can be
the same for different contexts, but the object referenced, including the attributes
in that object, must never be shared between contexts by the container.
To illustrate this requirement with an example: if a servlet uses the RequestDispatcher
to call a servlet in another web application, any sessions created for and visible
to the callee servlet must be different from those visible to the calling servlet.

그럼 WAS수준에서의 세션공유라는 것은 위의것과 무엇이 다른가?

이것은 WAS서버가 여러대 또는 동일서버에 동일한 컨텍스트의 여러 인스턴스가 존재할 경우 인스턴스간에 사용자의 로그인세션 정보를 공유해서 하나의 인스턴스에 문제가 발생할 경우 다른 인스턴스에서 사용자 세션을 유지해 줌으로써 서비스를 유지시켜 주는 기능을 의미합니다.

 

단순하게 다시 정리하면

필요로 하는 기능이 www.a.comwww.b.com 간의 세션을 공유하기 원하신하면 WAS간의 세션 복제기능은 www.a.com 이 여러대의 서버에 분산되어 있을때 다른 서버에도 www.a.com에 접근한 세션정보를 공유하는 것으로 

WAS간에 세션 복제기능을 활성화 하더라도 www.a.com의 세션 정보를 www.b.com에서 접근할 수 없습니다.

 

잘 생각해보면 이러한 Spec상의 제한은 당연하다고 보시면 되겠습니다. a.com Application 개발자와 b.com Application 개발자가 다를경우 동일한 Session Var name을 사용할 경우 컨텍스트별로 구분되지 않을 경우 세션에 저장되는 정보가 꼬여서 Application에 문제를 유발 시킬 수 있겠지요?

 

질문하신 분의 요구사항을 충족시키는 방법은 두가지 입니다.

1. 세션을 공유하기 위한 모듈을 개발합니다.

세션이 생성될때 마다 각 서버에서 공유가능한 DB나 NFS에 정보를 저장하고 이 정보를 모두 읽어서 처리하도록 개발

2. Multi Domain을 지원하는 SSO솔루션 사용

멀티도메인(컨텍스트)간의 세션 공유문제는 SSO를 구현하고자 하는 중소사이트 부터 대형 사이트까지 오래전부터 요구되던 기능으로 이미 시장에 해당 기능을 구현한 많은 제품들이 출시되어 있습니다.

 

다시한번 정리해드리면 어떠한 WAS에서도 WAS의 기능중에서 세션공유라는 기능이 Application상에서 다른 컨텍스트의 세션에 접근할 수 있도록 허용하는 기능으로 동작하는 제품은 없습니다.

 

필요로 하시는 부분은 프로그램 개발 수준에서 해결 하셔하구요 ^^;

 

검색엔진에서 \"컨텍스트 세션 공유 도메인\" 등의 기워드로 검색하시면 참조하실만한 내용을 보실수 있을 겁니다.

 

즐거운 하루되세요