Backend Engineering

JWT(Json Web Token) 간단 정리

zamezzz 2025. 6. 2. 21:39

JWT는 요즘 웹/모바일 API에서 인증 방식으로 자주 쓰입니다.
이번 글에서는 JWT가 무엇인지, 어떻게 동작하는지, 그리고 장단점과 보안 이슈를 간단히 정리해보겠습니다.

■ JWT란?

JWT는 Json Web Token의 줄임말입니다.
인증 정보를 JSON 형태로 담아서 서명(Signed Token) 처리한 문자열입니다.
토큰은 아래처럼 세 부분으로 구성됩니다.

 
[헤더].[페이로드].[서명]
  • Header: 토큰 타입과 서명 알고리즘 정보 (예: HS256)
  • Payload: 실제 데이터 (예: userId, role, 만료시간 등)
  • Signature: 위 두 개를 비밀키로 서명한 값

각 부분은 Base64로 인코딩되어 .으로 연결됩니다.
브라우저 콘솔이나 https://jwt.io/ 에서 쉽게 디코딩해서 내용을 확인할 수 있습니다.

 

예시 토큰을 한번 보시면 이해가 더 쉬울 것 같습니다. (jwt.io에서 제공하는 내용입니다.)

 

■ JWT 동작 원리

JWT는 주로 로그인 이후 사용자 인증을 위해 사용됩니다.

  1. 사용자가 로그인하면 서버는 JWT를 생성해 클라이언트에 전달합니다.
  2. 클라이언트는 이 토큰을 저장해두고, 이후 요청할 때마다 HTTP 헤더에 붙여 보냅니다.
  3. 서버는 이 토큰의 서명을 검증해 사용자를 식별합니다.

이 구조는 Stateless하다는 특징이 있습니다.
즉, 서버가 세션을 별도로 저장하지 않아도 됩니다.

 

■ JWT 장점과 단점

* 장점

  • 서버 상태 관리 불필요 (세션 저장 X)
  • 수평 확장이 쉬움 (무상태 인증)
  • 모바일 앱, SPA 등 다양한 환경에 잘 어울림
  • 토큰에 원하는 정보를 담을 수 있어 유연함

* 단점

  • 토큰이 길다 → 네트워크 트래픽 부담
  • 만료 전까지는 무조건 유효 → 탈취 시 대처 어려움
  • Payload는 암호화되지 않음 → 민감 정보 담으면 안 됨

■ 보안 관련 고려사항

JWT는 편리하지만 보안 측면에서 주의가 필요합니다.

  • HTTPS는 필수입니다. 토큰이 평문으로 전송되기 때문입니다.
  • 토큰 저장 위치는 상황에 따라 선택해야 합니다.
    • 브라우저: HttpOnly Cookie 권장
    • 앱: Secure Storage
  • IP, 디바이스 정보 등을 함께 기록해 토큰 도용을 감지하는 방법도 있습니다.
    • User-Agent 등을 함께 저장하여 사용자 (접속 디바이스) 식별 등 
  • refreshToken 전략을 함께 쓰는 것이 안전합니다.
    • accessToken은 만료주기를 짧게, 클라이언트에서 관리
    • refreshToken은 만료주기를 길게, 서버에서 관리 (Blacklisting 등 가능)

accessToken과 refreshToken 을 어떻게 같이 사용하는지 그 흐름을 간단히 설명하겠습니다.

[1] 사용자가 ID/PW로 로그인 요청
    → 예: ID: user1234 / PW: password1234

[2] 서버가 로그인 정보를 확인 후
    → accessToken + refreshToken 발급

[3] 클라이언트는 accessToken을 가지고 API 요청
    → Authorization: Bearer {accessToken}

[4] 서버는 accessToken을 검증하고, 유효하면 응답 반환

[5] accessToken이 만료된 경우,
    → 클라이언트는 refreshToken으로 accessToken 재발급 요청

[6] 서버가 refreshToken 검증 후 새로운 accessToken을 발급

 

위와 같은 흐름으로

accessToken은 짧은 유효기간으로 보안성을 확보하고,  refreshToken은 로그인 상태 유지를 위한 수단으로 함께 사용하는 구조입니다.

 

accessToken이 탈취되더라도 일정 시간 후 자동 만료되고, refreshToken은 서버에서 관리하거나 무효화할 수 있어 보다 안전한 인증이 가능합니다.

 

JWT(Json Web Token) 라는 개념 자체가 어려울 수는 있지만, 한 번 이해하면 매우 간단합니다.

JWT는 단순하면서도 강력한 인증 수단이지만, 단점도 분명히 있으므로, 서비스 특성과 규모에 맞게 사용하는 것이 중요합니다.

 

그럼 JWT 간단 정리 글을 마치도록 하겠습니다.

'Backend Engineering' 카테고리의 다른 글

OAuth 2.0 정리  (1) 2025.06.05