본격적인 회원가입/로그인 코드를 작성시작!
JWT를 이용하여 쿠키에 토큰을 저장하고.(토큰에는 seceret key가 들어있다.) 클라이언트는 제공받은 쿠키를 응답할 때 같이 보내 서버가 인증하기 위해 받는다.
이런 개념으로 코드를 작성하기 시작했다.
사용자의 인증/인가 허락 흐름은 이렇게 작동한다.
1. 사용자의 로그인 요청
2. 서버에서 사용자의 정보가 DB에 있는지 확인
2-1. 사용자의 정보가 DB에 존재 하지 않으면 오류 발생 및 오류 응답
2-2. 사용자의 정보가 DB에 존재하면 JWT 토큰을 쿠키에 담아 클라이언트에 전송.
3. 인증이 완료된 사용자는 앞으로 모든 응답에 JWT 토큰을 담은 쿠키를 같이 전송
4. 서버에서는 쿠키의 유효성을 검사해 쿠키의 인증/인가가 유효하다면 그에 맞는 권한을 부여해 서비스를 제공.
여기서 2번이 굉장히 어렵다. JWT를 쿠키에 담아서 어떻게 보내야 하는지? 받은 쿠키에서 사용자 정보를 어떻게 가공하는지? 그 가공하는 클래스는 어떤 클래스로 이루어지는지? 가공한 데이터는 UserDetails을 구현한 클래스인데, 이게 어떤 의미인지?가 아직 명료하게 정리가 되지 않은 상태이기에 구현에 어려움을 겪고있다.
그리고 인증/인가는 이제 Service단에서 수행하지 않고, Filter단에서 수행하는데, Filter는 DispatchServlet 전단에서 작동한 다는 것은 알지만, 이게 어떻게 작동하는지는 아직 어렵다...
개념은 이해했다."필터 단에서 User의 인증/인가를 처리하고 나머지 컨트롤 파트 과 그 후 단계에선 인증이 된 사용자만 적용한다." .
내가 이부분이 어려운 이유는 프론트 앤드와의 협업이 어려워서 일까? 라고 생각한다. 우리가 강의를 들으면서 하는 실습 예제는 프론트 엔드의 html과 함께 진행된다. 하지만 우리는 html을 작성하는 방법을 모르고, postman을 통해 요청을 하고, 응답을 받는다. 여기서 오는 괴리를 내가 힘들어 한다고 느꼈다.
이번 프로젝트를 하면서 나는 CRUD를 꽤나 능숙하게 다뤘다. CRUD를 하면서 나올 수 있는 오류들에 꽤나 유연히 극복했다.(물론 요청은 내가 바라는 대로 줬기 때문이다) 하지만 지난 개인 과제였던 CRUD는 내가 구현에 실패했다. 불과 2주일 차이지만, 나는 2주일동안 실패했던 프로젝트를 성공시켰다고 할 수 있다.
근데 이걸 만족하면 안된다. 나는 2주동안 성장했어야 했는데, 결국 2주동안 지난 주차의 복습을 했다고 생각할 수도 있다.
내 성장 속도가 느린건지, 커리큘럼이 어려운지 알 수는 없다. 하지만, 핵심은 나는 해내야 한다.
저번에 실패했기에 이번엔 더욱 성공이 간절하다. 꼭 해내자. 회원가입과 로그인 둘 다.
JWT 어렵다. 그래도 한번 익히면 된다. CRUD도 어려웠다. 그래도 난 이번에 해냈다. CRUD를 통해서 나는 API를 통해 어떻게 요청하고 응답하는지 배웠다. JWT를 하면서 쿠키가 어떻게 작동하는지 배울 수 있을 것.
쿠키의 흐름을 이해하기 위해서라도 이번 프로젝트를 끝까지 잡고 가자!