쿠키 vs 세션 vs 토큰 vs 캐시

zoey·2022년 12월 31일
0

사이트를 방문하고 이용할 때 브라우저에 저장되는 내용들
브라우저는 사용자의 컴퓨터에 있는거니까 사용자가 가지고 있는 정보.

사용자가 사이트에 방문하면 데이터를 저장하는게
모든 데이터를 수정할 수 있는 권한이 사용자에게 주어짐
수정 불가능한 중요한 정보들을 쿠키에 저장하기에는 부적절하다

  • 사용자가 가지고 다님
  • 시설을 이용할 때마다 보여줌

단점?
사용자가 임의로 고치거나 지울 수 있고,
심지어 남이 훔쳐보거나 도둑질하기 쉽다
민감하거나 중요한 정보를 쿠키에 담기는 불안.

  • 쿠키는 클라이언트 측에 저장된 키와 함께 들어있는 작은 파일입니다.
  • 클라이언트의 상태정보를 로컬에 저장합니다.
  • 그래서, 장바구니 기능, '오늘 더이상 창을 보지않음 창 팝업' 등에 사용됩니다.
    1) 클라이언트가 페이지를 요청하면
    2) 서버에서 쿠키를 생성해, http 헤더에 쿠키를 포함시켜 응답합니다
    3) 클라이언트는 이 쿠키를 로컬 pc에서 갖고 있다가, 다시 서버에 요청할 때 HTTP 헤더에 이 쿠키를 함께 전송합니다.
    4) 서버에서는 이 쿠키를 읽어 이전 상태정보를 변경할 필요가 있으면 쿠키를 업데이트해 HTTP 헤더에 변경된 쿠키를 넣어 반환합니다.

🟡 세션 (Session)

중요한 정보는 세션에서 관리
세션은 로그랜드가 직접 관리하는 영역으로 사용자가 직접 데이터를 수정할 수 없다
로그랜드에서 사용자가 접근하면
세션ID라는 기간이 짧은 임시 키를 하나 발급해준다
사용자는 이 임시 키를 가지고 있다가 로그랜드로 요청할 일이 생기면
이 세션ID를 함께 보내준다
세션ID를 보고 로그랜드가 사용자를 식별할 수 있게 된다
만약 서버를 잘못 건드려서 세션 정보를 모두 날려버리게 된다면?

세션을 사용하는 사이트에 접속하면 서버에서는 사용자를 구분하기 위한 기한이 짧은 임시키를 브라우저에 보내서 쿠키로 저장한다
중요한 정보는 서버의 메모리나 데이터베이스에 저장된다
브라우저가 이 사이트의 페이지들에 접속할 때마다
http 요청에 이 키를 실어서 전송하고
서버는 그 키를 보고 사용자를 인식해서 사용자의 정보들을 가공해서 응답으로 보내주게 되는 것이다

  • 즉, 보안성이 좋아 로그인같은 보안중요작업에 사용됩니다.
  • 서버는 클라이언트 구분을 위해 세션 ID라는 것을 부여합니다. 웹 브라우저가 서버에 접속하고, 브라우저를 종료할 때 까지 인증상태를 유지합니다.
    1) 클라이언트가 페이지를 요청하면
    2) 서버는 접근한 클라이언트의 request-header필드의 쿠키를 확인해 클라이언트가 세션id를 보냈는지 확인합니다.
    3) 만약 세션id가 존재하지 않으면 서버는 세션id를 생성해 클라이언트에 함께 돌려줍니다.
    이 때, 서버측에서는 세션 저장소에 해당 id를 저장해, 차후 구분할 수 있도록 합니다.
    4) 클라이언트는 세션id를 받으면, 이걸 쿠키를 사용해 저장하고 가지고 있습니다.
    5) 클라이언트는 이제 같은 요청으로 서버에 접속할 때, HTTP요청에 이 세션ID를 같이 서버에 전달해 요청합니다.
    6) 서버는 세션 ID를 전달 받고, 세션저장소에서 해당 세션 ID값을 찾아 클라이언트 정보를 가져와서 클라이언트를 구분합니다. 그리고 요구에 맞는 서비스를 제공합니다.

쿠키와 세션

  • 데이터 저장위치는 쿠키는 브라우저, 세션은 서버입니다.
  • 보안성은 쿠키가 저장위치가 클라이언트라는 점에서 스니핑을 당할 우려가 있기 때문에 세션측이 좀 더 좋습니다.
  • LifeCycle은 쿠키는 브라우저가 종료되어도 쿠키에 저장된 만료일(저장기간) 값이 남아있으면 존재하고, 세션은 브라우저 종료 시, 만료기한에 상관없이 종료됩니다.
  • 속도측은 세션이 서버에 정보가 있기 때문에, 쿠키측이 더 빠릅니다. 하지만, 사용자가 많아질수록 서버 메모리를 많이 차지합니다.

🟡 토큰 (Token)

로그랜드에 입장하게 되면 모든 관람객들에게 토큰이라는 티켓은 준다
토큰은 그냥 영어 소문자, 대문자, 숫자 이런게 마구 섞여있어서
이 토큰이 어떤 데이터를 가지고 있는지 어떤 의미인지 알 수 없다

토큰을 어떻게 발급하고 어떤 식으로 사용하는지 과정을 살펴볼건데
로그랜드는 로그랜드만 알고있는 비밀 키(SecretKey)를 가지고 있다
사용자의 정보를 이 비밀 키를 통해서 아까 보았던 랜덤함 문자열 같은 토큰을 발급할 수 있게 된다 이 토큰을 가지고 있다가 (인증 요청의 응답 값으로 토큰을 받아서 보관한다) 로그랜드에게 전달하면 또다시 비밀키를 이용해서 토큰을 읽어들인다(로그랜드의 비밀키로 해독한다) 이 토큰이 유효한지, 또는 토큰에 있는 데이터를 판단해서 사용자를 식별할 수 있게 된다

🔸 토큰의 한계점

한 아이디로 여러 사용자가 접근한다고 가정했을 때, 이 토큰이 유효하기만 하다면 사용자가 같은 아이디로 들어오든 말든 로그랜드는 항상 입장을 허용해준다.
하지만 세션에서 관리한다면 이미 접속한 적이 있는 아이디로 다시 접속하는 경우 막는다던가 로그랜드가 컨트롤할 수 있게 된다.

🟡 캐시 (Cache)

캐시라는 선반에 가방을 담아둔다
(가져오는데 비용이 드는 데이터를 임시로 저장했다가 필요할 때 꺼내서 쓸 수 있게 해주는 것을 캐시라고 한다)
알바생은 나중에 손님이 오시면 불필요하게 창고를 왔다갔다 할 필요 없이 선반에서 바로 꺼내 드리면 됨.

  • 리소스 파일들의 임시저장소
  • 같은 웹페이지에 접속할 때, 이전에 사용되었던 데이터는 다시 사용될 가능성이 높다라는 생각을 기초로 해서 다시 사용될 확률이 있는 데이터들을 빠르게 접근 가능한 저장소에 저장하는 것이에요!

✅ 요약

쿠키

사용자에 의해 조작되어도 크게 문제되지 않을 정보를 브라우저에 저장

세션

인증에 대한 정보를 서버가 저장

토큰

인증에 대한 정보를 사용자가 저장

캐시

한번 전송받은 데이터를 저장해놓았다가 필요할 때 꺼내 쓰기 가능

0개의 댓글