웹 개발을 하다보면 필연적으로 듣게 되는 용어가 있다.
토큰 쿠키 세션
웹에서 사용자 인증과 상태 유지를 위해 사용되는 주요 개념이다.
웹 개발에서 많이 들어서 익숙하지만 언제 어떤걸 써야 적절할까?
그리고 왜 써야 할까?
우선, 토큰 편이다 !
인증을 위한 보안 토큰으로 주로, JWT(Json Web Token)이 사용된다.
클라이언트에서 저장하게 되며 주로 로컬 스토리지에 저장한다.
보통 프론트엔드에서 백엔드 api를 호출할때 로컬 스토리지에서 access token을 꺼내서 사용하는 것을 많이 봤을 것이다.
OAuth 인증(구글, 페이스북 로그인)이나 RESTful API 인증 등에서 사용된다.
JWT(JSON Web Token)은 json 형식으로 정보를 안전하게 주고 받을 수 있는 토큰 기반 인증 방식이다. 주로 사용자 인증, 권한 부여에 사용된다.
💡 JWT의 특징
💡 JWT의 구조
크게 3개의 부분으로 구성된다.
헤더 + 페이로드 + 서명

각 부분은 .으로 구분된다.
Header(헤더)는 JWT의 타입과 서명 알고리즘 정보를 포함하는 부분이다.
Payload(페이로드)는 사용자의 정보(claim)을 포함하는 부분이다. 페이로드에 담긴 데이터는 Base64로 인코딩되지만, 암호화되지는 않기에 민감한 정보는 포함하지 않도록 주의해야 한다.
Signature(서명)은 JWT의 무결성은 보장하는 부분으로, 헤더와 페이로드를 조합한 후 secret key로 서명한다.
🚨 JWT에서 주의해야 할 점
Access Token
사용자가 로그인하면 서버가 발급하는 토큰으로 API 요청을 인증할 때 사용된다. 일반적으로 짧은 유효 기간을 가지고, 만료되면 더 이상 사용할 수 없다.
Refresh Token
엑세스 토큰이 만료되었을 때, 새로운 액세스 토큰을 발급받기 위한 토큰이다. 일반적으로 엑세스 토큰보다 긴 유효 기간을 가진다. 보안 강화를 위해 엑세스 토큰과 달리 서버에 저장하는 경우도 있다.
왜 리프레시 토큰이 필요할까??
엑세스 토큰만 사용해서 유효기간을 왕창 늘려놓으면 보안 위험이 증가한다.. 반대로 유효기간이 너무 짧으면 사용자는 자꾸 자꾸 로그인해야 해서 불편함을 느끼게 된다.
리프레시 토큰을 추가하면 엑세스 토큰을 짧게 설정해 보안을 강화할 수 있고, 사용자는 자주 로그인 하지 않아도 로그인 유지가 가능한 장점을 가지게 되는 것이다 !!