동일한 도메인(예:
www.test.com) 아래에서 컨텍스트 루트(Context Root)만 다른 여러 애플리케이션을 운영할 때, 브라우저가 세션 쿠키(JSESSIONID)를 구분하지 못해 세션이 끊기거나 덮어써지는 현상을 해결하는 방법을 정리합니다.
1. 문제 상황 및 원인 (Context)
WAS는 클라이언트 식별을 위해 JSESSIONID라는 이름의 쿠키를 기본적으로 사용합니다. 하지만 아래와 같은 구성에서는 문제가 발생합니다.
- 서비스 A:
http://domain.com/app1(Server1) - 서비스 B:
http://domain.com/app2(Server2)
브라우저는 기본적으로 도메인 단위로 쿠키를 관리합니다. 사용자가 '서비스 A'를 이용하다가 '서비스 B'로 이동하면, 브라우저는 기존 '서비스 A'의 JSESSIONID를 '서비스 B'의 새로운 JSESSIONID로 덮어씌웁니다(Overwrite). 다시 '서비스 A'로 돌아가면 세션 ID가 달라졌으므로 로그인이 풀리게 됩니다.
2. 해결 방법 1: 서버 레벨 설정 (Server Level)
가장 간단한 방법은 각 서버(인스턴스)마다 쿠키 이름을 다르게 설정하는 것입니다.
설정 경로
서버(Servers) > 서버 유형(Server Types) > WebSphere Application Servers > [서버명] > 세션 관리(Session management) > 쿠키 사용 가능(Enable cookies) 링크 클릭
설정 변경
- 쿠키 이름 (Cookie name): 기본값
JSESSIONID를 식별 가능한 이름으로 변경합니다.- Server1:
JSESSIONID_SVR1 - Server2:
JSESSIONID_SVR2
- Server1:
Pros/Cons: 설정이 간편하지만, 하나의 서버 안에 여러 애플리케이션이 존재할 경우 그 안에서는 여전히 충돌이 발생할 수 있습니다.
3. 해결 방법 2: 애플리케이션 레벨 설정 (App Level)
보다 세밀하게 애플리케이션(WAR/EAR) 단위로 세션을 격리하고 싶을 때 사용합니다. 권장되는 방식입니다.
설정 경로
애플리케이션(Applications) > 엔터프라이즈 애플리케이션(Enterprise Applications) > [애플리케이션명] > 세션 관리(Session management) > 쿠키 사용 가능(Enable cookies) 링크 클릭
설정 변경
- 세션 관리 대체 (Override session management): 반드시 체크합니다. (상위 서버 설정을 무시하고 이 설정을 따르겠다는 의미)
- 쿠키 이름 (Cookie name): 해당 앱 전용 쿠키 이름 설정 (예:
JSESSIONID_APP1) - 쿠키 경로 (Cookie path): 필요시
/app1처럼 컨텍스트 루트로 한정 지을 수도 있습니다.
4. 필수 후속 조치: 플러그인 갱신 (Plugin Propagate)
WAS 설정만 바꾸고 끝내면 안 됩니다. 앞단의 웹 서버(IHS/Apache)가 변경된 쿠키 이름을 인식하여 세션 어피니티(Session Affinity, 스티키 세션)를 유지할 수 있도록 plugin-cfg.xml을 갱신해야 합니다.
작업 절차
- WAS 관리 콘솔에서 변경 사항 저장.
- Environment > Update global Web server plug-in configuration (또는 웹 서버 메뉴에서 플러그인 생성/전파).
- 웹 서버(IHS) 재기동 (Graceful Restart).
확인 (plugin-cfg.xml)
생성된 플러그인 파일을 열어 AffinityCookie 속성이 변경되었는지 확인합니다.
<UriGroup Name="default_host_Cluster_URIs">
<!-- AffinityCookie 값이 변경된 이름과 일치해야 함 -->
<Uri AffinityCookie="JSESSIONID_APP1" AffinityURLIdentifier="jsessionid" Name="/*"/>
</UriGroup>
5. 검증 (Verification)
설정이 올바르게 적용되었는지 확인하는 방법입니다.
- 브라우저의 개발자 도구 (F12)를 엽니다.
- Application 탭 > Cookies 메뉴를 선택합니다.
- 각 애플리케이션에 접속했을 때,
JSESSIONID가 아닌JSESSIONID_APP1,JSESSIONID_APP2등으로 서로 다른 이름의 쿠키가 생성되는지 확인합니다.
세션 쿠키 이름을 변경하면 기존에 로그인되어 있던 사용자들의 세션은 모두 무효화됩니다. 따라서 이 작업은 서비스 점검 시간이나 사용자가 적은 시간대에 수행해야 합니다.