본문 바로가기
IT개발/Tech Notes

JWT란 무엇인가?

by 시간기억자 2025. 4. 14.
반응형

JWT(Json Web Token)는 로그인된 사용자의 정보를 담아
서버와 클라이언트가 주고받는 토큰 기반 인증 방식이다.


✅ 왜 JWT를 사용하는가?

기존에는 세션(Session)을 사용해서 인증 상태를 유지했다.
하지만 세션은 서버에 상태를 저장하기 때문에,
사용자가 많아지면 서버의 부하도 함께 늘어난다.

JWT는 서버가 상태를 기억하지 않아도 된다.
사용자 정보를 토큰에 직접 담아서 클라이언트에게 전달하고,
이 토큰을 가지고 서버에 요청하면
서버는 토큰만으로 사용자를 식별할 수 있다.


✅ JWT 구조는 어떻게 생겼을까?

JWT는 총 3개의 부분으로 구성된다.

  • Header (헤더): 토큰 타입과 서명 알고리즘 정보
  • Payload (페이로드): 사용자 정보(예: id, role), 만료 시간 등
  • Signature (서명): 위 두 내용을 암호화한 서명값

예시 구조:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.  
eyJ1c2VyX2lkIjoxMjMsInJvbGUiOiJ1c2VyIiwiZXhwIjoxNzAwMDAwMDB9.  
5fEB7o1jUuVXlNfZd0MZVj8Z-7PRuAIlSlrP_oHd4yo

✅ JWT는 어떻게 사용될까?

  1. 사용자가 로그인 요청
  2. 서버가 사용자 정보 기반으로 JWT 발급
  3. 클라이언트는 JWT를 저장 (주로 로컬 스토리지)
  4. 이후 서버에 요청할 때마다 HTTP 헤더에 JWT 포함
  5. 서버는 이 토큰을 검증하여 사용자 인증

✅ 실제 사용 예제 (Spring Boot 기반)

 

// JWT 발급 예시 (Java - jjwt 라이브러리 사용)
String jwt = Jwts.builder()
    .setSubject("user@example.com")
    .claim("role", "USER")
    .setIssuedAt(new Date())
    .setExpiration(new Date(System.currentTimeMillis() + 3600000)) // 1시간 유효
    .signWith(SignatureAlgorithm.HS256, "secretKey")
    .compact();
// 클라이언트가 API 요청 시
GET /api/user/profile HTTP/1.1
Authorization: Bearer eyJhbGciOi...
// 서버에서 토큰 검증
Claims claims = Jwts.parser()
    .setSigningKey("secretKey")
    .parseClaimsJws(token)
    .getBody();

String email = claims.getSubject();
String role = claims.get("role", String.class);

✅ JWT의 장점

  • 서버가 세션 상태를 저장할 필요가 없다 (Stateless)
  • 확장성에 유리 (서버 분산 환경에서 유리함)
  • 모바일, SPA 등 다양한 플랫폼에서 활용하기 좋다

⚠️ JWT 주의사항

  • 토큰이 유출되면 위험하다 → 반드시 HTTPS 사용
  • 토큰을 저장할 때 XSS 공격에 노출되지 않도록 주의
  • 민감한 정보는 Payload에 포함하지 않는 것이 좋다

🔍 결론

JWT는 서버에 상태를 저장하지 않는 토큰 기반 인증 방식이다.
서버 확장성에 유리하고, 다양한 플랫폼에서 활용할 수 있어 최근 많이 사용된다.
하지만 보안에 취약할 수 있으니 항상 주의해서 사용해야 한다.


📌 매일 간단히 IT 관련 개념을 익히고 싶다면 구독하세요!👇👇👇

http://www.youtube.com/@itbite_daily

 

오늘의 IT한입

👋 하루 한 입, 쉽게 배우는 IT & 개발 개념! 프로그래밍, 데이터베이스, 운영체제, 네트워크, 보안, 코딩테스트까지! 취업 준비부터 실무 감각까지 매일 짧고 강력하게 정리해드립니다. 📍 매일

www.youtube.com

 

반응형

댓글