728x90
WAS가 두개니까 다른 WAS로 붙을 때마다 세션에 기록이 없는 문제가 발생했다. 그래서 세션 스토리지를 하나 두기로 한다. 세션 스토리지 역할, 기능 등 설명해
문제 상황 정리
-
WAS(웹 플리케이션 서버)를 2대 이상 띄워서 로드 밸런싱하고 있음
-
각 WAS는 기본 설정으로 로컬 메모리(톰캣 기준 HttpSession)에 세션 저장
-
LB가 요청을 라운드-로빈으로 보내면
– 1번 WAS에서 로그인 → 세션 생성
– 다음 요청이 2번 WAS로 가면 해당 WAS 메모리엔 세션 정보 없음 → "로그인 풀림" 현상
→ 해결책: "세션 스토리지를 하나의 공유 저장소로 빼자"
1. 세션 스토리지(Session Store)란?
"여러 WAS가 공통으로 접근하는 세션 데이터 전용 저장소"
-
형태: Redis, Memcached, JDBC(공용 DB), Hazelcast, MongoDB, 파일 서버 등
-
목적: 세션 아이디(JSESSIONID) 만 쿠키로 가지고 다니면, 어느 WAS에 도착해도 동일한 세션 객체를 꺼내 쓸 수 있게 함
2. 핵심 역할 & 기능
Table
Copy
역할설명비고
| 중앙 집중 저장 | 모든 세션 데이터를 단일(또는 클러스터) 공간에 보관 | "sticky session" 없이도 무중단 Scale-Out 가능 |
| 빠른 읽기/쓰기 | 수 ms 내 세션 조회 | 인메모리(Redis)가 가장 보편 |
| TTL/만료 관리 | 세션 유효 시간 자동 삭제 | Redis EXPIRE, JDBC expires_at 컬럼 |
| 공유 & 동시성 | 동일 세션을 다른 WAS가 동시에 읽어도 일관성 보장 | Redis SET NX, 분산 락 등 |
| Fail-over | 저장소 노드 다운도 세션 유실 없음 | Redis Cluster, Sentinel, 복제 |
| 보안 | 세션 데이터 암호화(AES-256), TLS 전송 | 민감 정보(로그인 ID, 권한) 보호 |
| 페일오버/스케일아웃 | 저장소 자체를 수평 확장 | Redis Cluster, Hazelcast CP |
| 통계 & 모니터링 | 현재 활성 세션 수, 만료율 → Grafana 대시보드 | Prometheus exporter 활용 |
3. 대표 구현 방식
-
Redis(Session)
-
spring-session-data-redis 하나만 추가 → 애플리케이션 코드 변경 없음
-
TTL, Cluster, Sentinel 지원 → 가장 많이 채택
-
-
JDBC Session
-
공용 DB(Oracle, Tibero, MySQL)에 SPRING_SESSION 테이블 생성 → 별도 인프라 없음
-
성능은 Redis 대비 5~10 배 느림 → 트래픽 낮을 때만
-
-
Memcached
-
Redis 이전 전통적 선택지 → 클러스터 모듈 없음, Fail-over 수동
-
-
Hazelcast / Ignite
-
WAS 내장 임베디드 모드도 가능 → DB 없이 순수 메모리 클러스터
-
캐시+세션 동시 사용 시 매력적
-
4. 도입 시 체크리스트
-
성능: 평균 latency < 5 ms → Redis 추천
-
가용성: 클러스터 or Sentinel → 장애 시 1초 이내 Fail-over
-
보안: TLS 필수, 민감 필드는 암호화 후 저장
-
크기: 세션 객체마다 2~4 KB 가정 → 10만 동시 ≈ 400 MB
-
모니터링: 현재 세션 수, 만료 수, latency → Grafana 대시보드 필수
5. 간단 아키텍처 도식
Copy
User ──► L4/L7 LB ─┬─► WAS-1 (로그인)
└─► WAS-2 (세션 없음)
▲ ▼
└─────────── JSESSIONID 쿠키 --------┘
│
▼
┌────────────────────┐
│ Redis Cluster │ ◄─ 세션 스토리지
│ (3-master + 3-sl) │
└────────────────────┘
-
WAS-1이 세션 생성 → Redis에 저장
-
WAS-2가 요청 받으면 → Redis에서 조회 → 동일 객체 사용
6. 요약
"세션 스토리지"는 여러 WAS가 공유하는 중앙 세션 저장소로서
로그인 상태 유지, Scale-Out, 무중단 배포, 장애 복구를 가능케 하는 핵심 인프라입니다.
Redis 클러스터를 가장 많이 사용하며, TTL, 빠른 읽기/쓰기, 페일오버, 모니터링 기능을 기본으로 제공합니다.
로그인 상태 유지, Scale-Out, 무중단 배포, 장애 복구를 가능케 하는 핵심 인프라입니다.
Redis 클러스터를 가장 많이 사용하며, TTL, 빠른 읽기/쓰기, 페일오버, 모니터링 기능을 기본으로 제공합니다.
728x90
'법, 용어 > 용어' 카테고리의 다른 글
| ESB란? (0) | 2025.11.04 |
|---|---|
| PASSIVE STANDBY 차이 (0) | 2025.11.03 |
| OLTP 와 OLAP (0) | 2025.11.03 |
| ORM (0) | 2025.10.23 |
| JPA (0) | 2025.10.23 |