티스토리 뷰

TIL/일기, 공부 내용 정리

JWT란 무엇인가?

Jin_frontend 2025. 2. 14. 16:43

JWT란 무엇인가?

 

  • JWT는 RFC 7519 표준을 따르는 오픈 표준이다.
  • JSON 형태로 데이터를 주고받으며, 보안성이 높은 방식으로 정보를 교환할 수 있다.
  • Compact(짧고 간결)하고, Self-contained(자체적으로 정보 포함)하는 특징이 있다.

> 즉, JWT는 서버와 클라이언트가 인증 정보를 주고받을 때 사용하는 디지털 신분증같은 역할을 한다.

JWT의 구조

JWT는 3가지 주요 요소로 구성된다.

  1. Header (헤더)
    • 어떤 알고리즘을 사용했는지 나타낸다.
    • 일반적으로 HMAC SHA256 또는 RSA 알고리즘을 사용한다.
    • 예시: 
    •  
{
  "alg": "HS256",
  "typ": "JWT"
}

 

 

 2. Payload (페이로드, 내용)

  • JWT가 포함하는 실제 데이터 (예: 유저 정보, 권한 등)
  • 예시:
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

 

  • sub: 사용자 ID
  • name: 사용자 이름
  • iat: 토큰이 발급된 시간(issued at)

 

3. Signature (서명)

  • Header와 Payload를 **비밀 키(secret key)**로 서명하여 변조를 방지한다.
  • 예시 (HMAC SHA256 사용 시):
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret
)

 

- JWT 구조 예시

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

이렇게 .(점) 으로 구분된 세 부분이 Header, Payload, Signature다.

 > 서명이 포함되어 있기 때문에, 토큰이 변조되었는지 검증할 수 있다.
 > 하지만 JWT 자체는 암호화되지 않기 때문에, 보안이 중요한 정보(비밀번호 등)는 포함하면 안 된다.

 

3. JWT의 활용 사례

JWT는 주로 인증(Authentication) 및 정보 교환(Information Exchange)에 사용된다.

1. 인증(Authentication)

  • 사용자가 로그인하면 서버는 JWT를 생성하여 클라이언트에게 전달한다.
  • 이후 클라이언트는 API 요청마다 JWT를 포함하여 인증을 수행한다.
  • 서버는 JWT를 검증하여 사용자의 신원을 확인한다.

 예제

  1. 사용자가 ID/PW로 로그인 요청
  2. 서버에서 사용자를 인증 후 JWT를 발급하여 클라이언트에게 전달
  3. 클라이언트는 JWT를 저장(localStorage, memory, cookie 등)
  4. 이후 요청할 때마다 JWT를 포함하여 API 호출
  5. 서버는 JWT의 유효성을 검증하고 요청을 처리한다.

> 즉, JWT는 세션을 유지할 필요 없이 Stateless(상태 없음)한 인증 방식이다.
> 서버가 사용자의 로그인 상태를 유지할 필요가 없기 때문에 확장성이 뛰어나다.

 

2. 정보 교환(Information Exchange)

  • JWT는 서버와 클라이언트가 데이터를 교환하는 방식으로도 사용될 수 있다.
  • 예를 들어, 서버에서 JWT에 유저 역할(role: "admin") 정보를 포함하여 클라이언트에 전달한다.
  • 클라이언트는 이 JWT를 이용해 서버에 추가 정보를 요청할 필요 없이 필요한 정보를 자체적으로 관리할 수 있다.
  • 예제
{
  "sub": "123456",
  "role": "admin"
}

위처럼 Payload에 role이 포함되면, 클라이언트는 추가적인 API 요청 없이 이 사용자가 관리자라는 것을 알 수 있다.

> JWT는 서버와 클라이언트 간의 불필요한 요청을 줄일 수 있다.
> 하지만 중요한 정보(예: 비밀번호)는 절대 포함하면 안 된다.

4. JWT의 장점

Compact(간결함) JWT는 JSON 기반으로 크기가 작고, HTTP 헤더에 쉽게 포함할 수 있다.
Secure(보안성) 서명을 포함하여 변조 방지가 가능하다.
Self-contained(자체 포함) 인증 정보가 JWT 내부에 포함되어 추가 DB 조회 없이 사용 가능하다.

> JWT를 사용하면 클라이언트가 인증 상태를 유지하기 위해 서버에 매번 요청할 필요가 없다.
> 서버 부담을 줄일 수 있어 확장성이 뛰어난 인증 방식이다.

5. JWT 사용 시 주의할 점

  • JWT는 기본적으로 Base64 인코딩되어 있을 뿐, 암호화되지 않는다.
  • 클라이언트 측에서 쉽게 디코딩할 수 있으므로, 비밀번호 같은 민감한 정보를 포함하면 안 된다.
  • 중요한 정보는 Payload에 저장하지 말고, 서버 측에서 별도로 관리해야 한다.

> 비밀번호, 카드 정보, 개인 정보 등은 절대 JWT에 포함하지 말아야 한다.
> JWT를 안전하게 사용하려면, Refresh Token을 httpOnly Secure Cookie로 저장하는 것이 좋다.

'TIL > 일기, 공부 내용 정리' 카테고리의 다른 글

이벤트 루프와 비동기 통신  (1) 2025.01.22
클래스, 클로저  (0) 2025.01.21
자바스크립트의 동등 비교, 함수  (1) 2025.01.03
클래스  (0) 2024.12.27
프로토타입  (0) 2024.12.26
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함