본문 바로가기

개발자 강화/백엔드

[매일메일] 다중 서버에서 세션 기반 인증을 사용했을 때 문제점? (BE.250131)

세션불일치

다중 서버 기반에서 세션 기반 인증을 사용하면 세션 불일치 발생함

예시)

1. 서버 A,B를 동시 운영하면, 로드밸런서는 사용자 요청을 상황에 맞게 A,B 중 한 곳으로 전달

2. 유효한 로그인 요청이 A 서버로 처음 도착하면 사용자 세션 정보는 A서버에 저장

3. 사용자 또 다른 요청이 로드 밸런서 B로 도착하면, 사용자 세션 정보가 없기 떄문에 유효하지 않은 요청이 됨

 

세션 불일치 해결법

1. Sticky Session(스티키 세션)

📌개념

한 사용자의 모든 요청을 동일한 서버로 보냄

최초 요청이 특정 서버(A)로 전달되면 이후 모든 요청도 반드시 A로 가도록 로드 밸런서가 트래픽을 고정함

 

✔구현

IP 해시(사용자 IP 주소를 해싱해 특정 서버로 라우팅)

세션 쿠키 기반(최초 요청 시 특정 서버 선택 후, 응답에 세션 정보 포함한 쿠키 저장하고, 동일한 서버로 요청 보냄)

로드 밸런서의 세션 고정 기능 활용(AWS ELB, Nginx, HAProxy 등에서 제공하는 Sticky Session 기능 사용)

 

✅장점

로드 밸런서만 설정해서 간단하게 구현할 수 있음

세션 정보를 공유하지 않으므로 세션 복제나 외부 저장소 접근이 필요 없어 성능 저하 없음

 

⛔단점

특정 서버에 트래픽이 집중될 수 있음. 로드 밸런싱의 트래픽 분산 효과가 떨어짐.

사용자 세션 정보 가진 서버가 다운되면, 해당 서버에 고정된 사용자는 다시 로그인해야함

확장성 부족, 서버를 추가할 때 기존 스티키 세션 방식이 변경될 수 있음

 

2. Session Clustering(세션 클러스터링)

📌 개념

특정 서버에 사용자 세션 정보가 생성될 때, 다른 서버로 정보를 복제함

 

✔ 구현

메모리 기반 복제(Tomcat - session replication)

네트워크 기반 동기화(WebSocket, 메시지 큐(Kafka, RabbitMQ)

분산 캐시 시스템(Redis, Memcached)

 

✅ 장점

여러 서버에 세션 정보를 중복 저장해 스티키 세션의 트래픽 몰림 문제/세션 정보 유실 문제를 해결할 수 있음

 

⛔ 단점

동일한 세션 정보를 여러 서버에 중복 저장해 메모리 효율성이 떨어짐

세션 생성할 때 마다 데이터를 전파하고 복제해 스티키 세션보다 네트워크 트래픽을 많이 사용함

세션 정보를 복제하는 과정 중에 요청하면, 시간차로 인한 세션 불일치 문제가 발생할 수 있음

A 서버에서 생성된 세션이 B서버로 전파 되기 전에 B 서버로 요청하면 유효하지 않은 요청이 됨

 

3. External Session Storage(스토리지 분리)

📌 개념

세션 정보 저장 공간을 외부로 분리함

 

✔ 구현

일반적인 Disk-Based DB(MySQL, PostgreSQL)을 사용할 수 있으나, 입출력이 느리기 때문에 적절하지 않음

In-Memory DB를 사용하는 것이 좋고, Key-Value DB인 Redis, Memcached를 사용할 수 있다

 

✅ 장점

스티키 세션 방식의 트래픽 집중 문제를 해결할 수 있음

세션 클러스터링의 메모리 비효율성/트래픽 증가/세션 불일치를 해결할 수 있음

 

⛔ 단점

스토리지에 대한 단일 장애 지점(Single Point Of Failure)이 문제가 될 수 있음

하나의 세션 스토리지에 장애가 발생하면 모든 서버가 세션 데이터를 사용할 수 없음

외부 스토리지를 운영하고 관리해야 하므로 관리 부담이 증가함

외부 저장소에서 불러오기 때문에 지연 시간이 발생할 수 있음


출처

[1] 매일메일. 250131. 다중 서버 환경에서 세션 기반 인증 방식을 사용하는 경우 발생할 수 있는 문제점은 무엇인가요? 112번. https://maeil-mail.kr 

[2] 다중 서버 환경에서 세션 불일치 문제와 해결방법. https://hudi.blog/session-consistency-issue/

[3] gpt에게 다중 서버 환경에서 세션 불일치를 묻다