API를 호출할 때마다 401 Unauthorized 응답이 돌아오거나 화면에 Invalid Token이라는 메시지만 반복해서 출력된다. 배포를 코앞에 둔 상황에서 이런 오류를 마주하면 원인을 찾느라 소중한 시간을 허비하게 된다.
오류 메시지만으로는 토큰이 만료된 것인지, 구조가 깨진 것인지 알기 어렵다. 여기서는 토큰을 안전하고 빠르게 분석하는 방법을 살펴본다.
왜 이 문제가 생기는가
RFC 7519 표준으로 정의된 JSON Web Token은 헤더, 페이로드, 서명의 세 부분으로 이루어진 문자열이다. 점(.)을 기준으로 나뉘며 각 부분은 Base64 방식으로 인코딩되는데, 자세한 JWT 구조와 원리 완벽 가이드를 통해 각 영역의 동작 방식을 이해하면 오류를 더 쉽게 찾을 수 있다.
오류가 발생하는 주된 원인은 다음과 같다.
- 만료 시간(exp) 경과
- 잘못된 서명(Secret Key 불일치)
- 문자열 복사 과정에서 발생한 공백이나 누락
- 발행 시간(iat) 또는 활성화 시간(nbf) 설정 오류
서버는 클라이언트가 보낸 토큰의 무결성을 검증하는 과정에서 조건이 하나라도 어긋나면 곧바로 거부 반응을 일으킨다. 이때 JWT 디버거 & 토큰 파서 같은 도구로 내부 구조를 직접 들여다보는 것이 가장 빠른 진단 방법이다.
해결 방법
문제를 해결하려면 먼저 토큰 상태를 직접 확인해야 한다. 다음 순서로 진단을 진행한다.
- 문제가 발생한 토큰 전체 문자열을 복사한다.
- 브라우저 기반의 JWT 디버거 & 토큰 파서 입력창에 토큰을 붙여넣는다.
- 파싱된 페이로드 영역에서 exp 항목의 타임스탬프를 확인한다.
- 현재 시간과 비교하여 토큰이 만료되었는지 판별한다.
만약 토큰이 만료되었다면 로그인 프로세스를 다시 거쳐 새로운 토큰을 발급받아야 한다. 페이로드 내부의 사용자 식별자나 권한 정보에 오타가 있는지 함께 점검한다.
그래도 안 될 때
만료 시간도 정상이고 페이로드 데이터도 올바른데 계속 오류가 난다면 서명 영역을 의심해야 한다. 토큰을 생성할 때 사용한 비밀키와 서버가 검증용으로 사용하는 키가 다르면 서명 검증 단계에서 실패한다.
프론트엔드 개발 단계에서 백엔드 개발자와 협력하여 환경변수 설정 값을 대조한다. 또한 토큰을 로컬스토리지나 쿠키에 저장하고 불러오는 과정에서 앞뒤로 공백 문자가 붙지 않았는지 확인한다.
재발 방지 팁
토큰 관련 오류는 개발 환경과 운영 환경의 설정 차이에서 자주 발생한다. 토큰 만료 시간을 너무 짧게 설정했다면 사용자 경험을 해칠 수 있으므로 적절한 리프레시 토큰 로직을 함께 설계한다. 디버깅 과정에서 민감한 인증 정보를 다룰 때는 데이터가 외부 서버로 유출되지 않도록 로컬 환경에서만 작동하는 도구를 활용하는 습관을 들인다.