세션 / 토큰의 가장 큰 차이점은 사용자가 정상적인, 유효한 사용자 라는 것을 서버에 저장하냐, 사용자의 컴퓨터에 저장하느냐이다. 서버에 저장하는 세션은 보안에 강한 장점이 있지만 서버에 부하가 비교적 심하다는 단점이 있고, 사용자의 컴퓨터에 저장하는 토큰은 서버에 부담이 적다는 장점이 있지만 비교적 보안이 취약하다는 단점이 있다.
세션이란
Session ID를 사용해서 어떤 사용자가 서버에 로그인 된, 되어있음이 지속되는 상태
접속량이 증가하면 메모리가 부족해지게 되는 단점이 있다.
메모리가 부족해져서 서버가 재부팅을 하게되는 상황이 생기면 휘발성인 메모리의 특성으로 인해 모든 사용자의 세션이 삭제 되어 다시 로그인을 해야한다.
만약 메모리의 단점을 보완하기 위해 세션을 하드에 보관하게 되면 그로 인해 더욱 다양한 문제점이 발생하게 된다. (세션 유지의 어려움, 속도 저하 등)
토큰이란
일종의 권리를 부여 해주는 것
사용자가 로그인을 할때 id와 pw를 입력하고 로그인을 시도하면 서버는 이를 확인하여 정상적인 접근임이 확인 되면 유효한 사용자라는 토큰(권리)을 발행한다.
유효한 사용자라는 토큰을 부여받은 사용자는 해당 사이트의 여러 서비스들을 이용할 수 있게 된다. JWT 토큰 위캔 정리 링크
JWT(JSON Web Token)란
모바일이나 웹의 사용자 인증을 위해 사용하는 암호화 토큰을 의미한다.
헤더, 페이로드, 서명으로 구성되어있다.
헤더(header) : 토큰의 타입과 해시 암호화 알고리즘으로 구성
페이로드(payload) : 토큰에 담을 정보가 들어있다. 이 곳에 담을 정보의 한 조각을 클레임이라 부르고 이는 name/value 한 쌍으로 이루어져 있다.
서명(signature) : 헤더와 페이로드, 그리고 서버의 secret key를 사용하여 JWT의 백엔드에서 발행된다. 각 요청시 서명이 확인 되고 헤더 또는 페이로드의 정보가 사용자에 의해 변경 된 경우(해킹 등) 서명이 무효화 된다. JWT 위캔 정리 링크
시청후기
웹서핑, 게임 등을 하며 어렴풋하게만 느끼고 있던 토큰, 세션에 대해 조금은 명확하게 알게 되었다.
아직은 어렵기만 한 로그인에 대한 내용이지만 무지의 상태에서 조금은 뭔지 알 것 같은 상태로 성장하게 된 것 같다.