Dev Knowledge

JWT(Json Web Token)란?

mingmongs 2025. 3. 21. 13:48

title

프로젝트를 진행하면서, 인증 방식에 대해 고민을 해봤을 때가 있었다.
그중에서도 JWT 토큰 인증 방식을 사용하게 되었는데,
JWT란 무엇인지, 사용하면 장점이 무엇이 있는지에 대해 간단히 알아보자.

 

1) JWT(Json Web Token)란?

: 인증에 필요한 정보들을 암호화시킨 JSON 토큰으로, 인터넷 표준 인증 방식이다.

  • JWT는 유저를 인증하고 식별하기 위한 토큰(Token) 기반 인증이다.
  • 토큰 자체에 사용자의 권한 정보나 서비스를 사용하기 위한 정보가 포함된다.
  • RESTful과 같은 무상태(Stateless)인 환경에서 사용자 데이터를 주고받을 수 있다.
  • 세션(Session)을 사용하게 될 경우 쿠키 등을 통해 사용자를 식별하고 서버에 세션을 저장했지만, 토큰을 클라이언트에 저장하고 요청시 HTTP 헤더에 토큰을 첨부하는 것만으로도 단순하게 데이터를 요청하고 응답받을 수 있다.

 

2) JWT의 구조

img1

: JWT는 Header, Payload, Signature로 구성된다.
각 요소는 . 으로 구분된다.

2-1) Header (헤더)

: 서명 시 사용하는 키(kid), 사용할 타입(typ), 서명 암호화 알고리즘(alg)의 정보가 담겨 있다.

  • kid : 서명 시 사용하는 키(Public/Private Key)를 식별하는 값
  • typ : 토큰 유형
  • alg : 서명 암호화 알고리즘 HS256(HMAC SHA-256), HS512, RS256(RSASSA SHA-256), ES256(ECDSA P-256 curve SHA-256)

img2

2-2) Payload (페이로드)

: 토큰에서 사용할 정보의 조각들인 클레임(Claim)이 담겨 있다.

  • iss : 토큰 발급자(issuer) – Public Claims
  • sub : 토큰 제목(subject) – Public Claims
  • iat : 토큰 발급 시간(issued at) – Public Claims
  • exp : 토큰 만료 시간(expiration) – Public Claims
  • roles : 권한 – Private Cliams

img3

2-3) Signature (서명)

: Header(헤더) 에서 정의한 알고리즘 방식(alg)을 활용한다.
Header(헤더)+ 페이로드(Payload)와 서버가 갖고 있는 유일한 key 값을 합친 것을 헤더에서 정의한 알고리즘으로 암호화한다.

img4

2-4) JWT 토큰 복호화

: https://jwt.io/
해당 웹사이트에 접속하면, 암호화된 JWT 토큰을 복호화해볼 수 있다.

 

3) 장단점

3-1) 장점

  • 로컬에 저장하기 때문에 서버 용량에 영향을 끼치거나 받지 않는다.
  • 보다 안전하다. (공개키/개인키 or 비밀키를 통해 서명되기 때문에)
  • 모바일 앱에서 사용하기 적합하다.
    => 모바일 앱은 여러 플랫폼 및 기기에서 동작할 수 있고, 서로 다른 도메인에서 통신할 수도 있다.
    이때 JWT를 사용하면 플랫폼 독립적으로 사용자 인증을 처리할 수 있기 때문에 적합하다.
  • 네트워크 부하가 적다.
    => http헤더나 url 파라미터를 통해 간단하게 전송되기 때문이다.

3-2) 단점

  • 토큰의 크기가 커질수록 트래픽에 영향을 미칠 수 있다.
  • 토큰은 발급되면 만료 기간 변경이 불가능하므로 토큰 만료 처리를 구현해야 한다.

 

 

[reference]
https://blog.bizspring.co.kr/%ED%85%8C%ED%81%AC/jwt-json-web-token-%EA%B5%AC%EC%A1%B0-%EC%82%AC%EC%9A%A9/
http://www.opennaru.com/opennaru-blog/jwt-json-web-token/
https://velog.io/@chuu1019/%EC%95%8C%EA%B3%A0-%EC%93%B0%EC%9E%90-JWTJson-Web-Token