Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 파이썬 반복문
- 자바스크립트
- tanstack query
- 파이썬 replace
- 타입스크립트 리액트
- 타입스크립트
- React Hooks
- useState
- JavaScript
- 리액트
- 내일배움캠프 최종 프로젝트
- 프로그래머스
- 리액트 공식문서
- 내일배움캠프
- 파이썬 for
- 파이썬 slice
- Next 팀 프로젝트
- 내일배움캠프 프로젝트
- 코딩테스트
- 리액트 훅
- 리액트 프로젝트
- 파이썬 enumerate
- 타입스크립트 props
- typeScript
- 파이썬 for in
- useEffect
- REACT
- 파이썬 딕셔너리
- 한글 공부 사이트
- 내배캠 프로젝트
Archives
- Today
- Total
sohyeon kim
[SW] 쿠키 & 웹 스토리지, 로컬 스토리지, 세션 스토리지 본문
728x90
💡 쿠키와 웹 스토리지의 차이점
🍪 쿠키 : 브라우저의 작은 저장소
웹사이트 접속 ➡️ 서버가 브라우저로 쿠키 보냄 ➡️ 브라우저는 컴퓨터에 쿠키 저장
➡️ 다시 웹사이트에 접속하거나 리퀘스트를 보내면 쿠키를 서버로 자동으로 전송
- 이름과 값으로 관리하는 문자열 데이터
- 브라우저가 서버로 리퀘스트를 보낼 때 자동으로 보내짐
- 쿠키 하나당 용량은 최대 4KB, 브라우저에 따라 다르지만 사이트 하나당 약 20개 정도의 쿠키 허용
(자동으로 서버에 보내지다보니 네트워크에 부담을 주지 않으려고(리퀘스트 헤더의 크기가 커지므로) 용량에 제한이 있음) - 누군가 중간에 쿠키를 탈취할 수도 있어, 민감한 개인 정보나 보안 관련 내용은 저장하지 않도록 주의
- 쿠키 하나당 용량은 최대 4KB, 브라우저에 따라 다르지만 사이트 하나당 약 20개 정도의 쿠키 허용
- 사이트마다 따로 쿠키를 관리, 네이버에선 구글의 쿠키에 접근할 수 없음 (구글, 구글 메일, 구글 캘린더는 공유 가능)
- 브라우저에 임시적 혹은 지속적으로 데이터 저장 가능, 그러나 만료 일자가 넘으면 삭제됨
세션 쿠키 Session Cookie : 브라우저가 닫히면 사라지는 쿠키(기본)
영구(지속적) 쿠키 Persistent Cookie : 브라우저가 닫혀도 유지되는 쿠키, expires 나 max-age 옵션으로 기한 설정
Expires 옵션 : 설정한 날짜까지 쿠키 유지
user=choco; Expires=Fri, 05 Apr 2024 07:50:46 GMT
let date = new Date(2025, 3, 12);
date = date.toUTCString(); // 문자열로 변환
const cookie = "user=sohyeon; Expires=" + date;
Max-Age 옵션 : 현재로부터 설정된 시간을 더한 시점까지 쿠키 유지, 값 1 = 1초
user=choco; Max-Age=3600; # 한 시간 후로 설정
❗️ 만약 Expires 와 Max-Age 옵션이 둘 다 설정되어 있다면 Max-Age 가 우선 순위를 가진다!
💡 쿠키 설정 방법
- 서버에서 Set-Cookie 라는 헤더를 리스폰스로 보내주면, 브라우저가 쿠키를 저장
- 자바스크립트의 document.cookie 를 다루는 함수 이용
- js-cookie 와 같은 라이브러리 이용
📁 웹 스토리지 : 쿠키의 단점(크기, 서버 전송 등)을 보완한 저장소, 로컬과 세션 스토리지가 있다.
- 임시적(세션) 혹은 영구적으로 데이터 저장이 가능
(영구 저장 시 쿠키와 달리 '기한' 을 설정할 수 없어, 명시적으로 데이터를 삭제하기 전까진 계속 저장소에 남아 있음) - 데이터가 서버에 자동으로 전송되지 않음, 따라서 원할 때만 데이터 전송 가능
- 최대 5MB 까지 저장 가능
(매번 데이터가 전송되지 않으므로 쿠키에 비해 용량이 크다) - 자바스크립트로만 설정 가능, 쿠키와 달리 서버에서 데이터 추가/수정/삭제 불가능
🚨 웹 스토리지에 저장된 정보들은 js 코드를 통해 탈취 및 조작이 가능하므로 민감한 정보들은 저장하면 안된다.
보안과 관련된 데이터들은 서버 쪽에 저장하고 관리
로컬 스토리지
- 오리진(즉, 사이트 주소 - 프로토콜 http/https, 도메인 url, 포트 번호) 별로 생성
(http://naver.com 와 https://naver.com 은 서로 다른 스토리지를 가짐,
반면에 오리진이 같다면 여러 탭들 사이에서도 데이터가 공유됨) - 페이지를 새로고침하거나 창을 닫았다 열어도 유지, 명시적으로 삭제하지 않는 한 데이터가 만료되지 않음
(메신저 창에 메세지를 쓰다 사이트를 닫아도, 다시 열면 작성 중이던 메세지가 저장되어 있는 경우) - 데이터 삭제 시 자바스크립트나 브라우저 설정에서 직접 삭제
세션 스토리지
- 브라우저 탭별로 각각 생성되며, 탭을 닫는 순간 만료됨
- 새로고침해도 유지
💡 웹 스토리지 다루기
// 데이터 저장 및 가져오기
localStorage.setItem('language', 'korean');
localStorage.getItem('language'); // 'korean'
// 숫자나 불리언 타입 저장 시 주의사항
localStorage.setItem('size', 100);
localStorage.getItem('size'); // '100'
localStorage.setItem('darkmode', true);
localStorage.getItem('darkmode'); // 'true'
// 자동으로 문자열로 저장되니, 값을 가져올 때 형변환 필요
Number(localStorage.getItem('size')); // 100
Boolean(localStorage.getItem('darkmode')); // true
// 객체나 배열 저장 시 주의사항
localStorage.setItem('preference', { language: 'korean', size: 100, darkmode: true });
localStorage.getItem('preference'); // '[object object]'
// '[object object]'라는 문자열로 저장되니, JSON.stringify() 를 이용해 문자열로 바꿔서 저장
const preference = { language: 'korean', size: 100, darkmode: true };
localStorage.setItem('preference', JSON.stringify(preference));
// 문자열 값을 다시 객체로 바꾸려면 JSON.parse() 이용
JSON.parse(localStorage.getItem('preference')); // { language: 'korean', size: 100, darkmode: true }
// 데이터 삭제
localStorage.removeItem('language');
// 데이터 모두 삭제
localStorage.clear();
👀 언제, 어떤 걸 사용하면 좋을까
유저를 식별하는 문자열 같이 서버에 매번 전송해야 하는 데이터
'하루동안 다시 보지 않기' 같은 특정 기한이 있어햐 하는 데이터
➡️ 쿠키 사용
서버에 매번 전송하지 않아도 되고, 좀 더 용량이 크고 복잡한 데이터
➡️ 웹 스토리지 사용
메신저나 댓글 창에서 아직 전송되지 않은 메세지
사용자 설정이나 테마
자동 로그인 기능
오프라인일 경우, 유저에게 보여줄 데이터를 저장할 때
➡️ 로컬 스토리지 사용
여러 단계로 된 입력 폼의 정보 유지 시
일회성 로그인
잠깐 저장하는 장바구니
➡️ 세션 스토리지
728x90
반응형
'Software' 카테고리의 다른 글
[SW] 세션 기반 인증 & 토큰 기반 인증 (5) | 2024.10.06 |
---|---|
[SW] 웹 최적화, 프론트 성능 개선에 대해 (6) | 2024.09.06 |
[SW]REST API : URI & HTTP 요청 메서드 GET, POST.. (0) | 2024.02.19 |
[SW] HTTP 상태 코드 정리 (0) | 2024.02.16 |
[SW] Library & Framework 라이브러리와 프레임워크 (0) | 2024.01.02 |