이제까지 해왔던 과제가 파이어베이스를 통해서 로그인을 구현했다라면 이번에는 REST API를 이용해서 인증 서버에서 인증을 처리하고 json server에 데이터를 가져오는 처리를 해야 한다.
그래서 투 트랙으로 데이터를 가져올 때 인증과 데이터를 어떻게 처리 해야하는지 감이 잘 안잡혀서 문제가 있었다.
로그인 여부 정보에 따라서 사용자가 볼 수 있는 페이지와 볼 수 없는 페이지를 구분해서 보여줘야 하는 것이 개인 과제의 구현 내용이다. 기존 로그인 돼있지 않은 유저가 회원가입을 하고 회원가입한 정보에 따라서 로그인을 한다면 HTTP 통신을 통해서 받은 정보로 인증 여부에 대해서 알 수 있고 애플리케이션 내에서 로그인 여부에 따른 보여주고 싶은 페이지를 구분해서 보여줄 수 있다.
새로고침을 한다면 저장했던 사용자의 정보가 날라가기 때문에 응답으로 받은 access token을 로컬 스토리지에 저장을 하고 CRUD 요청을 할 때 이 access token의 만료 여부를 판단한 뒤에 유효한 토큰이라면 그대로 사용자가 인가됐다고 판단하고 컨텐츠를 제공하는 방식으로 하는 것 까지도 제대로 이해했다.
마치, 기차에 탑승권을 구매하고 탔는데 역무원이 탑승권을 보고 이것이 올바른 탑승권이면 그대로 타게두고 올바르지 않은 탑승권이라면 내리게 해야되는 것 처럼 기차를 타는 것은 동일하나 그 이후에 검증을 통해서 조작을 하는 것처럼 설명할 수 있을 것이다.
여기까지 이해하는데도 많은 사람들에게 물어보고 혼자서 이해가 가지 않은 것도 많았다.
우선, 제일 마음에 걸렸던 내용은 새로운 페이지가 로드가 됐을 때 access token이 있다면 이 회원은 이미 인증된 사용자인지 아닌지를 판단을 어떻게 내려야 하는것이다.
이렇게 생각한 이유는 access token은 언제든지 만료가 될 수 있는 것으로 만약에 만료가 됐다면 그 사용자는 인증되지 않은 사용자로 처리를 해야 한다고 생각을 하는데 그런 사용자에게 데이터를 제공하는 것이 올바른 행위인가? 라는 의문이 들었기 때문이다.
사실 애플리케이션을 어떻게 설계하는냐에 따라서 다르겠지만 현재의 서버 설계와 그리고 애플리케이션의 설계에 따라서 앞으로 이렇게 구현해나갈 생각이다.
현재 서버 설계는 데이터 서버 (json-server)와 인증 서버가 2개의 별도의 서버가 있기 때문에 데이터 서버에 요청을 하기 전에 먼저 인증 서버에 access token을 보내어 토큰의 만료 여부를 판단할 수 있게끔 구성해야 하기 때문에 axios intercepptor를 이용하여 해당 기능을 구현할 예정이다.
wow