위 그림은 session에 요청하고 응답하는 과정을 간단히 표현한 그림입니다.
여러 개의 서버를 사용하는 경우, 서버들이 세션을 공유할 수 없습니다. 즉, 사용자의 요청이 다른 서버로 전달되면 해당 서버는 그 전 서버와 공유하지 않는 별도의 세션을 생성하게 됩니다.
따라서, 사용자의 모든 요청에 대해 같은 세션을 유지하기 위해서는 어떤 서버에서 처리하느냐에 따라 세션이 다르게 유지되는 문제가 발생할 수 있습니다.
이러한 문제를 해결하기 위해서는, 서버들 간에 세션 정보를 공유하는 방법이 필요합니다.
대표적인 방법으로는 로드밸런싱 기능을 가진 로드밸런서를 사용하여 세션을 공유하거나, 세션을 서버 외부에 저장하는 세션 클러스터링 등이 있습니다.
하지만 이러한 방법들은 구현하기 어렵고, 관리하기도 복잡하기 때문에 서버를 추가할 때마다 그만큼 비용이 증가하게 됩니다.
따라서 최근에는 이러한 문제를 해결하기 위해 세션 대신 JWT(JSON Web Token)을 사용하는 경우가 많아졌습니다.
JWT는 서버에서 세션을 관리하는 것이 아니라 클라이언트에게 발급된 토큰을 통해 인증을 수행하므로, 서버 간의 세션 공유 문제를 해결할 수 있습니다.