10/22

졸용·2025년 10월 22일

TIL

목록 보기
98/144

🔹 Http Session과 Session Clustering이란?

웹 서버가 사용자 상태(State) 를 어떻게 관리하느냐와 관련된 핵심 개념을 말한다.

  • Session Clustering이 필요한 이유:


🔸 Http Session이란?

✅ 개념

HttpSessionHTTP의 무상태(stateless) 특성을 보완하기 위한 기술이다.
즉, HTTP 요청은 기본적으로 요청 간의 상태를 기억하지 않기 때문에,
서버는 Session 객체를 이용해 사용자 상태를 서버 메모리에 저장한다.

예) 로그인 유지, 장바구니 정보, 최근 본 상품, 권한 정보 등

✅ 동작 방식

  1. 사용자가 웹 서버에 처음 접속 → HttpSession 객체가 생성됨
  2. 서버는 세션에 고유한 Session ID를 부여하고, 이를 JSESSIONID 쿠키로 클라이언트에게 전달
  3. 이후 요청에서 브라우저가 JSESSIONID 쿠키를 함께 전송
  4. 서버는 이 ID를 기준으로 세션 데이터를 찾아 사용자의 상태를 복원

✅ 예시 (Spring MVC)

@GetMapping("/login")
public String login(HttpSession session) {
    session.setAttribute("userId", "1234");
    return "welcome";
}

@GetMapping("/mypage")
public String myPage(HttpSession session) {
    String userId = (String) session.getAttribute("userId");
    // 로그인 상태 유지 가능
}


🔸 Session Clustering이란?

✅ 문제 상황

HttpSession기본적으로 서버 메모리에 저장된다.

👉 그런데 서버를 여러 대 두는 클러스터 환경(로드 밸런싱) 에서는 문제가 생긴다.

사용자가 첫 번째 요청은 Server A로 갔는데,
두 번째 요청은 Server B로 가면,
B 서버에는 세션 정보가 없어서 로그인 상태가 유지되지 않는 문제 상황 발생.

✅ 해결 방법 → Session Clustering

Session Clustering은 클러스터된 여러 서버 간에 세션 정보를 공유(복제)하는 기술이다.

이를 통해 사용자가 어느 서버로 요청을 보내도 같은 세션 상태를 유지할 수 있다.


🔸 Session Clustering의 대표적인 방식

방식설명장점단점
Sticky Session (Session Affinity)같은 사용자의 요청을 항상 같은 서버로 보내는 방식구현 간단특정 서버에 트래픽 집중 (부하 불균형)
Session Replication세션 정보를 모든 서버에 복제장애 시에도 세션 유지메모리 낭비, 네트워크 부하
External Session Store (Redis 등)세션을 Redis나 DB에 저장확장성 높고 안정적외부 저장소 관리 필요


🔹 Spring Boot + Redis 세션 공유 구조 예시

현재 대부분의 MSA나 대규모 서비스에서는 Session Replication 대신 Redis 세션 공유 구조를 쓴다고 한다.

✅ 아키텍처 흐름

[Client]
   |
   v
[Load Balancer]
   |——> [Server A] —\
   |——> [Server B] —+——> [Redis: Session Store]

✅ 설정 예시 (application.yml)

spring:
  session:
    store-type: redis
  redis:
    host: localhost
    port: 6379

→ 이렇게 하면 여러 인스턴스가 동일한 Redis를 통해 세션을 공유하므로, 서버 간 세션 일관성이 유지된다.



🔹 Http Session과 Session Clustering이란?

항목Http SessionSession Clustering
목적개별 사용자 상태 유지다중 서버 간 세션 일관성 유지
저장 위치단일 서버 메모리여러 서버 또는 외부 저장소
문제점서버 확장 시 세션 불일치네트워크 부하 또는 외부 의존성
대안JWT, Redis, DB 세션Redis 기반 Session Store (추천)
profile
꾸준한 공부만이 답이다

0개의 댓글