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 | 주소 기반 전달 | 패킷 라우팅 | 인터넷 전반 |
| 네트워크 인터페이스 | ARP | IP → 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 Session | Session Replication | Centralized 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.