면접을 볼때 jwt와 session을 이용한 인증방식의 차이점을 물어봤는데, 거기에 대해서 명확하게 대답하지 못했다. 그리고 생각해보니 쿠키랑 세션의 차이라고 하면 유효기간의 차이말고는 명확하게 설명을 할 수 없었다. 그렇기에 이번에는 세션, 쿠키 그리고 토큰에 대해서 알아보자
서버가 유저에 대해 기억하기 위해 브라우저에 데이터를 저장하게 되는데 이 데이터를 쿠키라고 한다.
- 유저가 페이지를 요청함
- 서버에서 쿠키를 생성한 후, 응답함
- 브라우저 에서 쿠키를 저장함
- 서버에서 정보를 처리해야하는 요청이 발생한다면, 쿠키를 업데이트 한 후 응답
브라우저에서 유저 정보를 관리하는 쿠키와 달리 서버에서 유저 정보를 관리한다.
- 유저가 서버에 접속해 서버가 sessionDB에 해당하는 sessionID(유일한 id)를 생성해 받는다. 이 id는 쿠키를 통해 브라우저로 돌아오고 저장된다.
- 사이트에서 다른 페이지에 접속한다면 브라우저가 가지고 있는 id가 있는 쿠키를 서버에게 보낸다.
- 해당 쿠키에 있는 sessionId를 통해 sessionDB에 접속해 해당 id가 누구인지 찾은 후에 존재한다면 인증이 된다
JSON Web Token의 약자이다.토큰(정보의 일부를 이용해 서명 알고리즘을 이용해 암호화된)을 서버와 주고 받으며 그때마다 인증을 하기 때문에 저장소도 필요하지 않다.
- 서버에 로그인 정보를 보낸다.
- 서버에 정해져 있는 사인 알고리즘을 이용해서 서명을 한 후 string 형태로 유저에게 보낸다.
- 이제 서버에 request를 보낼때 유저 정보 or 토큰을 보낸다.이때 서버가 토큰을 받으면 해당 서명이 유효한지 체크한 후 유효하다면 인증을 완료한다.