세션 관리 지원
WebSphere® Application Server는 세션 관리 표제 아래에 서블릿 API 스펙에 설명된 javax.servlet.http.HttpSession 인터페이스를 지원하는 기능을 그룹화하여 제공합니다.
서블릿 2.3 API 스펙에 따라, 세션 관리 기능은 웹 모듈에 의한 세션 범위 지정을 지원합니다. 동일한 웹 모듈에 있는 서블릿만이 특정 세션과 연관된 데이터에 액세스할 수 있습니다. 각 요청이 하나의 고유 웹 애플리케이션을 지정하는, 동일 브라우저로부터 요구되는 다중 요청은 공유 세션 ID를 가진 다중 세션이 됩니다. 세션 ID를 공유하는 세션은 다른 세션에 영향을 주지 않을 경우 무효화될 수 있습니다.
각 웹 애플리케이션용 세션 제한시간을 구성할 수 있습니다. 웹 애플리케이션 제한시간 값 0(기본값)은 세션 관리 기능에서 지정한 무효화 제한시간 값이 사용됨을 의미합니다.
HTTP 클라이언트가 서블릿과 상호작용하면, 일련의 클라이언트 요청과 연관된 상태 정보가 HTTP 세션으로 나타나며 세션 ID로 식별됩니다. 세션 관리는 쿠키 사용 또는 URL 다시 쓰기 기법을 통한 각 클라이언트 요청과 연관된 세션 ID 추적, 세션 ID 할당, 세션 데이터 기억장치 제공 및 HTTP 세션 관리를 책임집니다. 세션 관리는 다음과 같은 여러 방식으로 세션 관련 정보를 저장합니다.
- 애플리케이션 서버 메모리에서(기본값). 이 정보는 다른 애플리케이션 서버와 함께 공유할 수 없습니다.
- 데이터베이스에서, 이 기억장치 옵션을 데이터베이스 지속 세션이라 합니다.
다른 WebSphere Application Server 인스턴스에서, 이 기억장치 옵션을 메모리 대 메모리 세션이라 합니다.
마지막 두 개 옵션은 분배 세션이라 언급됩니다. 분산 세션은 장애 조치(failover) 기능을 위해 HTTP 세션을 사용할 경우 필수적입니다. 애플리케이션 서버가 지금 현재 메모리에 없는 세션 ID와 연관된 요청을 수신하면 외부 저장(데이터베이스 또는 메모리 대 메모리)에 액세스하여 필수 세션 상태를 확보할 수 있습니다. 분산 세션이 사용 불가능한 경우, 애플리케이션 서버는 원래 세션이 생성된 서버가 아닌 다른 서버에 전송된 HTTP 요청에 대한 세션 정보에 액세스할 수 없습니다. 특히 연속된 요청이 동일한 애플리케이션 서버로 라우트될 때 세션 관리는 외부 저장 액세스의 오버헤드를 최소화하도록 캐싱 최적화를 구현합니다.
외부 저장에 세션 상태를 저장하면 어느 정도의 결함 허용도 제공됩니다. 애플리케이션 서버가 오프라인이어도 현재 세션 상태는 여전히 외부 저장에서 사용 가능합니다. 이 사용 가능성은 다른 애플리케이션 서버가 해당 세션과 연관된 후속 클라이언트 요청을 계속 처리할 수 있게 합니다.
외부 위치로 세션 상태를 저장한다고 해도 서버에 장애가 발생할 경우 세션을 완벽하게 보존할 수는 없습니다. 예를 들어, 세션 상태를 수정하는 도중 서버에 장애가 발생하면 일부 정보가 분실되고 해당 세션을 사용하는 후속 처리는 영향을 받게 됩니다. 그러나 이 상황은 세션 정보를 잃는 위험성이 아주 짧다는 것을 나타냅니다.
외부 저장에 세션 상태를 저장할 경우의 단점은 외부 위치의 세션 상태에 액세스하면서 값비싼 시스템 자원을 사용하게 된다는 것입니다. 세션 관리는 서버 단계에서 세션 데이터를 캐싱하여 시스템 성능을 향상시킬 수 있습니다. 동일한 서버에 다수의 연속적인 요청을 지정하면 캐시에서 필수 상태 데이터를 찾을 수 있으므로, 외부 저장에서 실제 세션 상태에 액세스하는 횟수 및 이에 따라 외부 위치 액세스와 연관된 오버헤드를 줄일 수 있습니다.