JWT(JSON Web Token)

2026. 4. 27. 22:00·Web

안녕하세요.

오늘은 서버와 클라이언트 간에 인증 정보를 안전하게 주고받기 위해 사용되는 JWT(JSON Web Token)에 대해 공부해보겠습니다.

 

JWT의 개념

JWT(JSON Web Token)는 인증에 필요한 정보들을 JSON 객체에 담아 인코딩하고, 이를 기반으로 서명을 생성하여 토큰 형태로 사용하는 인증 방식입니다.

기존의 세션 방식과 달리 서버가 사용자의 상태를 저장하지 않는 Stateless(무상태) 구조를 가집니다.

클라이언트가 직접 토큰을 보유하고 있다가 요청 시마다 서버에 전달하여 인증을 처리하는 것이 특징입니다.

 

 

JWT의 구조

JWT는 점(.)을 구분자로 하여 세 가지 부분으로 구성됩니다

구성 요소 설명 주요 내용
Header 토큰의 타입과 알고리즘 정보 토큰 타입(JWT), 해싱 알고리즘(HS256 등)
Payload 실제 담을 데이터(Claim) 사용자 ID, 권한, 만료 시간(exp) 등
Signature 위변조 검증을 위한 서명 Header+Payload와 서버 비밀키를 조합해 생성

⚠️ 주의: Payload는 암호화가 아닌 단순 인코딩입니다.
누구나 내용을 확인할 수 있으므로 비밀번호와 같은 민감한 정보는 절대 포함해서는 안 됩니다.

 

 

JWT의 동작 방식

JWT 인증은 일반적으로 다음과 같은 흐름으로 진행됩니다.

  1. 로그인 : 사용자가 로그인을 요청합니다.
  2. 토큰 발급 : 서버는 인증 완료 후 정보를 담은 JWT를 생성해 클라이언트에게 보냅니다.
  3. 토큰 저장 : 클라이언트는 받은 토큰을 저장(LocalStorage, Cookie 등)합니다.
  4. 요청 시 전달 : 인증이 필요한 API 호출 시 헤더(Authorization: Bearer <JWT>)에 토큰을 실어 보냅니다.
  5. 검증 : 서버는 자신의 비밀 키로 Signature를 검증하여 신뢰할 수 있는 토큰인지 확인합니다.

 

JWT의 특징

특징 설명
Stateless 서버가 세션을 유지할 필요가 없어 서버 부하가 적고 확장이 용이합니다.
이식성 HTTP 헤더를 통해 전달되므로 어떤 플랫폼(Web, iOS, Android)에서도 사용 가능합니다.
분산 환경 여러 서버가 운영되는 환경(MSA)에서도 공통 키만 있다면 인증 정보 공유가 쉽습니다.
효율성 토큰 자체에 정보를 담고 있어 DB 조회 횟수를 줄일 수 있습니다.

 

 

JWT의 장점

장점 설명
서버 부하 감소 서버가 사용자 세션 정보를 메모리나 DB에 저장할 필요가 없습니다. 서버는 토큰의 유효성 검증(Signature 확인)만 수행하면 되므로 리소스 소모가 훨씬 적습니다.
확장성(Scalability) 세션 방식은 여러 대의 서버 운영 시 세션 동기화 문제가 발생하지만, JWT는 어떤 서버로 요청이 가더라도 동일한 비밀키만 있다면 인증이 가능하여 수평 확장에 유리합니다.
무상태성(Stateless) 클라이언트와 서버 간의 연결 상태를 유지할 필요가 없습니다. 이는 REST API의 원칙에도 부합하며, 서버를 유연하게 관리할 수 있게 해줍니다.
멀티 플랫폼 지원 쿠키를 사용하지 않아도 되므로 CORS(Cross-Origin Resource Sharing) 문제에서 비교적 자유롭고, 모바일 앱(iOS/Android)과의 연동이 매우 간편합니다.
권한 제어의 용이성 Payload에 사용자의 권한(Role)이나 접근 가능한 범위(Scope)를 미리 담아둘 수 있어, 별도의 DB 조회 없이도 즉각적인 권한 체크가 가능합니다.

 

 

JWT 단점

단점 설명
무효화 어려움 서버가 토큰 상태를 저장하지 않기 때문에 로그아웃이나 강제 만료 처리가 어려워, 별도의 블랙리스트나 Refresh Token 전략이 필요합니다.
보안 탈취 토큰이 탈취되면 만료 전까지 누구나 사용 가능하므로, 유효기간을 짧게 설정하고 HTTPS 사용이 필수입니다.
암호화 없음 Payload는 암호화가 아닌 인코딩만 되어 있어 누구나 내용을 확인할 수 있으므로, 비밀번호 같은 민감 정보는 절대 담으면 안 됩니다.
토큰 크기 부담 세션 ID보다 크기가 커서 매 요청마다 전송되는 네트워크 비용이 누적될 수 있습니다.

 

 

JWT 보안을 위한 필수 전략

전략 설명
Access Token 유효기간을 짧게(보통 15~30분) 설정하여 토큰이 탈취되더라도 피해를 최소화합니다.
Refresh Token 상대적으로 긴 만료 기간을 가지며, 서버(DB)에 저장하여 관리합니다.
Access Token이 만료되었을 때만 새로운 토큰을 재발급하는 데 사용됩니다.
HTTPS 사용 네트워크 중간에서 토큰이 탈취되는 것을 방지하기 위해 반드시 HTTPS 환경에서 통신해야 합니다.

 

 

마무리 정리

이번 글에서는 JWT의 개념과 구조, 특징에 대해 공부하였습니다.

JWT는 서버 상태 없이 인증을 처리할 수 있는 효율적인 방식이지만 데이터 노출 위험이 있는 만큼 보안 관리에 유의하며 사용해야 합니다.

복잡한 세션 관리 없이 독립적인 인증 환경을 구축하고 싶을 때 매우 유용한 기술입니다.

 

읽어주셔서 감사합니다!

 

 

 

참조

  • https://ivory-room.tistory.com/88
  • https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-JWTjson-web-token-%EB%9E%80-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC
  • https://www.ibm.com/kr-ko/think/topics/json-web-tokens
  • https://docs.tosspayments.com/resources/glossary/jwt
저작자표시 비영리 변경금지 (새창열림)

'Web' 카테고리의 다른 글

Nginx  (0) 2026.05.07
Proxy Server  (0) 2026.04.30
WAS(Web Application Server)  (0) 2026.04.29
'Web' 카테고리의 다른 글
  • Nginx
  • Proxy Server
  • WAS(Web Application Server)
으노로
으노로
  • 으노로
    study-library
    으노로
  • 전체
    오늘
    어제
    • 분류 전체보기 (42) N
      • Language (16)
        • JAVA (15)
        • JavaScript (1)
      • Framework (4) N
        • Spring (4) N
      • Web (4)
      • Infra (6)
      • Algorithm (10)
        • Programmers (10)
      • Database (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    트렌잭션
    비동기 통신 방식
    문자열 정렬하기
    inmemorydb
    programmers
    알고리즘
    스프링부트
    코딩테스트
    분수의덧셈
    eclipse
    spring
    @transactional
    spring boot
    OS
    문자열정렬하기(2)
    java
    transactional
    자바
    스프링
    프로그래머스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
으노로
JWT(JSON Web Token)
상단으로

티스토리툴바