Kuma's Curious Paradise
[이룸] 240221 access token reissue 방법 고민 본문
[문제 상황]
토큰 재발급 로직 구현 중, 토큰이 만료되었음을 어떻게 알 수 있는지 고민하게 되었다. 먼저, 토큰의 만료 여부를 확인하는 방법에는 크게 두 가지가 있었다.
- 프론트에서 토큰 만료 시간을 저장한 후, 토큰이 만료되기 전에 토큰 재발급 요청을 보낸다.
- 백엔드에서 토큰의 유효성을 확인한 후, 401 에러를 보내면 프론트에서는 토큰이 만료되었음을 인지하고 토큰 재발급 요청을 보낸다.
이중, 어떤 방법을 선택해야 할까?
[해결 방안 고민]
프론트엔드에서 토큰 만료 확인:
- 서버 부하 감소: 클라이언트 → 요청 → 서버의 401 응답 → 토큰 재발급 요청 → 서버는 토큰 재발급하여 응답 → 다시 요청 → 서버의 200 응답
백엔드에서 토큰 만료를 확인하면 세 번의 요청과 응답을 거치지만, 프론트에서 토큰 만료를 확인할 경우 2번으로 줄어든다. 트래픽이 많다면 서버 부하를 줄일 수 있을 것.
- 사용자 경험 개선: 클라이언트 측에서 토큰이 만료되었음을 감지하고 사용자에게 로그인 상태가 만료되었음을 즉시 알리거나 필요한 조치를 빠르게 취할 수 있다. 글을 쓰다가 갑자기 로그아웃되어 다시 로그인해야 하는 일 등이 사라질 것.
백엔드에서 토큰 만료 확인:
- 보안 강화: 토큰과 관련된 모든 일은 백엔드에서 처리하는 것이 보안에 유리하다. 클라이언트 측에서 발생할 수 있는 오류나 조작 등을 방지하고, 토큰 유효성 검사를 실시하여 보안을 강화하는 것이 가능.
- 추가 작업 가능: 요청이 오면, 서버는 토큰을 검증하고 사용자가 지금 어떤 상태에 있는지, 현재 요청이 온 기기가 어떤 기기인지 등을 확인하고 추가적인 작업에 들어갈 수 있다. 더욱 견고한 보안을 위해 추가 인증을 요청할 수도 있고, 사용자 상태에 맞는 조치를 취할 수도 있을 테니, 복잡한 요구 사항이 있다면 맞출 수 있을 것.
[적용 결과] 토큰과 관련하여 가장 중요한 것은 ‘보안’이므로 보안을 강화하는 방향으로 가는 것이 맞다고 판단하여, 백엔드에서 토큰 만료를 확인하고 401 응답을 보내 주기로 결정하였다. 또한, 현재 프론트엔드에서 쿠키를 다룰 수 없어 어려움을 겪고 있는 상황이라, 백엔드에서 최대한 토큰을 처리하는 것이 좋다고 판단하였다.
'이룸 프로젝트' 카테고리의 다른 글
[이룸] 240225 refresh token 관리에 redis 도입 (0) | 2024.03.07 |
---|---|
[이룸] 240223 토큰 재발급 포스트맨 테스트 (0) | 2024.03.06 |
[이룸] 240219 카카오 로그인 refresh token 관련 500 에러 (0) | 2024.03.06 |
[이룸] 240215 responseDto를 만들던 중 발생한 문제 (0) | 2024.03.06 |
[이룸] 240213 max-age와 expires의 차이 (0) | 2024.03.06 |