
IndexedDB API의 인터페이스
비동기 데이터베이스 작업(데이터 추가, 검색, 삭제)
= 모든 비동기 작업은 즉시, IDBRequest 인스턴스 반환
브라우저 내장된 데이터베이스
웹 스토리지 객체이다
데이터가 사라지지 않고 남아있게 해준다
브라우저 내에 key:value 쌍으로 저장할 수 있다
Map 과 비슷하다 but 인덱스를 사용해서 키에 접근할 수 있단 점에서 다르다
key(index)
localStorage : 페이지 새로고침 관련
오리진이 같은 탭, 창 전체에선 공유된다
= 도메인만 같으면 전역 공유 가능하다
브라우저를 끄고 다시 켜도 남아있다
sessionStorage : 현재 떠 있는 탭 내에서만 유지된다 = 같은 페이지라도 다른 탭에 있으면 다른 곳에 저장되기 때문이다 = 침범하지 못한다
페이지 새로고침 할 때 사라지지 않지만 종료하면 사라진다(데이터 유지 X)
<!doctype html>
<textarea style="width:200px; height: 60px;" id="area" placeholder="Write here"></textarea>
<br>
<button onclick="localStorage.removeItem('area');area.value=''">Clear</button>
<script>
area.value = localStorage.getItem('area');
area.oninput = () => {
localStorage.setItem('area', area.value)
};
</script>

브라우저에 저장되는 작은 크기 문자열
HTTP 프로토콜 일부
클라이언트 식별과 같은 인증에 가장 많이 쓰인다
❓쿠키가 있는데 왜 굳이 다른 객체를 사용해서 데이터 저장하나요?
1. 웹 스토리지 객체는 네트워크 요청 시 서버로 전송되지 않는다
→ 더 많은 자료 보관 가능(쿠키는 하나 사이트에 20개까지 저장가능)
2. 서버가 HTTP 헤더를 통해 스토리지 객체 조작할 수 없다
→ 자바스크립트 내에서 수행된다
3. 프로토콜, 서브 도메인이 다르면 데이터에 접근할 수 없다
4. 영구 데이터 저장이 가능하다
| 항목 | localStorage | sessionStorage | cookie |
|---|---|---|---|
| 데이터 유지 | 영구적 (삭제 전까지 유지) | 세션 종료 시 삭제 (탭/창 닫으면 사라짐) | 만료 기간 설정 가능 |
| 용량 제한 | 약 5MB | 약 5MB | 4KB + 도메인 1개당 20개까지 가능) |
| 서버 전송 여부 | 불가능 (서버로 자동 전송 X) | 불가능 (서버로 자동 전송 X) | 가능(요청마다 자동 전송) |
| 보안 | 비교적 안전 (XSS 주의) | 비교적 안전 (XSS 주의) | 상대적으로 취약 (CSRF, XSS 공격 위험) |
| 사용 목적 | 장기 데이터 저장 (토큰, 설정값) | 짧은 세션 데이터 저장 (임시 상태) | 인증, 트래킹, 세션 관리 |