반응형
1. JWT란?
JWT는 JSON Web Token의 약자로, 두 개체 사이에서 정보를 안전하게 전송하기 위한 컴팩트하고 독립적인 방법입니다. 이 방법은 디지털 서명을 통해 정보의 신뢰성을 검증할 수 있습니다.
JWT는 일반적으로 다음 세 부분으로 구성됩니다.
- Header: 토큰의 타입과 해싱 알고리즘 정보를 담고 있습니다. 일반적으로 타입은 "JWT"이며, 해싱 알고리즘은 "HS256" 또는 "RS256" 등이 될 수 있습니다.
- Payload: 실제 전달하려는 데이터를 담고 있습니다. 이 데이터는 'claims'라고 부르며, 일반적으로 이름, 이메일, 사용자 ID 등 사용자에게 특정한 정보를 포함할 수 있습니다.
- Signature: Header와 Payload를 합친 후, 비밀 키를 사용하여 암호화된 서명을 생성합니다. 이 서명으로 인해 데이터의 무결성을 확인하고, JWT가 변조되지 않았음을 보장합니다.
이 세 부분은 각각 Base64Url로 인코딩되어 '.'으로 연결되며, 최종적으로 생성되는 JWT는 'xxxxx.yyyyy.zzzzz' 형태를 가집니다.
JWT는 주로 웹 애플리케이션의 인증 및 권한 부여에서 활용되며, 서버와 클라이언트 사이에서 세션 정보를 안전하게 전달하는데 사용됩니다.
2. JWT 작동원리
JWT는 웹 애플리케이션에서 주로 인증 및 권한 부여를 위해 사용되는데, 그 작동 원리는 대략 다음과 같습니다.
- 사용자가 서버에 로그인 요청을 보냅니다. 이 요청에는 일반적으로 사용자의 아이디와 비밀번호가 포함됩니다.
- 서버는 요청을 받고 사용자의 아이디와 비밀번호를 확인합니다.
- 서버는 사용자 정보와 서버에서 정의한 규칙을 바탕으로 JWT를 생성합니다. 이 JWT에는 사용자를 식별하는 정보와 사용자의 권한 등을 포함할 수 있습니다.
- 서버는 생성한 JWT를 사용자에게 전송합니다.
- 사용자는 이후 서버에 요청을 보낼 때마다 이 JWT를 포함해 보냅니다.
- 서버는 요청을 받을 때마다 JWT를 확인하고, JWT에서 사용자 정보와 권한을 확인합니다.
이런 방식으로 JWT는 사용자 인증 정보를 안전하게 전송하고 유지할 수 있습니다.
3. JWT 어떤 상황에서 사용하는가?
JWT는 다음과 같은 상황에서 사용될 수 있습니다:
- 인증: 일단 사용자가 로그인하면, 그 후의 모든 요청에는 JWT가 포함됩니다. 이를 통해 서버는 해당 요청이 해당 사용자로부터 온 것임을 확인할 수 있습니다.
- 정보 교환: 두 개체가 안전하게 정보를 교환하려면 JWT를 사용할 수 있습니다. JWT는 정보가 변조되지 않았음을 보증하기 때문에 정보의 신뢰성을 보장할 수 있습니다.
- 세션 관리: 서버는 사용자 세션을 JWT로 관리할 수 있습니다. 이를 통해 서버는 세션 상태를 유지하지 않아도 되므로 서버 자원을 효율적으로 활용할 수 있습니다. 이런 특성 때문에 JWT는 주로 RESTful 서비스에서 선호됩니다.
- Microservice 아키텍처: 서로 다른 서비스가 사용자 인증 정보를 공유해야 하는 마이크로서비스 아키텍처에서도 JWT를 활용할 수 있습니다.
4. JWT를 사용하지 않고 세션을 이용하여 인증하는 것과 JWT를 사용하는 것의 차이점
세션 기반 인증과 JWT 기반 인증은 각각 장단점을 가지고 있습니다. 이 두 방식의 주요 차이점은 다음과 같습니다:
- 서버 저장소 사용: 세션 기반 인증은 사용자 인증 정보를 서버의 메모리나 데이터베이스에 저장합니다. 반면, JWT는 클라이언트 측에서 인증 정보를 저장하며, 서버는 상태를 유지하지 않아도 됩니다. 따라서 JWT는 서버 자원을 더 효율적으로 활용할 수 있습니다.
- 확장성: JWT는 상태를 유지하지 않는다는 특성 때문에 서버의 확장성을 향상시키는 데 유리합니다. 만약 서버가 여러 개 있고 로드 밸런싱이 필요한 경우, JWT는 세션 기반 인증보다 더 효율적입니다. 왜냐하면 각 요청이 어떤 서버로 가도 JWT는 유효하기 때문입니다.
- 크로스 도메인: 세션 쿠키는 동일 도메인에서만 유효하지만, JWT는 다른 도메인간에도 손쉽게 전달되어 사용될 수 있습니다.
- 보안: JWT는 자체적으로 정보를 암호화하지 않습니다. 따라서 민감한 정보는 JWT에 포함되지 않아야 합니다. 반면, 세션 기반 인증은 서버 측에서 사용자 정보를 안전하게 보관할 수 있으므로, 이 점에서는 세션 기반 인증이 더 안전할 수 있습니다.
- 유효기간 관리: 세션은 서버에서 만료 시간을 관리하고, JWT는 토큰 자체에 만료 시간이 포함되어 있습니다. 따라서 JWT의 경우, 서버가 아닌 토큰 자체에서 만료를 관리합니다.
두 방식 모두 적절히 사용하면 좋은 보안을 제공할 수 있지만, 각 애플리케이션의 요구사항에 따라 가장 적합한 방식을 선택해야 합니다.
5. JWT를 사용하는 대표적인 웹 애플리케이션
JWT는 다양한 웹 애플리케이션에서 사용됩니다. 그중 대표적인 예시는 다음과 같습니다.
- 소셜 미디어 플랫폼: Facebook, Twitter와 같은 소셜 미디어 플랫폼에서는 사용자가 로그인하면 JWT가 발급되어 사용자의 세션 정보를 안전하게 관리하고, 사용자의 요청을 인증합니다.
- 온라인 쇼핑몰: Amazon, eBay와 같은 온라인 쇼핑몰에서도 사용자의 로그인 정보와 사용자의 쇼핑 세션을 관리하기 위해 JWT를 사용합니다.
- 클라우드 서비스: Google Cloud, AWS와 같은 클라우드 서비스 플랫폼에서도 사용자 인증과 서비스 사용 권한 부여를 위해 JWT를 활용합니다.
- API 플랫폼: 다양한 API 서비스 제공 플랫폼에서는 API 요청을 인증하고, 사용자의 API 사용 권한을 관리하기 위해 JWT를 사용합니다.
이외에도 많은 웹 애플리챼이션에서 JWT가 사용되며, 각 애플리케이션의 요구 사항에 따라 JWT 사용 방식이 조금씩 달라질 수 있습니다.
반응형
'IT Tech & Terms' 카테고리의 다른 글
CORS(Cross-Origin Resource Sharing)란? (21) | 2024.02.16 |
---|---|
LMS(Learning Management System) (32) | 2024.02.13 |
Platform과 Framework (2) | 2024.02.03 |
팝업(Popup)과 모달(Modal) (4) | 2024.01.26 |
프레임워크 vs 라이브러리 (8) | 2024.01.22 |