프론트엔드 개발을 하다 보면 이런 의문이 들 때가 있습니다.
"로그아웃은 그냥 로컬 스토리지에서 토큰만 지우면 되는 거 아닌가?"
얼핏 보면 그렇게 생각할 수 있지만, 실제로는 서버에 로그아웃 요청을 보내는 것이 매우 중요한 보안 절차입니다.
서버에 로그아웃 요청을 보내는 4가지 이유
1. 토큰 무효화 (Token Invalidation)
- 로컬에서 토큰을 삭제해도, 해당 토큰은 만료 시간까지 여전히 유효합니다
- 토큰이 탈취되었다면 누군가 그 토큰으로 계속 API를 호출할 수 있습니다
- 서버에서 해당 토큰을 블랙리스트에 추가하거나 즉시 무효화해야 합니다
2. 서버 세션 정리
- 서버에 저장된 사용자 관련 임시 데이터를 정리할 수 있습니다
- RefreshToken을 사용하는 경우, 서버에 저장된 RefreshToken도 함께 제거해야 합니다
- 연결된 웹소켓 세션 등도 정리가 필요할 수 있습니다
3. 감사(Audit) 로그
- 보안을 위해 사용자의 로그인/로그아웃 시간을 기록해야 합니다
- 비정상적인 접근이나 보안 사고 발생 시 분석할 수 있는 자료가 됩니다
- 사용자의 서비스 이용 패턴을 분석하는 데도 활용될 수 있습니다
4. 다중 기기 로그아웃 지원
- 한 계정이 여러 기기에서 로그인된 경우가 많습니다
- "모든 기기에서 로그아웃" 같은 기능을 구현하려면 서버의 도움이 필요합니다
- 다른 기기의 세션도 함께 종료할 수 있어야 합니다
결론
단순히 클라이언트의 토큰을 삭제하는 것만으로는 완전한 로그아웃이라고 할 수 없습니다.
보안성과 안정성을 위해서는 반드시 서버에 로그아웃 요청을 보내어 관련된 모든 세션과 토큰을 적절히 정리해야 합니다.