쿠키 | 세션

🍪 쿠키

서버가 사용자의 브라우저에 데이터를 저장하기 위해 사용하는 key-value 형태의 문자열입니다.

특징

  • 서버가 유효기간을 설정할 수 있습니다.
  • 브라우저 종료 후에도 데이터가 유지됩니다.
  • 요청 시 자동으로 브라우저가 쿠키를 서버에 전송합니다.
  • 해당 도메인에서만 사용 가능합니다.
  • 인증 외에도 다양한 데이터(예: 언어 설정)를 저장할 수 있습니다.
  • 저장할 수 있는 데이터 크기에 제한이 있습니다.

동작 방식

  1. 사용자가 웹페이지를 요청합니다.
  2. 서버는 쿠키를 생성하여 응답에 포함시킵니다.
  3. 브라우저는 쿠키를 저장합니다.
  4. 이후 서버로 요청이 있을 때마다 브라우저는 저장된 쿠키를 자동으로 서버에 전송합니다.

 


 

📄 세션

서버에서 사용자 정보를 관리하는 방법으로, 사용자별로 고유한 ID(세션 ID)를 부여하여 관리합니다.

특징

  • 사용자가 많을 경우 서버의 부하가 증가합니다.
  • 보안성이 높지만, 서버 자원을 많이 사용합니다.
  • 브라우저 종료 시 인증 상태가 소멸합니다.
  • 사용자는 세션 ID만을 가지고 있으며, 서버에서 사용자 정보를 관리합니다.
  • 서버에서 사용자의 로그인 상태 등을 직접 관리할 수 있습니다.

동작 방식

  1. 사용자가 서버에 접속하면 서버는 세션 ID를 생성하고, 이를 쿠키를 통해 사용자에게 전달합니다.
  2. 사용자가 다른 페이지에 접속할 때, 브라우저는 세션 ID가 담긴 쿠키를 서버에 전송합니다.
  3. 서버는 세션 ID를 통해 사용자를 식별하고 인증합니다.

 


 

토큰(JWT)

JSON Web Token의 약자로, 서버와 클라이언트 간에 정보를 안전하게 전송하기 위해 사용되는 토큰입니다.

특징

  • 설정된 유효기간 동안 사용 가능합니다.
  • HTTP 통신의 헤더에 담겨 전송됩니다.
  • 사용자 인증에 필요한 정보가 토큰에 포함됩니다.
  • header | payload | signature로 구성됩니다.
  • 공간 제약이 없습니다.
  • 사용자 정보의 변경 관리가 어렵습니다.
  • 암호화된 것이 아니므로, 중요한 개인 정보를 포함시키지 않는 것이 바람직합니다.

JWT의 정의는 정의서명 알고리즘을 이용해 암호화된 토큰입니다.

 

근데 왜 암호화된것이 아닐까요?

 

우선 첫번째 JWT는 누구나 볼 수 있다는 점

따라서 암호화가 되었더라도 유저의 정보가 노출될 가능성 자체가 존재하게 됩니다.

 

두번째 알고리즘의 레인보우 테이블이 공개되어있다.

벡엔드에서 유저 정보를 받아 JWT를 만드는 과정에서 몇번의 암호화, 어떤 암호화 방식 등 사용할 수 있는 라이브러리를 사용합니다.

이것은 공격을 마음을 먹은 해커에게 장벽이 되지 않습니다. 레인보우 테이블이 존재하는 이상 언제든지 암호화를 풀어버릴 수 있습니다.

따라서 JWT에는 유저의 개인정보, 비밀번호 등의 중요한 정보를 넣지 않는 것이 바람직합니다.

동작 방식

  1. 사용자가 로그인 정보를 서버에 전송합니다.
  2. 서버는 사인 알고리즘을 사용하여 토큰을 생성하고, 이를 사용자에게 전송합니다.
  3. 이후 사용자는 서버에 요청을 보낼 때 마다 이 토큰을 함께 전송합니다.
  4. 서버는 토큰의 유효성을 검증하고, 유효하면 요청을 처리합니다.

'네트워크' 카테고리의 다른 글

프록시 서버  (0) 2024.04.12
CDN 작동 방식  (0) 2024.04.12
DNS 작동방식  (0) 2024.04.12
REST API  (0) 2024.04.12