Post

01 Session

01 Session

1. Note

  • remind!

2. remind - HTTP 관련 개념

1. HTTP

  • HTTP는 브라우저와 서버가 요청(Request)과 응답(Response)으로 데이터를 주고받는 통신 규칙
  • 요청(Reqeust)은 “이거 줘”, 응답(Response)은 “여기 있음” 구조로 동작

2. HTTP는 무상태(Stateless)

  • 각 요청은 완전히 독립적으로 처리
  • 서버는 이전 요청의 정보(로그인 여부, 이전 페이지 등)를 저장하지 않음
  • 서버가 상태를 저장하지 않아 가볍고 빠름
  • 이점
    • 서버가 상태를 저장하지 않음 → 메모리 사용 적음
    • 요청 간 의존성이 없음 → 확장성 좋음 (서버 여러 대로 분산 쉬움)
    • 처리 속도 빠름
  • 단점
    • 로그인 상태 유지 불가
    • 사용자 맞춤 정보 유지 어려움
    • 로그인 상태, 장바구니 같은 사용자 상태 유지가 어려움

3. 계층 프로토콜

계층프로토콜역할특징사용 예
응용 계층HTTP웹 통신요청/응답, Stateless웹 브라우저
응용 계층HTTPS보안 웹 통신HTTP + 암호화(SSL/TLS)로그인, 결제
응용 계층FTP파일 전송파일 업/다운로드서버 파일 관리
응용 계층DNS도메인 → IP 변환주소 해석google.com 접속
전송 계층TCP신뢰성 있는 통신순서 보장, 재전송, 연결지향웹, API
전송 계층UDP빠른 통신비연결, 손실 가능게임, 스트리밍
인터넷 계층IP주소 기반 전달패킷 라우팅인터넷 전반
네트워크 인터페이스ARPIP → MAC 변환내부 네트워크 통신LAN 환경

4. 쿠키 / 세션

구분쿠키 (Cookie)세션 (Session)
저장 위치브라우저(클라이언트)서버
저장 데이터직접 데이터 저장사용자 정보는 서버에 저장, 클라이언트는 세션 ID만
보안낮음 (사용자가 수정 가능)상대적으로 높음
서버 부담없음있음 (메모리/저장소 사용)
속도빠름 (서버 조회 없음)상대적으로 느림 (세션 조회 필요)
용량 제한있음 (약 4KB)사실상 없음
만료설정 가능 (Expires, Max-Age)서버에서 관리 (타임아웃)
사용 예자동 로그인, 사용자 설정로그인 상태 유지, 인증

3. 세션(Session)

1. 세션

  • 사용자의 상태를 서버가 기억하기 위한 메커니즘
  • HTTP가 무상태라서 “기억을 못하니까”, 그걸 보완하려고 나온 개념

2. 세션의 흐름

  • 최초 요청 (세션 생성)
    • 사용자가 로그인 요청을 보내면 서버는 다음을 수행
    • 서버 내부에 사용자 정보를 저장할 공간 생성 (세션 저장소)
    • 고유한 세션 ID 생성
    • 이 세션 ID를 응답에 담아 브라우저에 전달 (보통 쿠키로 전달)
  • 브라우저 저장
    • 브라우저는 서버가 준 세션 ID를 쿠키에 저장
    • 예: JSESSIONID=abc123 (스프링에서 저장하는 HeaderKey)
  • 이후 요청 (세션 유지)
    • 사용자가 다른 페이지를 요청할 때마다
      • 브라우저는 자동으로 쿠키(세션 ID)를 함께 보냄
      • 서버는 세션 ID로 세션 저장소를 조회
      • 해당 사용자의 로그인 상태, 정보 등을 복원
    • 서버는 “아 이 요청은 아까 그 사용자구나”를 알게 됨
  • 세션 종료(세션이 사라지는 상황)
    • 로그아웃 시 (명시적 삭제) => AP에서 삭제처리
    • 일정 시간 미사용 (타임아웃)
    • 서버 재시작 (메모리 세션일 경우)

3. 세션의 장단점

  • 세션 장점
    • 사용자 상태 유지 가능 / 로그인 유지, 장바구니 유지 등 끊김 없는 사용자 경험 제공
    • 보안성 높음 / 실제 데이터는 서버에 있고, 클라이언트는 세션 ID만 가짐
    • 복잡한 데이터 관리 용이 / 다양한 사용자 정보를 서버에서 통합 관리 가능
  • 세션 단점
    • 서버 부담 증가 / 사용자 많아질수록 메모리 사용 증가
    • 확장(스케일링) 어려움 / 서버 여러 대일 경우 세션 공유 필요 (예: Redis)
    • 장애 시 데이터 유실 가능 / 서버 재시작/장애 시 세션 날아갈 수 있음

4. 세션 관리 방식

1. 로컬 / 중앙 / 분산

구분로컬 세션중앙 집중형 세션분산 세션
저장 위치각 서버 메모리중앙 저장소 (Redis 등)여러 서버에 분산/복제
구조서버별 독립모든 서버가 중앙 저장소 공유서버 간 데이터 분산 및 동기화
확장성낮음높음매우 높음
데이터 유실서버 장애 시 유실중앙 저장소 유지 시 안전매우 낮음 (복제됨)
가용성낮음중간 (중앙 저장소 의존)매우 높음
성능매우 빠름저장소 성능 영향 받음동기화 비용 존재
복잡도매우 낮음중간매우 높음
장애 영향해당 서버만 영향중앙 저장소 장애 시 전체 영향일부 서버 장애에도 영향 적음
사용 환경단일 서버, 소규모다중 서버, 일반 서비스초대규모 시스템

2. 로컬 세션 관리

  • 세션 데이터를 각 서버의 메모리(RAM)에 직접 저장하는 방식
  • 동작 방식
    • 서버가 세션 생성 후 메모리에 저장
    • 세션 ID를 클라이언트에 전달
    • 같은 서버로 요청 오면 해당 메모리에서 세션 조회
  • 장점
    • 구현이 매우 간단
    • 메모리 기반이라 속도 빠름
  • 단점
    • 서버 재시작 시 세션 데이터 유실
    • 서버 여러 대일 경우 세션 공유 불가 → 확장성 문제

3. 중앙 집중형 세션 관리

  • 세션 데이터를 별도의 중앙 저장소(Redis 등)에 저장하고 모든 서버가 공유하는 방식
  • 동작 방식
    • 서버가 세션을 중앙 저장소에 저장
    • 세션 ID를 클라이언트에 전달
    • 어떤 서버로 요청이 와도 중앙 저장소에서 세션 조회
  • 장점
    • 서버 간 세션 공유 가능 → 로그인 상태 유지
    • 서버 재시작에도 데이터 유지
    • 확장성 좋음 (서버 수 자유롭게 증가 가능)
  • 단점
    • 중앙 저장소 장애 시 전체 영향
    • 저장소 성능에 따라 병목 발생 가능
    • 구축 및 운영 복잡도 증가

4. 분산 세션 관리

  • 세션 데이터를 여러 서버에 분산/복제하여 저장하는 방식
  • 동작 방식
    • 세션 데이터를 여러 서버에 분산 또는 복제 저장
    • 서버 간 데이터 동기화 수행
    • 요청 시 가장 적절한 서버에서 세션 조회
  • 장점
    • 데이터 유실 위험 낮음 (복제됨)
    • 높은 가용성 (일부 서버 장애에도 서비스 유지)
    • 매우 뛰어난 확장성
  • 단점
    • 데이터 복제로 인한 네트워크/성능 비용
    • 동기화 지연 시 일관성 문제 발생 가능
    • 구현 및 운영 복잡도 매우 높음

5. 세션 클러스터링

1. 세션클러스터링?

  • 세션 클러스터링은 여러 대의 웹 서버가 협력하여 사용자의 세션 데이터를 공유하고 일관성을 유지하는 기술

2. 필요성

  • 로드 밸런싱 환경
    • 웹 서비스는 많은 사용자 요청을 처리하기 위해 여러 대의 서버를 운영
    • 로드 밸런서가 이 요청들을 서버들로 분산 사용자의 요청이 매번 다른 서버로 갈 수 있음,
    • 세션 데이터가 공유되지 않으면 로그인 상태가 풀리거나 장바구니가 비는 문제가 발생
    • 세션 클러스터링은 이러한 문제를 해결하여 일관된 사용자 경험을 제공
  • 서버 장애 대비 (고가용성)
    • 단일 서버 환경에서 서버가 멈추면 모든 세션 데이터가 사라짐
    • 세션 클러스터링은 한 서버에 문제가 생겨도 다른 서버가 해당 세션 데이터를 가지고 있으므로,
    • 서비스 중단 없이 다른 서버로 요청을 전환하여 세션 데이터를 보존할 수 있음
  • 확장성
    • 사용자가 늘어나 서버를 추가해야 할 때,
    • 세션 클러스터링을 통해 새로운 서버도 기존 사용자의 세션 데이터를 바로 공유할 수 있어 서비스 확장이 용이해짐

3. 세션클러스터링 방법

1. Sticky / Replication / Centralized

구분Sticky SessionSession ReplicationCentralized Session Store
구조특정 서버에 고정서버 간 세션 복제중앙 저장소 사용 (Redis 등)
동작 방식같은 사용자는 항상 같은 서버로 라우팅모든 서버가 동일 세션 데이터 유지모든 서버가 중앙 저장소 조회
세션 저장 위치각 서버 메모리여러 서버 메모리 (복제)중앙 저장소
확장성낮음중간높음
가용성낮음 (서버 장애 시 세션 유실)높음높음 (저장소 안정성에 의존)
성능빠름복제 비용으로 저하 가능저장소 성능 영향 받음
복잡도낮음높음중간
트래픽낮음높음 (복제 트래픽)중앙 집중 트래픽
장애 영향특정 서버 영향 큼일부 서버 장애 대응 가능저장소 장애 시 전체 영향

2. Sticky Session

  • 개념
    • 한 번 연결된 사용자는 항상 같은 서버로만 요청이 가도록 하는 방식
    • 세션 데이터는 각 서버의 메모리에 저장
  • 장점
    • 구현이 매우 간단
    • 서버 메모리 사용 → 속도 빠름
  • 단점
    • 특정 서버에 트래픽 몰릴 수 있음 (부하 불균형)
    • 서버 확장 시 관리 어려움
    • 서버 장애 시 세션 유실

3. Session Replication

  • 개념
    • 세션 데이터를 여러 서버에 실시간으로 복제하여 모든 서버가 동일한 세션을 가지는 방식
  • 장점
    • 높은 가용성 (서버 장애에도 세션 유지)
    • 어떤 서버로 요청이 가도 동일한 사용자 상태 유지
  • 단점
    • 서버 간 복제로 인한 성능 저하 (트래픽 증가)
    • 구현 및 운영 복잡도 높음
    • 동기화 지연 시 데이터 불일치 가능

4. Centralized Session Store

  • 개념
    • 세션 데이터를 Redis 같은 중앙 저장소에 저장하고 모든 서버가 공유하는 방식
  • 장점
    • 데이터 일관성 높음 (항상 동일한 세션 사용)
    • 서버 확장 자유로움 (확장성 좋음)
    • 서버 장애 시에도 세션 유지
  • 단점
    • 중앙 저장소 장애 시 전체 서비스 영향
This post is licensed under CC BY 4.0 by the author.