애플리케이션의 규모가 커지고 트래픽이 증가할 때 세션 관리에 어려움이 발생할 수 있다.
원인 | 해결 방법 |
---|---|
- 서버 부하 증가 세션은 일반적으로 서버의 메모리에 저장하게 되는데, 사용자 수가 증가할수록 서버 부하가 증가하고 성능 저하가 발생할 수 있다. | - 자주 사용되는 세션 정보를 캐싱하여 서버 부하를 줄일 수 있다. - 세션 유효기간을 설정함으로서 서버 부하를 감소시키고, 메모리 사용량을 줄일 수 있다. - 세션 대신 토큰을 사용하여 서버 부하를 줄일 수 있다. (단, refresh 토큰을 사용하지 않았을 경우) ----- |
- 세션 불일치 여러 서버에서 사용자 요청을 처리하는 경우, 세션 정보가 서버 간에 동기화가 되지 않아 세션 불일치 문제가 발생할 수 있다. | - 세션 클러스터링을 통해 모든 서버에 동일한 세션 정보를 복제하여 세션 불일치 문제를 해결한다. 단, 메모리 사용량이 증가한다. - 세션 대신 토큰을 사용하면, 서버는 토큰의 정보를 가지고 있지 않기 때문에 애초에 동기화와 불일치 문제가 발생하지 않는다. ----- |
- 데이터 손실 서버 장애 발생 시 메모리에 저장된 세션 정보가 손실될 수 있다. | - 세션 정보를 DB에 저장하여 서버에 장애가 발생하여도 데이터가 손실되지 않도록 한다. - 정기적으로 세션 데이터를 백업한다. - 세션 대신 토큰을 사용하면, 서버는 토큰의 정보를 가지고 있지 않기 때문에 서버 장애가 발생하여도 다시 기존 토큰으로 요청할 수 있다. - refresh 토큰의 경우에도 DB 에 저장하기 때문에 서버 장애가 발생하여도 데이터가 손실되지 않는다. |
결론적으로 세션의 확장성 문제 3가지 원인 모두 세션을 관리하는 주체가 서버이기 때문에 발생하는 문제이므로, JWT 토큰을 사용하면 해결될 것으로 보인다.