쿠키, 세션, 토큰의 차이

Ouroboros·2023년 8월 21일
1

네트워크

목록 보기
3/20
post-thumbnail

0. HTTP

HTTP는 "양식"이라고 볼 수 있다.
HTTP라는 양식으로 요청 받은 정보를 받고 요청한 자료를 얹어서 돌려준다.
하지만 HTTP는 상태를 저장하지 않는다라는 특징을 가지고 있다.
따라서 요청받은 서버는 요청한 클라이언트의 정보를 저장하지 않고 각각을 독립적으로 보고 있으므로, 1분전에 요청한 내용과 지금 요청한 내용은 서로 관계가 없다.
그러나 정보를 유지해야하는 경우가 많다.
예를 들어, 화면을 이동하더라도 로그인이 계속 유지되어야 한다든지, 장바구니에 넣은 상품이 구매 페이지에도 존재해야한다든지 하는 경우들이 있다.
따라서 정보를 유지해야 하므로 그 때 사용하는 것이 🍪쿠키🍪와 🎸세션🎸과 🪙토큰🪙이다.

1. 🍪쿠키란?🍪

  • 웹사이트에 접속할 때 접속자의 개인장치에 다운로드 되고 브라우저에 저장되는 작은 텍스트 파일이다.
  • 웹 사이트는 쿠키를 통해서 접속자의 장치를 알아내고, 접속자의 설정과 과거 이용내역에 관하여 일부 데이터를 저장한다.
  • 파기 시점에 따라 브라우저를 닫는 순간 삭제되는 세션쿠키와 브라우저를 닫고 컴퓨터를 재시작하여도 쿠키가 남아있는 지속적 쿠키가 있다.
  • 쿠키는 유저들의 효율적이고 안전한 웹 사용을 위해 사용되고 있다.

1) 사용 예

오늘 이창 다시 보지 않기 설정
쇼핑 장바구니
재방문시 아이디/비번 자동입력 등등

2. 🎸세션이란?🎸

  • 웹서버에 접속한 시점으로부터 웹 브라우저를 종료하여 연결을 끝내는 시점을 세션이라고 부른다.
  • 같은 사용자로부터 오는 일련의 요청을 하나의 상태로 보고,
    그 상태를 일정하게 유지하는 기술이다.
  • 쿠키는 클라이언트(브라우저)에 정보를 저장하지만,
    세션은 서버에 방문자의 정보를 저장한다.

1) 사용 예

로그인한 상태가 풀리지 않고 로그아웃전까지 유지되는 것
세션을 체크하여 관리자/사용자 여부 판단 등등

3. 쿠키와 세션

1) 쿠키와 세션의 관계 (세션쿠키)

세션정보를 가지고 있는 세션은 어떤 클라이언트인지 구분하기 위해 클라이언트 ID를 발급한다.
그 서버가 클라이언트로 해당 클라이언트 ID를 내려주면 그 정보를 쿠키에 저장한다.
따라서 추후에 요청이 있을 때마다 쿠키의 클라이언트 ID를 서버로 보내서 어떤 클라이언트인지 파악할 수 있다.
클라이언트에 클라이언트 ID가 저장되어 있는 쿠키를 세션 쿠키라고 한다.
즉 세션도 쿠키를 사용한다.

2) 쿠키와 세션의 차이

쿠키세션
저장위치클라이언트서버
지속 기간브라우저가 종료되더라도
만료시점이 지나지않으면
자동삭제되지 않음
-세션쿠키 : 브라우저 닫는 순간 삭제
-지속적 쿠키 : 컴퓨터를 재시작하여도
만료전까지 남아있음
메시지 인증 코드(MAC)를 사용
보안비교적 취약
로컬에 저장되어 탈취, 변조 위험 존재
서버에 저장되므로 비교적 안전
속도빠름비교적 느림
제공받은 세션아이디를 이용해서
서버에 다시 데이터를 참조하는 과정 존재

3) 쿠키를 사용하는 이유

비교적 안전한 세션 대신에 쿠키를 사용하는 이유는
세션은 서버에 정보를 저장하여 서버자원을 사용하기 때문에,
사용자가 많을 경우 소모되는 서버자원이 크다.
그 결과 서버에 부하가 생기고 화면이 움직이지 않거나 메모리가 꺼져버린다면 휘발성이기에 다 날아가는 문제가 발생한다.
따라서 쿠키도 병행하여 사용함으로서 효율적으로 자원을 배분할 수 있다.

4. 🪙토큰이란?🪙

1) 토큰의 장점

세션 방식은 메모리를 많이 차지하기 때문에, 사용자에게 세션아이디를 주는 대신에 사용자에게 토큰을 부여한다.
토큰을 받아간 사용자가 이를 쿠키로 저장해 두고 필요할 때마다 제시하고 서버는 유효성 검사를 하여 사용자가 인증되었는지 파악한다.
이 과정을 거치면서 서버는 과부하를 줄일 수 있다.

2) 토큰의 단점

로그인되어 있는 사용자를 서버가 강제로 로그아웃을 시킬 수 있어야 하는 때가 있을 때, 토큰 방식에서는 강제로 로그아웃 시키는 것이 불가능하다.
왜냐하면 한 번 발행한 토큰은 유효기간이 끝나기 전까지 따로 통제할 수 없기 때문이다.
예를 들어, 세션은 한 기기만 로그인하게끔 만들 수 있다. 핸드폰 기기에 로그인한 상태여도, 컴퓨터로 로그인을 한다면 핸드폰 기기의 로그인 상태를 로그아웃 되도록 기존 세션을 종료한다.
토큰방식은 이처럼 강제로 로그아웃할 수 없기에 세션에 비해 토큰 방식은 토큰 정보를 탈취 당할 가능성이 높다.
이것을 보안하기 위해 쿠키처럼 만료 기간을 설정할 수 있는 토큰은 만료 시간을 짧게 지정해 피해를 줄일 수 있다.


참고자료
쿠키 그림 : https://creamilk88.tistory.com/101
쿠키와 세션 : https://cheershennah.tistory.com/135
https://thecodinglog.github.io/web/2020/08/11/what-is-session.html
쿠키와 세션 그림 : https://velopert.com/2350

0개의 댓글