SpringbootSecurity

SpringbootSecurity/JWT기본개념(세션에 고질적인 문제)

25G 2021. 9. 2. 09:47

JWT

JWT는 json web token이 라고 한다.

그럼 이 JWT가 왜 사용되고 어디에 사용되는지 먼저 알아보자

 

JWT를 이해하기위해선 session의 단점이 뭔지부터 알아야 한다.

 

Session

기본적으로 사용자가 웹에서 서버로 최초 요청을 한다고 하면 서버가 응답을 할 때 해더에 쿠키를 담아서 세션 id를 넘겨주고 사용자의 웹에 자동으로 쿠키를 저장하는 것이 기본전략이다. 그래서 다음에 같은 사용자가 다시 요청을 한다고하면 쿠키에 있는 세션id를 보고 사용자의 요청을 효율적으로 응답할 수 있게 되는 것이다.

그럼 이 session은 언제 사라지냐?

1. 서버 쪽에서 session값을 날렸을 때

2. 사용자가 브라우저를 전부 종료했을 때

3. 특정 시간이 지나면 자동 삭제

 

이때 서버가 알아야 하는 사항은 이 쿠키를 만들 때마다 목록을 서버가 들고 있어야지 사용자가 최초 요청인지 아닌지를 분별할 수 있다.

 

session의 단점

동시접속자 수 가 100만 명 정도 된다라고 가정하고

이런 트래픽이 높은 사이트는 서버가 여러 대가 있는데 이때 라우팅을 하는 것을 로드벨런싱이라고 한다.

그럼 서버가 여러대가 있을 때 각 모든 서버에 클라이언트 세션정보가 똑같지 않고 각자의 최초 요청이 다르기 때문에 

로드 벨런싱 과정에서 한 서버에 너무 몰려서 다른 서버로 요청이 간다면 그 서버 입장에서는 최초 요청이 된다는 말이다.

 

위 문제를 해결하기 위해서 여러 개의 서버의 session정보를 하나의 db에 저장을 하는 방법도 있는데 이 방법은 io가 일어나기 때문에 RAM에 접근하는 것에 비해서 너무너무 느려진다.

그래서 io를 피하기 위해서 사용하는 것이 메모리(RAM) 공유서버를 사용한다. 그럼 모든 서버가 메모리 공유서버에 session을 저장하는 것이다. 이 대표적인 메모리 공유서버는 redis서버가 있다.

 

그럼 이 session의 단점을 알게 되면 

왜 JWT를 사용하는지 알 수 있을 것이다.

JWT는 session의 고질적인 문제를 해결하기 위해서 만들어졌기 때문이다.