JWT란?

rekv·2025년 2월 7일

JWT란?

JWT(Json Web Token)
JWT(JSON Web Token)는 웹 애플리케이션에서 인증(Authentication)과 권한 부여(Authorization)를 위해 사용되는 토큰 기반의 기술

JWT는 Json Web Token의 약자로, 일반적으로 클라이언트와 서버 사이에서 통신할 때 권한을 위해 사용하는 토큰이다. 웹 상에서 정보를 Json형태로 주고 받기 위해 표준규약에 따라 생성한 암호화된 토큰으로 복잡하고 읽을 수 없는 string 형태로 저장되어있다.

JWT의 기본 구조

JWT는 헤더(header), 페이로드(payload), 서명(signature) 세 파트로 나눠져 있으며, 아래와 같은 형태로 구성되어 있다.

헤더 (Header)

어떠한 알고리즘으로 암호화 할 것인지, 어떠한 토큰을 사용할 것 인지에 대한 정보가 들어있다.

정보 (Payload)

전달하려는 정보(사용자 id나 다른 데이터들, 이것들을 클레임이라고 부른다)가 들어있다.
payload에 있는 내용은 수정이 가능하여 더 많은 정보를 추가할 수 있다. 그러나 노출과 수정이 가능한 지점이기 때문에 인증이 필요한 최소한의 정보(아이디, 비밀번호 등 개인정보가 아닌 이 토큰을 가졌을 때 권한의 범위나 토큰의 발급일과 만료일자 등)만을 담아야한다.

서명 (Signature)

가장 중요한 부분으로 헤더정보를 합친 후 발급해준 서버가 지정한 secret key로 암호화 시켜 토큰을 변조하기 어렵게 만들어준다.

JWT 특징

특징설명
무상태(Stateless)서버에서 세션을 관리하지 않고, 클라이언트가 JWT를 보관
자체 포함(Self-contained)사용자 정보와 권한을 토큰 안에 직접 저장
간편한 인증 처리서버가 토큰의 유효성만 검사하면 인증 완료

JWT의 동작원리

  1. 사용자가 id와 password를 입력하여 로그인 요청을 한다.
  2. 서버는 회원DB에 들어가 있는 사용자인지 확인을 한다.
  3. 확이 되면 서버는 로그인 요청 확인 후, secret key를 통해 토큰을 발급한다.
  4. 이것을 클라이언트에 전달한다.
  5. 서비스 요청과 권한을 확인하기 위해서 헤더에 데이터(JWT) 요청을 한다.
  6. 데이터를 확인하고 JWT에서 사용자 정보를 확인한다.
  7. 클라이언트 요청에 대한 응답과 요청한 데이터를 전달해준다.

이와 같이 토큰 기반 인증방식은 사용자의 인증이 완료된 이후에 토큰을 발급한다. 클라이언트쪽에서는 전달받은 토큰을 저장해두고 서버에 요청을 할 때마다 해당 토큰을 서버에 함께 전달한다. 그 이후 서버는 토큰을 검증하고 응답하는 방식으로 작동한다.

JWT의 장점과 단점

장점

  • 세션 관리 불필요 → 서버 확장성(Scale-out) 용이
  • 빠른 인증 처리 → DB 조회 없이 토큰 검증으로 인증 가능
  • Cross-Platform 지원 → 다양한 환경에서 사용 가능 (웹, 모바일, API 등)

단점

  • 토큰 탈취 시 위험 → 탈취된 토큰으로 인증 가능
  • 토큰 만료 전 강제 로그아웃 어려움 → 별도 블랙리스트 관리 필요
  • 페이로드 정보 노출 → 민감한 정보 저장 금지 (암호화 X)

JWT 사용 시 주의점

  • 비밀 키(Secret Key) 안전하게 관리
  • HTTPS로 전송하여 중간자 공격 방지
  • 만료 시간 설정으로 보안 강화
  • 민감한 정보 저장 금지 (페이로드는 암호화되지 않음)
  • 필요 시 Refresh Token과 함께 사용하여 보안 강화

일반 토큰 기반 vs 클레임 토큰 기반

JWT를 사용하는 가장 큰 이유는 클레임(Claim) 토큰 기반 인증이 주는 편리함이 가장 크다고 할 수 있다. 과연 일반 토큰 기반과 클레임 토큰 기반 인증의 차이는 무엇일까?
기존에 주로 사용하던 일반 토큰 기반 인증은 토큰을 검증할 때 필요한 관련 정보들을 서버에 저장해두고 있었기 때문에 항상 DB에 접근해야만 했었다. 또한 session방식 또한 저장소에 저장해두었던 session ID를 찾아와 검증하는 절차를 가져 다소 번거롭다.
하지만 클레임 토큰 기반으로 이루어진 JWT(Json Web Token)는 사용자 인증에 필요한 모든 정보를 토큰 자체에 담고 있기 때문에 별도의 인증 저장소가 필요없다. 분산 마이크로 서비스 환경에서 중앙 집중식 인증 서버와 데이터베이스에 의존하지 않는 쉬운 인증을 제공하여 일반 토큰 기반 인증에 비해 편리하다고 말할 수 있다.

0개의 댓글