오늘 오전에도 역시 알고리즘이었다. 한문제를 풀었는데, 최대공약수 최소공배수문제였다. 예전에 프로그래머스 말고 백준에서 풀어봐서 쉽게 풀었다. 유클리드 호제법으로 풀었는데, 멘토님은 반복문을 통한 방법과 유클리드 호제법 두 가지 방법을 통해 풀어주셨다. 반복문은 아예 생각도 하지 못했는데, 풀이법을 보면서 왜 나는 이런 생각을 하지 못할까? 라고 항상 생각을 한다.
오후에는 1시간정도 수업을 하고 우리 전 기수의 팀프로젝트 시연에 참관을 하는 시간을 가졌다. 수업을 전에 배웠던, callback, promise, async await를 복습을 했다. 그 후 시연참관을 했는데, 와 생각보다 많은 기능들이 들어있고, 오픈API를 어느정도 알고 있어서 구현이 가능하겠구나 라고 생각했다. 앞으로 많은 고개가 있을거라고도 생각했다.
유저를 인증하고, 식별하기 위한 토큰기반 인증이다. 이 토큰은 서버에 저장되는 것이 아닌, 클라이언트에 저장되기 때문에 메모리나 스토리지 등을 통해 세션을 관리했던 서버의 부담이 줄어든다. 토큰에는 사용자의 권한이나, 서비스를 사용하기 위한 정보가 포함되어 있다. 데이터가 많아지면 토큰이 커질 수 있으며, 토큰이 한 번 발급된 이후 사용자의 정보를 바꾸더라도 재발급하지 않는 이상 반영되지 않는다.
JWT의 진행순서는 유저가 아이디, 패스워드를 통해 웹서비스 인증 -> 서버에서 서명된 토큰을 생성해서 유저에게 전달 -> 유저가 서버에 요청을 보낼 때마다 토큰을 같이 부착해서 전송 -> 서버는 전달온 토큰을 검증 순서로 진행이 된다.
구조는 헤더와 페이로드, 시그니쳐로 이루어져 있다. 이 각 요소들은 .으로 구분된다. 헤더에는 JWT의 타입과 해시 알고리즘 종류, 페이로드에는 서버에서 첨부한 유저 정보와 데이터, 시그니쳐에는 전자서명이 담겨져 있다.