🔑 JWT란?

정의

JWT(JSON Web Token)는 서버와 클라이언트가 안전하게 정보를 주고받기 위한 토큰 형식이다. 주로 인증 후 발급된 정보를 담아, 이후 요청에서 사용자를 식별하는 데 활용한다.

🧱 JWT의 구조

  • Header: 토큰 타입과 서명 알고리즘 정보
  • Payload: 사용자 정보와 기타 클레임
  • Signature: 위변조 검증용 서명

포인트

JWT는 서버가 상태를 저장하지 않는 방식으로 인증을 구성할 때 자주 사용된다.

🔄 동작 흐름

  1. 사용자가 로그인한다.
  2. 서버가 JWT를 발급한다.
  3. 클라이언트가 토큰을 저장한다.
  4. 이후 요청마다 토큰을 함께 보낸다.
  5. 서버는 서명을 검증하고 요청을 처리한다.

⚡ 주요 특징

  • 서버 세션 저장이 줄어든다.
  • 필요한 정보를 토큰 안에 담아 전달할 수 있다.
  • 서명 검증으로 위변조를 확인할 수 있다.
  • 분산 환경에서 사용하기 좋다.

⚠️ 주의할 점

  • Payload는 암호화가 아니라 인코딩이다.
  • 민감한 정보를 Payload에 직접 넣지 않는 것이 좋다.
  • 토큰 만료 시간과 재발급 정책을 설계해야 한다.
  • HTTPS와 함께 사용하는 것이 기본이다.

[!important] 주의 JWT는 편리하지만 토큰 탈취와 만료 관리를 반드시 고려해야 한다. 로그아웃, 재발급, 강제 만료 같은 정책이 없으면 운영이 불편해질 수 있다.

🛠️ 실무에서 많이 쓰는 방식

  • Access Token
  • Refresh Token

Access Token

  • 짧은 만료 시간을 둔다.
  • API 요청 인증에 사용한다.

Refresh Token

  • 상대적으로 긴 만료 시간을 둔다.
  • Access Token 재발급에 사용한다.

✅ 장점

  • 서버 상태 저장 부담이 줄어든다.
  • 분산 시스템에 적합하다.
  • 인증 정보를 토큰 단위로 전달할 수 있다.
  • 확장성이 좋다.

❌ 단점

  • 토큰 탈취 시 피해가 생길 수 있다.
  • 세밀한 강제 만료가 어렵다.
  • 토큰 크기가 커질 수 있다.
  • Payload에 민감 정보를 넣기 어렵다.

🧩 함께 보면 좋은 개념

  • OAuth2
  • Redis
  • Restful

연결문서

댓글남기기