Spring 기초 정리 - JWT (JSON Web Token)

Zyoon·2025년 5월 30일

Spring 기초정리

목록 보기
11/18
post-thumbnail

📘JWT 토큰에 대해 알아보기


JWT 란? (JSON Web Token)

  • 웹에서 사용자 인증과 정보 교환을 위해 사용하는 토큰 기반 인증 방법
  • JSON 형식으로 데이터를 안전하게 전달하기 위해 만들어진 표준
  • 서버와 클라이언트 간에 정보를 안전하게 주고받을 때 사용하며, 특히 인증 토큰으로 많이 활용된다.

JWT 구조

헤더(Header).페이로드(Payload).서명(Signature)
  1. 헤더(Header)
    • 토큰 타입과 해시 알고리즘 정보를 담고 있다.
    • { "alg": "HS256", "typ": "JWT" }
  2. 페이로드(Payload)
    • 사용자 정보 및 토큰의 클레임(claim, 주장)을 담고 있다.
    • 예: 사용자 ID, 권한, 토큰 만료 시간 등.
    • { "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }
  3. 서명(Signature)
    • 헤더와 페이로드를 비밀 키(secret key)로 암호화해 변조 방지를 위해 만든다.
    • HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

JWT 작동 방식

  • Spring Security의 인증 아키텍처 흐름

1. HTTP Request가 들어오면 AuthenticationFilter에서 요청을 받음

2. 사용자가 제공한 인증 토큰(Username/Password)이 생성

3. AuthenticationManager로 토큰이 전달되어 인증 위임 시작

4. AuthenticationProvider 에게 실제 인증을 시도

5. Provider 에서 사용자 정보를 조회

6-7. UserDetailsService를 통해 실제 사용자 정보를 검색하고 검증

8-9. 인증 결과가 AuthenticationManager를 거쳐 Filter로 반환

10. 최종적으로 SecurityContextHolder에 인증 객체가 저장되어 인증 과정이 완료

JWT 장단점

장점

  • 서버에 저장 X
    • 토큰에 정보가 담겨 있어서 서버에서 세션을 관리할 필요 없음.
  • 확장성 좋음
    • 여러 서버(마이크로서비스)에서 인증 정보 공유 가능.
  • 정보를 담을 수 있음
    • 사용자 ID, 권한 등 필요한 정보를 토큰 안에 담아 쓸 수 있음.
  • 보안 서명
    • 토큰이 위조되지 않도록 서명되어 있음.

단점

  • 탈취되면 위험
    • 토큰이 유출되면 만료되기 전까지 막을 수 없음.
  • 중간에 삭제 어려움
    • 강제 로그아웃 같은 처리가 어려움 (블랙리스트로 보완 가능).
  • 암호화 아님
    • 내용이 노출될 수 있어 민감한 정보는 넣으면 안 됨.
  • 토큰이 길다
    • 헤더에 포함되므로 데이터 크기가 커질 수 있음.

JWT 사용하려면

  • 인증 상태를 서버에 저장하지 않고 클라이언트가 직접 가지고 다니게 하고 싶을 때
  • 마이크로서비스 구조 등 분산 시스템 환경에서 인증 정보를 공유해야 할 때
  • 모바일/웹 등 다양한 클라이언트에서 API 인증이 필요한 경우
profile
기어 올라가는 백엔드 개발

0개의 댓글