[CS지식] cookie, session, cache, token 차이

Sungho Kim·2022년 11월 5일
0

시작에 앞서,

웹사이트를 제작하다 보면 쿠키, 세션, 토큰, 캐시 등의 용어를 마주치게 되는데, 누군가 쿠키가 뭐임? 혹은 세션이 뭐임? 이렇게 물어봤을때 명확하게 대답할 자신이 없어서 이참에 정리를 하고 넘어가야겠다는 생각이 들어서 글로 남기게 되었다.

그렇다면,

각각의 정의는 뭘까?

  1. 쿠키 : HTTP 쿠키는 웹 쿠키, 브라우저 쿠키로도 불리는데 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각을 의미한다.
  2. 세션 : 세션이란 통신을 하기 위해 서로 연결된 순간부터 통신을 마칠 때 까지의 기간을 의미한다.
  3. 캐시 : 웹 캐시, HTTP 와 HTTPS Cache는 속도가 빠른 곳에 임시로 데이터를 저장하여 속도를 높이는 것을 뜻한다.
  4. 토큰 : 토큰링 네트워크를 따라 돌아다니는 일련의 특별한 비트열이다. 서버가, 각각의 클라이언트를 누군지 정확히 구별하도록 유니크한 정보를 담는 암호화 데이터이기도 하다

쿠키 특징

  • 쿠키는 한개에 4KB까지 저장 가능하며, 최대 300개 까지 저장할 수 있는 텍스트 파일이다.
  • 쿠키는 클라이언트에 저장된다.
  • 쿠키에는 이름, 값, 만료날짜, 경로 정보가 들어있다.
  • 기본적으로 쿠키는 웹 브라우저가 종료되면 삭제된다. (만료날짜를 지정해주면 만료일이 되야 삭제된다.)
  • 웹 브라우저에 해당 서버의 쿠키 정보가 있으면 HTTP 요청(HTTP헤더의 Cookie)에 무조건 담아서 보낸다

가장 큰 특징은 사용자의 클라이언트에 저장되어 있기 때문에 사용자가 직접 조작할 수 있다는 점이다. 따라서 사용자가 직접 조작하면 안되는 정보 예를들면 결제정보나 권한정보는 쿠키에서 보관하면 보안에 이슈가 생길 수 있다.

세션 특징

  • 따로 용량 제한이 없다.
  • 서버에 세션 객체를 생성하며 각 클라이언트마다 고유한 세션 ID값을 부여한다.
  • 쿠키를 사용하여 세션ID값을 클라이언트에 보낸다.
  • 웹브라우저가 종료되면 세션 쿠키는 삭제된다.

세션의 가장 큰 특징은 서버에서부터 ID가 생성되어 클라이언트에게 쿠키에 세션ID를 담아서 전달한다는 점이다. 여기서 중요한 점은 쿠키에 세션ID를 담아서 전달한다는 점인데, 흔히들 쿠키는 클라이언트(웹브라우저)에 정보를 저장하는 것이고, 세션은 서버에 저장하는 것이다 라고 비교한다. 하지만 세션도 쿠키를 이용해서 세션 ID를 담아 보내는 방식, 즉 쿠키의 이용방법에 차이일 뿐이지 다른개념은 아니다.

캐시 특징

  • 캐시 가능 시간동안 네티워크를 사용하지 않아도 된다.
  • 비싼 네트워크 사용량을 줄일 수 있다.
  • 브라우저 로딩 속도가 매우 빠르다.
  • 사용자가 캐싱된 데이터를 이용하여 보다 빠른 경험을 할 수 있다.

요약하자면 캐시는 클라이언트가 다시 사용할법한 데이터를 미리 준비해놓고 클라이언트가 재방문, 혹은 특정 컴포넌트를 재 사용했을때, 빠르게 UI를 구현해줄 수 있게 도와주는 장치라고 생각하면 된다.

토큰 특징

  • 토큰기반 인증 시스템을 사용하면 방문자가 자격 증명을 한 번만 확인
  • 자격 증명이 확인되면 토큰이 할당되어 정해진 시간동안 엑세스가 가능
  • 4가지 단계의 간단한 토큰 인증절차
    • 요청: 사용자가 서버 또는 보호되는 리소스에 대한 엑세스를 요청한다. 이때 비밀번호를 이용한 로그인이나 그 밖에 지정된 프로세스가 개입될 수 있다
    • 확인: 서버가 해당 사용자의 엑세스 여부를 확인합니다. 이때는 사용자 이름에 대한 비밀번호 확인 또는 그 밖에 지정된 프로세스가 개입된다.
    • 토큰: 서버가 링, 키, 휴대전화등의 인증 디바이스와 통신한다. 확인을 마치면 서버가 토큰을 발금하여 사용자에게 전달한다.
    • 저장: 작업이 지속되는 동안 토큰이 사용자의 브라우저에 저장된다.

시나리오를 통해 쉽게 알아보는 차이점

보통 놀이공원에 비유를 많이 하는데, 놀이동산에 최초 입장을 할때 쿠키북이라는 쿠키를 들고 입장을 한다. 쿠키를 들고 다니는 동안 유저는 스스로 어떤 정보를 기입할 수도 있고, 놀이동산에 있는 어떤 놀이기구를 이용하거나 밥을 먹을떄 이용할 수도 있다.

다만, 쿠키북은 스스로 기입하거나 삭제를 할 수 있는 만큼, 중요한 결제정보나 관계자 외에 출입금지 구역을 갈 수 있는 티켓 같은것은 쿠키북에 포함시키지 않는것이 놀이공원을 운영하는 쪽에선 좋을것이다.

그렇다면, 그런 중요한 정보는 어디다가 놓는것이 좋을까에 대한 대안으로 비유되는게 세션이다. 세션은 자유이용권과 같은 팔찌라고 생각하면 좋을꺼 같은데, 최초 유저가 놀이공원에 들어갈때 자유이용권을 끊는 대신 놀이공원 측에선 유저 1에 대한 자유이용권의 복사본을 놀이동산에도 갖고 있는다. 그럼 각 놀이 기구에 가서 자유이용권을 보여주면 이 자유이용권이 최초 발급된 바코드와 맞는지 조회하고 유저를 해당 놀이기구를 허락해 준다.

다만, 세션은 자유이용권에 대해 주최측에서도 복사본을 갖고, 그걸 기반으로 조회를 하기 때문에, 유저가 많아진다면 수많은 자유이용권중 대조가 이루어질 것이고, 사람들의 웨이팅 타임을 늘릴것이다.

대안으로 나온게 토큰이라고 보면 되는데, 토큰은 놀이공원에서 티켓을 카카오 기프트콘 같은걸로 판다고 보면 될거같다. 카카오 기프트콘으로 구매한 고객은 놀이기구를 탈때마다 바코드를 보여주고, 놀이공원 측에선 해당 바코드가 유효한지만 조회해서, 해당 바코드가 유효하면 입장, 아닐경우 위조로 판단하고 돌려보내는 식이다.

캐시는 놀이공원 기념품 샵에 비유를 많이 하는데, 샵에 놀러가서 유저가 머리띠를 맘에 들어서 재고가 있는지 점원에게 물어보고, 머리띠를 계산대에 올려놨는데 유저가 다시 와서 사겠다고 하고 나간 경우, 머리띠를 다시 창고에 가져다 놓느게 아니라 특정 매대에 오려놓고 유저가 다시 돌아올 경우 바로 다시 꺼내줄수 있게 준비하는 작업을 말한다. 창고까지 다시 가서 가져올 필요가 없기 때문에 빠르게 고객에게 물건을 전달할 수 있다는 점이 특징이다.

profile
공유하고 나누는걸 좋아하는 개발자

0개의 댓글