Cookie, Session, JWT

Hwani·2024년 8월 5일

쿠키(Cookie), 세션(Session), JWT(JSON Web Token)의 차이점

웹 애플리케이션에서 인증과 상태 관리를 위한 방법에는 쿠키, 세션, 그리고 JWT가 있고, 보통 많이 사용되는데 정확히 구분하고자 정리 해보자!

쿠키(Cookie)

정의

쿠키는 사용자의 웹 브라우저에 저장되는 작은 데이터 조각.
서버가 클라이언트에게 전송하며, 클라이언트는 이 데이터를 저장하고 이후 요청에 포함시켜 서버로 보낸다.

특징

  • 클라이언트 측 저장: 데이터는 클라이언트의 브라우저에 저장된다.
  • 만료 기간: 쿠키는 만료 날짜를 설정할 수 있다.
  • 보안: 민감한 정보는 저장하지 않는 것이 좋습니다. HttpOnlySecure 플래그를 사용해 보안을 강화할 수 있습니다.

사용 예시

  • 로그인 상태 유지: 사용자가 웹사이트에 로그인한 상태를 유지하는 데 사용
  • 사용자 선호도: 테마나 언어 설정과 같은 사용자 선호도를 저장

장단점

  • 장점: 쉽게 구현 가능하며, 서버에 부하를 주지 않는다.
  • 단점: 보안 취약점이 있을 수 있으며, 데이터 저장 용량이 제한적이다.

세션(Session)

정의

세션은 서버 측에서 관리되는 사용자 상태 정보.
각 사용자는 고유한 세션 ID를 할당받으며, 이 ID를 통해 상태 정보를 식별한다.

특징

  • 서버 측 저장: 클라이언트는 세션 ID만을 보유하고, 실제 데이터는 서버에 저장한다.
  • 보안: 데이터가 서버에 저장되므로 보안이 상대적으로 더 높다.

사용 예시

  • 사용자 인증: 사용자가 로그인한 상태를 서버 측에서 관리.
  • 쇼핑 카트: 전자 상거래 사이트에서 사용자의 쇼핑 카트 상태를 유지한다.

장단점

  • 장점: 보안성이 높고, 데이터 저장 용량이 크다.
  • 단점: 서버 리소스를 소비하며, 확장성이 제한적일 수 있다.

JWT (JSON Web Token)

정의

JWT는 JSON 객체를 사용하여 양쪽 간에 정보를 안전하게 전송하기 위한 개방형 표준 방식이다.
자체적으로 정보를 포함하고 있어 상태 비저장(stateless) 방식으로 작동한다.

특징

  • 자체 포함 토큰: 필요한 모든 정보를 포함하고 있어 서버에서 별도의 상태 저장이 필요 없다.
  • 서명과 암호화: JWT는 서명되어 있어 무결성을 검증할 수 있으며, 필요에 따라 암호화할 수 있다.

사용 예시

  • OAuth2 인증: API 인증 및 권한 부여에 사용.
  • 정보 교환: 두 시스템 간의 안전한 정보 교환에 사용.

장단점

  • 장점: 확장성이 높고, 클라이언트 간에 쉽게 전달 가능하다.
  • 단점: 클라이언트에 노출되므로, 민감한 정보를 포함해서는 안된다.

Header: JWT의 헤더는 알고리즘과 토큰의 타입을 지정합니다.
이 예에서는 'HS256' 알고리즘과 'JWT' 타입이 사용되었습니다.

Payload: 페이로드는 토큰에 담길 클레임(claim) 정보를 포함합니다.
여기에는 주제('sub')로 '1234567890', 사용자 이름('name')으로 'John Doe',
그리고 토큰이 발급된 시간('iat')으로 1516239022가 포함되어 있습니다.

Verify Signature: 서명 부분은 토큰의 보안을 담당한다.
헤더와 페이로드를 합친 후 비밀키를 이용하여 HMAC SHA256 알고리즘으로 서명이 생성됩니다.
이 서명을 통해 토큰이 변조되지 않았는지 검증할 수 있습니다.

profile
개발자될거야

0개의 댓글