[Devops] 다중 서버에 대한 세션 유지 방법
다중 서버에서의
세션 유지방법에 대해 정리한 글입니다.
다중 서버일때 동일한 세션을 유지하는 방법 정리
최근 이중화된 서버에서 세션값에 상이하다는 오류메시지를 발견하였다.
원인 : 서버의 다중화에서 오는 문제
분석 : 실제로 WAS (web server + web container) 서버 1대당 1개이 생성되고 관리되어지기 떄문에 분배(로브랠런싱 할때), 각 세션을 공유하는 방법이 있습니다.
해결 방안 :
- Sticky Session 방식
- 세션을 최초에 생성한 서버로 요청을 고정하는 방식입니다. 실제로 로드밸런싱 할때 고정적으로 서버에 요청을 보내는 방식
- 정합성 이슈를 해결할 수 있으나, 로드 밸런싱과 가용성면에서 문제가 생길 수 있음.
- 예로는 ip끝자리를 해쉬 알고리즘을 사용하여 고정분배하는 방식이 있을 수 있다.
- Session Clustering 방식
- 세션이 생성될 때마다(로그인 할 경우) 각 세션정보를 복제하여 동일한 세션을 유지하는 방법.
- 매번 새로운 객체를 생성할때마다 오버헤드가 발생하므로 사용 문제가 생길 수 있음.
- Redis/Memcached
- 별도의 저장소에 세션값을 저장하는 방식
- 저장소를 공유하면 서버를 늘리더라도(Scale Out) 쉽게 할 수 있음.
- 요새는 Redis를 많이 사용함
- Redis는 write보다 read할떄 속도가 빠름
- Memcached read보다 write할떄 속도가 빠름
- 읽는 경우가 훨씬 많기 때문에 Redis가 사용상의 이점이 있다.
- 휘발성이기 때문에 삭제되어도 치명적이지 않은 데이터를 사용할 떄 사용
- Sticky Session 방식
