본문 바로가기
법, 용어/용어

세션 스토리지

by 3604 2025. 11. 3.
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. 대표 구현 방식

  1. Redis(Session)
    • spring-session-data-redis 하나만 추가 → 애플리케이션 코드 변경 없음
    • TTL, Cluster, Sentinel 지원 → 가장 많이 채택
  2. JDBC Session
    • 공용 DB(Oracle, Tibero, MySQL)에 SPRING_SESSION 테이블 생성 → 별도 인프라 없음
    • 성능Redis 대비 5~10 배 느림트래픽 낮을 때만
  3. Memcached
    • Redis 이전 전통적 선택지 → 클러스터 모듈 없음, Fail-over 수동
  4. Hazelcast / Ignite
    • WAS 내장 임베디드 모드도 가능 → DB 없이 순수 메모리 클러스터
    • 캐시+세션 동시 사용매력적

4. 도입 시 체크리스트

  • 성능: 평균 latency < 5 msRedis 추천
  • 가용성: 클러스터 or Sentinel장애 시 1초 이내 Fail-over
  • 보안: TLS 필수, 민감 필드암호화 후 저장
  • 크기: 세션 객체마다 2~4 KB 가정10만 동시400 MB
  • 모니터링: 현재 세션 수, 만료 수, latencyGrafana 대시보드 필수

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, 빠른 읽기/쓰기, 페일오버, 모니터링 기능을 기본으로 제공합니다.
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