오늘은 토큰 대해서 공부했다. 토큰은 이전에 세션의 단점을 보완할 수 있는 인증방식이다.
세션방식은 클라이언트가 서버에게 요청을 보냈을때 서버는 요청에 세션 아이디가 있는지 확인하고 없으면 데이터베이스에 요청된 사용자의 정보가 데이터베이스에 있는지 확인한다. 데이터베이스의 사용자가 확인되면 사용자의정보와 서버가 가지고 있는 시크릿 코드와 함께 해싱하여 세션아이디를 만든다. 만들어진 세션아이디를 사용자 정보와 함께 저장하고 세션아이디를 쿠키에 담아서 클라이언트에게 응답한다. 이제는 세션아이디가 쿠키에 저장되었기 때문에 다음 요청이 와도 데이터베이스까지 확인하지 않고 서버 안에서 확이하여 응답하는 방식이다.
하지만 세션방식은 서버가 여러개가 있을 때 각각의 서버에 세션아이디가 저장되어 있는 세션 스토리지의 정보를 항상 공유하고 있어야 하고 동기화가 되어야 하는데 그렇기에는 서버의 부담이 커지고 빠른 시간에 그 작업을 해내기가 어렵기 때문에 서버가 많아지면 많아질수록 세션 방식은 관리하기가 어려워지는 단점이 있다.
이 단점을 보완된 방식이 토크 인증방식이다. 세션은 서버와 클라이언트 모두 세션 아이디를 가지는데 반해 토큰은 서버가 가지고 있지 않고 클라이언트가 토큰을 보관하고 있다. 토큰에는 AccessToken과 RefreshToken이 있다. Accesstoken은 권한을 부여받는데 사용하는 토큰이고 refreshtoken은 accesstoken의 재발급시에 사용하는 토큰이다. 이에 대한 부분은 다음에 다룰 것이다.
아직 흐름이 완전히 이해되지 못했다. 알것 같다가도 모르는 것 같다. 아직 확실히 모른다는 것이다. 더 공부해서 부족한 부분을 채워 넣고 설명할 수 있을 정도로 공부해야겠다. 모든 특징을 알아야 구현하기가 수월할 것 같다. 모든 방식을 이해하고 싶다.