쿠키, 세션, 캐시, 토큰, CDN

ejoo·2024년 4월 27일

쿠키, 세션, 캐시, 토큰, CDN

HTTP 통신의 특징

1. Connectionless, 연결을 유지하지 않음
사용자가 서버에 데이터를 요청하면, 서버는 요청에 맞는 응답을 보내준 다음, 바로 연결을 끊어버린다.

2. Stateless, 상태를 저장하지 않음
서버는 사용자의 정보를 저장하지 않기 때문에, 내가 어제 사이트에 접속하고 오늘 또 접속했다고 하더라도, 서버는 나와 어제 통신한 데이터를 전혀 기억하지 못한다.

이러한 HTTP 통신의 특징 때문에, 클라이언트의 정보를 연속적으로 유지시켜줄 무언가가 필요하다.

쿠키(Cookie)

브라우저에 저장되는 정보
어떤 웹 사이트를 방문했을 때 나의 PC 브라우저에 저장되는 조그만 정보 파일 조각
사용자의 PC에 저장되기 때문에 접근 속도가 빠르고, 서버의 자원을 낭비하지 않아 효율적이다.
하지만 해킹의 위험이 있고, 브라우저가 종료되어도 자동으로 삭제되지 않기 때문에 위험이 없지 않다.
그러므로 보통 민감하지 않은 정보들을 쿠키에 저장해 웹 사이트를 편리하게 이용할 수 있다.

세션(Session)

서버가 나를 알아보는 방법
일정 기간 사용자의 상태를 일정하게 유지시키는 상태
서버는 로그인에 성공한 사용자에 대해 세션 아이디라는 사본 데이터를 만들어 보관한다.
서버에 저장된 세션 아이디 사본데이터는 쿠키로 저장되어, 사용자가 행하는 이후 요청에 함께 전달된다.

  1. 사용자가 서버에 웹페이지를 요청할 때, 쿠키 정보를 함께 보낸다.
  2. 서버는 사용자가 전달한 쿠키에 세션ID가 있는 지 확인한다.
  3. 세션ID가 존재하면 로그인 상태를 유지해주고, 존재하지 않는다면 ID를 새로 생성해서 DB에 저장한다.
  4. 이후, 쿠키에 방금 생성한 세션ID 정보를 함께 넣어서 사용자에게 웹페이지를 돌려준다.
  5. 이 쿠키는 요청을 보낸 사용자의 PC에 저장된다.
  6. 이후 사용자는 세션ID가 포함된 쿠키를 동봉하여 다른 요청을 보내게 되며, 서버는 세션ID로 사용자를 식별하여 사용자의 상태에 알맞게 데이터를 제공한다.

토큰(Token)

서버는 수많은 사용자의 세션을 저장하고 각각의 사용장게 요청이 들어올 때마다 세션 ID 확인작업을 한다. 하지만 세션ID 저장소 공간은 한정되어 있어 이용량이 많으면 속도가 느려진다.
이런 서버의 부담을 덜기 위해 토큰 방식이 등장했다. 토큰은 사용자의 인증 정보를 암호화시킨 것이다.
특정 서버만이 만들 수 있는 출입증을 발급함으로써 서버에 세션 ID를 저장하지 않고도 클라이언트에서 사용자의 로그인 여부를 파악할 수 있다.
서버는 암호화된 토큰을 봉인해제하여 검증할 뿐 유저 정보는 저장하지 않으므로 메모리 부담이 적다.

  1. 로그인 시 서버는 세션 ID 대신 토큰을 발급한다.
  2. 사용자는 발급된 토큰을 사용자의 PC에 저장한다.
  3. 사용자가 토큰과 함께 다른 요청을 보내면, 서버는 사용자의 토큰 정보를 검증한 뒤, 사용자의 권한을 확인하고 요청을 처리한다.

토큰은 타인에게 탈취를 당할 수 있는 위험이 있다. 이를 해결하기 위해 2가지의 토큰을 사용자에게 발급한다.
짧은 유효기간을 가진 출입증 역할의 Access Token과 인증 상태를 연장할 용도의 긴 유효기간을 가진 Refresh Token이 있다. Access Token의 유효기간이 만료되면 Refresh Token을 서버에 보내 새로운 Access Token을 발급한다.

캐시 (Cache)

한 번 전송받은 데이터를 저장해두었다가 다시 사용해야 한다면 반복적으로 데이터를 요청하는 대신 캐시를 사용한다.
캐시를 사용하여 사용자는 같은 사이트를 다시 방문하거나, 시청하던 동영상을 멈추고 다시 시청할 때, 로딩 없이 컨텐츠를 이용할 수 있다.
캐시는 데이터 전송량을 줄이고 속도를 높이는 것이 목표다.

CDN(Content Delivery Network)

여러 개의 서버를 이용해 웹 콘텐츠를 사용자와 가까운 서버에 전송함으로써 전송 속도를 높인다.
서버가 전 세계 각지에 세워진 CDN 컴퓨터에 데이터를 전달하여 사용자는 나와 가까운 캐시 서버에서 데이터를 받아온다.
일정 규모 이상의 사용자를 가진 대량의 데이터를 전송하는 서비스들은 CDN을 사용하여 사용자의 요청을 가까운 서버에서 분산 처리한다. 예시로 유튜브, 넷플릭스 등이 있다.

참고
[ 쿠키, 세션, 캐시, 토큰 ]
[데이터를 저장하는 방법] 쿠키/세션/토큰/캐시/CDN
완벽 정리! 쿠키, 세션, 토큰, 캐시 그리고 CDN

profile
안녕하세요

0개의 댓글