Server

토큰과 세션의 차이점

Albosa2lol 2023. 9. 5. 20:25

차이점 1. 사이즈

 

세션 < 토큰

세션을 사용시 주고받는 session id의 크기는 매우 작습니다.

반면 (JWT기준) 토큰은 같은 데이터를 담고 있어도 그에 비해 크기가 큽니다.

 

 

차이점 2. 안전성

 

세션

세션은 서버측에서 저장/관리하기 때문에 상대적으로 온전한 상태를 유지하기 유리합니다.

하지만 여전히 공격의 위험이 있기에 유효기간, HttpOnly, Secure 옵션 등을 주어 쿠키에 저장합니다.

토큰

반대로 토큰은 웹 브라우저측 (local storage, 혹은 쿠키 등)에 저장되기 때문에 공격에 노출될 가능성이 더 큽니다.

이런 경우를 대비해 토큰에는 민감한 정보를 담지 않습니다.

그리고 유효기간을 짧게 설정해 공격에 노출될 수 있는 시간을 최소화합니다.

하지만 짧은 주기로 토큰이 무효화되면 서비스 사용자는 계속 로그인을 해줘야 하는 번거로움이 있기 때문에

애초에 로그인(인증)시 refresh token이라는 것을 추가적으로 발급합니다.

refresh token은 좀 더 긴 유효기간을 가졌으며 최대한 안전한 곳에 저장됩니다.

기존의 토큰이 만료되거나 변질되면 refresh token을 통해 토큰을 재발급합니다.

 

 

차이점 3. 확장성

 

최근 대부분의 웹 서비스가 토큰 방식을 선택하게 된 이유가 바로 확장성에 있습니다.

세션은 서버에 저장되기 때문에 한꺼번에 다중 접속자가 발생한다면 과부하가 걸릴 수 있습니다.

그럼 과부하를 덜어주기 위해 서버를 여러 대를 두면 되겠죠?

하지만 또 서버가 여러대라면 세션을 쓰기가 복잡해집니다.

 

서버 분산 / 클러스터 환경에서 드러나는 결정적인 차이

요즘 많은 서비스들은 서버 과부하 부담을 줄이기 위해 여러 서버를 두고 서비스를 운영합니다.

그리고 앞서 언급했듯 HTTP는 stateless, connectionless 하기 때문에

request마다 내가 접속한 서버가 달라질 수도 있습니다!!

이렇게 되어 버리면 session 정보가 없는 다른 서버에 접속할 때마다 계속 로그인해줘야 합니다.

토큰방식을 사용한다면 추가 서버 없이 인증/인가를 처리할 수 있습니다.