코딩

토큰

secondnature 2025. 2. 3. 23:53

세션 방식에서 서버는 요청마다 함께 딸려 오는 세션 아이디를 바로바로 확인할 수 있도록 로그인한 사용자의 아이디를 메모리에 올려둔다. 메모리에 올려둔 데이터는 빠르게 확인할 수 있다는 장점이 있는 대신 공간이 한정되어 있다. 서버에 동시 접속하는 사용자가 많아지면 메모리 공간이 부족해져서 서버에 부하가 걸리고 화면이 움직이지 않는 문제가 발생할 수 있다.

 

메모리 공간을 많이 차지하는 세션 방식의 대안은 로그인한 사용자에게 세션 아이디 대신 토큰을 발급해주는 것이다. 이러한 토큰에는 특수한 수학적 원리가 적용되어 있어서 마치 위조 방지 장치가 있는 지폐처럼 서버만이 유효한 토큰을 발행할 수 있다. 그렇기 때문에 토큰을 받아간 사용자가 이를 쿠키로 저장해 두고 필요할 때마다 제시하면 서버는 따로 메모리에 올려놓은 것들을 확인할 필요 없이 자기가 발급한 토큰임을 알아보고 사용자의 요청을 허가해 주는 것이다. 더 이상 이미 로그인한 사용자의 티켓을 메모리에 올려두고 있을 필요가 없으니 서버 부하를 줄일 수 있는 것이다.

 

물론 토큰 방식에도 한계는 있다. 여러 기기에서의 로그인을 제한하기 위해 필요한 때에 로그인되어 있는 사용자를 서버가 강제로 로그아웃 시킬 수 있어야 하는데, 토큰 방식에서는 이것이 불가능하다. 한 번 발행한 토큰은 유효기간이 끝나기 전까지 따로 통제할 수 없기 때문에 세션에 비해 토큰 정보를 탈취당할 가능성이 높다. 그러나 토큰은 쿠키처럼 만료 기간을 정할 수 있어서 만료 시간을 짧게 지정해 피해를 줄일 수 있다. 토큰 방식은 쿠키와 세션을 적절히 섞은 것과 비슷하다.

'코딩' 카테고리의 다른 글

캐시  (0) 2025.02.06
세션  (0) 2025.02.01
쿠키  (1) 2025.01.30
[트러블 슈팅] java.sql.SQLSyntaxErrorException  (0) 2025.01.30
병렬 처리와 병행 처리  (0) 2024.07.05