로그인 세션 관리 전략

이한울·2020년 8월 24일
1

BackEnd

목록 보기
2/3

Session

 사용자가 웹 브라우저를 통해 웹 서버에 요청을 보내면 웹 서버는 사용자의 웹 브라우저를 식별하기 위한 세션을 생성한다. 세션을 통해 사용자의 로그인 정보를 저장해, 사용자가 Cookie를 통해 session 정보를 보내면 사용자가 로그인한 상태임을 확인할 수 있다.

세션 관리 전략

  웹 서버에 트래픽이 몰리게 될 경우 성능 저하를 막기 위해 서버를 Scale-Out할 수 있다. 이 경우 브라우저의 요청을 처리하는 웹 서버는 여러대가 되며 로드 밸런서가 사용자의 요청을 각 서버에 할당해 줄 수 있다. 이러한 상황에서 사용자의 로그인 정보를 일관되게 저장하고 빠르게 응답을 처리하기 위한 세션 관리 전략이 필요하다.

Sticky Session

  웹 브라우저의 요청이 로드밸런서를 거치면서 매 번 다른 서버에게 할당될 수 있다. 이 경우 만약 웹 서버 별로 별도의 세션 저장소를 가지고 있다면 다른 웹 서버에 존재하는 웹 브라우저의 세션 정보가 무시될 수 있다.

  이러한 문제점을 해결하기 위한 것이 Sticky Session이다. 웹 브라우저의 요청을 IP나 Cookie를 통해 식별해 특정 서버에서만 처리하게끔 하는 방식이다. 이 방식을 사용하게 되면, 사용자의 요청이 여러 서버에서 처리될 수 없으므로 사용자의 세션 정보가 일관되게 유지된다.

  그러나 트래픽의 대부분이 특정 서버에 할당된 사용자들에게서 발생된다면, 로드 밸런싱이 균등하게 이루어지지 않는 상황이 되어 분산 서버의 이점을 활용할 수 없게 된다.

Session Clustering

  여러 서버 간 독립된 세션 저장소를 사용함으로써 발생하는 단점을 해결하기 위해 Session Clustering을 사용할 수 있다. Session Clustering는 여러 서버들이 세션 저장소를 공유하는 것이다. Session clustering은 각 서버의 세션 저장소는 유지한 채로 동기화 시키는 방식과 독립된 세션 스토리지를 구성하는 두 가지 방식으로 나뉜다.

  • 세션 저장소 복제 - 모든 서버 끼리 동일한 세션 저장소를 갖는 방식이다. 한 세션 저장소에서 발생한 변화는 다른 서버의 세션 저장소로 복제된다. 이 방식을 사용할 경우 한 세션 저장소에 오류가 발생하더라도 복구가 가능하다. 그러나 서버의 숫자 만큼 복제시키는데 발생하는 비용이 증가하기 때문에 Scale-Out이 많이 진행될수록 비효율적이 된다.

  • 독립된 세션 스토리지 - 각 서버와 연결된 독립된 저장소를 구성하는 것이다. 여러 대의 서버가 하나의 세션 저장소를 공유하기 때문에 데이터의 동기화를 위한 비용이 발생하지 않는다. 일반적으로 Redis와 같은 In-memory 저장소를 활용하며, 일반적인 관계형 데이터베이스 저장소도 사용할 수 있다.

profile
Backend Engineer 이한울입니다

0개의 댓글