JWT는 JSON 객체를 사용하여 정보를 안전하게 전송하기 위한 토큰 기반의 인증 방식입니다. JWT는 헤더, 페이로드, 시그니처의 세 부분으로 구성됩니다.
헤더 (Header): 토큰의 유형과 해싱 알고리즘 정보를 담고 있습니다.
페이로드 (Payload): 실제 전달할 데이터를 담고 있습니다. 이 부분은 Base64로 인코딩됩니다.
시그니처 (Signature): 헤더와 페이로드를 해싱 알고리즘과 비밀 키를 사용하여 생성합니다. 이 시그니처를 통해 토큰의 무결성을 검증할 수 있습니다.
쿠키 (Cookie)
쿠키는 클라이언트 측에서 사용되는 작은 데이터 조각입니다. 주로 세션 관리, 사용자 추적 등에 사용됩니다. 쿠키는 HTTP 헤더를 통해 서버와 클라이언트 간에 주고받습니다.
세션 (Session)
세션은 서버 측에서 사용자 정보를 저장하는 방식입니다. 쿠키와 달리 세션 데이터는 서버에 저장되며, 클라이언트는 세션 ID만을 가지고 있습니다.
캐시 (Cache)
캐시는 자주 사용되는 데이터나 계산 결과를 미리 저장해 두는 임시 저장소입니다. 캐시의 목적은 데이터 접근 시간을 줄이기 위함입니다.
차이점
저장 위치
JWT: 클라이언트
쿠키: 클라이언트
세션: 서버
캐시: 클라이언트 또는 서버
데이터 무결성
JWT: 시그니처를 통한 검증
쿠키: 무결성 검증 없음
세션: 서버 측에서 관리
캐시: 무결성 검증 없음
용도
JWT: 인증 및 정보 전송
쿠키: 세션 관리, 사용자 추적
세션: 사용자 상태 관리
캐시: 데이터 접근 속도 향상
보안
JWT: 비밀 키를 통한 시그니처 검증
쿠키: 보안 옵션에 따라 다름 (HttpOnly, Secure 등)
세션: 서버 측에서 관리되므로 상대적으로 안전
캐시: 일반적으로 보안 메커니즘 없음
상태 유지
JWT: 상태를 유지하지 않음 (Stateless)
쿠키: 상태를 유지할 수 있음 (Stateful)
세션: 상태를 유지함 (Stateful)
캐시: 상태를 유지하지 않음 (Stateless)