웹 개발시 가장 비슷하면서 상이한 개념이 세션, 캐시, 쿠키, 토큰이다. 토큰은 저장소가 아니기 때문에 이글에 적기 뭐하긴 한데 그래도 간지나니 같이 쓰겠다. 사실 나도 명확하게 얘기하라고 하면 일부는 어버버될 것 같다. 이 글에서 정홝히 뿌서본다. 와다!
저장소별 차이를 보러 왔는데 웬 HTTP 특징을 떠드나 싶을 것이다. 해당 저장소를 사용하는 이유에 대해 이해하기 위해 필요로 하다. 가장 대표적인 특징인 무상태성과 비연결성 때문이다.
무상태성 (Stateless)
클라이언트와 데이터를 주고 받아도 다음 연결시 이전 데이터를 유지하지 않음
비연결성 (Connectionless)
요청에 대한 응답 이후 클라이언트와 연결을 끊는 방식을 사용
👽 다음의 특성 때문에 정보가 유지 되지 않는다. 로그인정보, 화면에서의 데이터를 유지해야할 필요가 있다. HTTP의 무상태성을 보완하기 위해 사용되는 저장소가 쿠키와 세션이다. 캐시의 경우 이 글에선 웹 캐시가 정확한 표현이며 이는 성능개선을 위한 플래시 메모리의 개념이다. 조금 다르달까...
쿠키는 사용자가 방문한 웹사이트에서 사용자의 브라우저에 전송하는 작은 텍스트 조각입니다. 쿠키가 있으면 웹사이트에서 사용자의 방문에 관한 정보를 기억하여 다음번에 사이트에 방문했을 때 번거로운 작업을 피하고 더 유용하게 사이트를 활용할 수 있습니다.
쿠키는 내 컴퓨터에 저장되는 작은 텍스트 파일이다. 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간을 지정할 수 있으며 쿠키는 클라이언트의 상태 정보를 로컬에 저장했다가 참조한다.
세션은 컴퓨터 과학에서, 특히 네트워크 분야에서 반영구적이고 상호작용적인 정보 교환을 전제하는 둘 이상의 통신 장치나 컴퓨터와 사용자 간의 대화나 송수신 연결상태를 의미하는 보안적인 다이얼로그 및 시간대를 가리킨다.
세션은 서버에 저장되는 데이터 저장소로 쉽게 생각하자면 브라우저가 종료되기 전까지 클라이언트의 정보가 저장되는 공간 정도로 이해하면 될 것 같다. 되도록 폐쇄된 정보가 저장되지만 어차피 하이재킹해서 뜯어면 다 보임
캐시는 컴퓨터 과학에서 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다. 캐시는 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용한다.
캐시는 자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소이다. 자주사용되는 만큼 빠른 접근을 위해 메모리상에 저장하여 사용한다. 보통은 변화가 없는 static 파일, 이미지 또는 사진 파일(jpg, png 등등), CSS, JS 등 정적이고, 용량이 큰 파일들이다. 용량이 큰 파일인 만큼 다시 사용할때 재 다운로드받지 않고 저장소(캐시)에 저장하고 다시 재사용한다. 이로써, 페이지 로딩 속도가 빨라진다. 한마디로 동적 데이터를 저장하는 공간이라기 보단 앱 성능 개선을 위한 플래시 메모리라고 생각하면 쉽다.
세션 계층에서는 두 응용 프로그램의 대화를 관리하려고 토큰(token)이라는 특수 메시지를 사용한다. 토큰이란 일련의 문자열을 구분할 수 있는 단위 또는 시스템에서 보안 객체의 접근 관리에 사용되는 객체 또는 장치를 말한다. 토큰의 보유는 해당 토큰에 부여된 특정 권리를 배타적으로 소유한다는 의미를 갖는다.
쉽게말해 난수 형태의 문자열이다. 일종의 클럽 입장권 같은 느낌으로 서버에서 난수를 발생시켜 클라이언트에게 전송한다. 클라이언트는 서버 접속시 해당 토큰을 제시하며 인가된 유저임을 인증하는 프로세스다. 얘는 저장공간이라고 볼 수 없고 인증매체정도로 이해하면 된다.
접근 토큰(access token)이 가장 많이 사용되는 토큰 형식으로 시스템이나 소프트웨어에서 어떤 특정한 기능이나 데이터에 접근하는 대상에게 권한을 부여하는 데 사용된다. 통상 난수 형태의 문자열로 구성된다. 예를 들어, 웹 서비스 제공자는 사용자의 아이디, 패스워드 또는 신용카드 등의 정보를 사용해 만든 접근 허가 토큰을 사용자에게 발행하고 접속 시 사용하게 하여 개인정보 누출을 방지하고 안전한 서비스를 제공할 수 있다.
보안 토큰(security token)은 하드웨어 저장 장치로 특정 전자기기의 제한된 자원(리소스)의 사용 권한을 제어한다.
세션 토큰(session token)은 통신망에서 서버와 클라이언트 간 세션(논리적 연결) 후 사용된다. 인터넷 서버가 HTTP 통해 클라이언트와 연결된 후 상호간 데이터 교환을 위해 클라이언트에 부여하는 객체이다. SID로 표현하기도 한다. 그리고 링 또는 버스 형태의 네트워크에서 장비 간 전송되는 신호의 순서이다.
저장위치
가장 큰 차이는 저장소의 위치다. 쿠키는 클라이언트 브라우저에 저장되는 반면 세션은 웹 서버 내부 컨테이너에 저장된다.
속도
쿠키는 파일을 읽는 구조기 때문에 세션보다 상대적으로 빠르다.
보안
클라이언트 브라우저에 저장되는 쿠키와 다르게 세션은 내부 컨테이너 객체기 때문에 보안적으로 더 안전하다. 어차피 SID만 탈취하면 꺼내서 볼 수 있음;
생명주기
쿠키는 유효기간에 따라 브라우저가 종료되도 파일로 남지만 세션의 경우 브라우저 종료시 삭제된다.
어차피 쿠키 내부에 SID가 포함되어 있기 때문에 세션도 결국 쿠키를 사용한다.
세션과 쿠키의 경우 데이터를 저장하는 공간이고 캐시의 경우 정적인 웹 리소스를 저장하는 플래시 메모리다. 사용하는 이유 자체가 다른 녀석이라 비교대상이 아니라는 얘기다. 토큰은 말할것도 없고
오늘은 쿠키, 세션, 캐시, 토큰 각 개념과 차이를 알아봤다. 모두다 뭔가를 저장하고 있는 저장매체로 사용하는 만큼 개념에서 헷갈릴수 있다. 다른 블로그들을 참고하면서 느낀건데 나도 잘못알고 있던 내용도 있었다 ㅎㅎ 어쩌라고;
한마디로 정리하자면 쿠키, 세션, 캐시, 토큰 모두 정보의 재활용에 목적을 둔다.
쿠키는 클라이언트 브라우저 저장 파일,
세션은 웹 서버에 저장되는 고유 저장소,
캐시는 웹 앱 성능 개선을 위한 플래시 메모리,
토큰은 인가된 정보에 대한 사인정보다.
오늘 저녁은 삼각김밥이다. 🥕
참고 : https://kihyeoksong.tistory.com/99
https://penguingoon.tistory.com/118
https://devbirdfeet.tistory.com/203
https://walkingplow.tistory.com/79
https://chrisjune-13837.medium.com/web-%EC%BF%A0%ED%82%A4-%EC%84%B8%EC%85%98%EC%9D%B4%EB%9E%80-aa6bcb327582