๐ช Cookie
์ฟ ํค๋ ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ๋๋ ์์ ํฌ๊ธฐ์ ๋ฌธ์์ด๋ก, RFC 6265 ๋ช ์ธ์์ ์ ์ํ HTTP ํ๋กํ ์ฝ์ ์ผ๋ถ์ด๋ค.
ํน์ง์ ๋ค์๊ณผ ๊ฐ๋ค.
- ํค-๊ฐ์ ์ ์ฅ
- ํด๋ผ์ด์ธํธ ์๋ณ๊ณผ ๊ฐ์ ์ธ์ฆ์ ๋ง์ด ์ฐ์ธ๋ค.
- 4KB ์ฉ๋ ์ ํ์ ๊ฐ๋๋ค.
- ์น ์๋ฒ์ ์ํด ์์ฑ๋๋ฉฐ ์๋ฒ๊ฐ HTTP ์๋ต ํค๋์ Set-Cookie์ ๋ด์ฉ์ ๋ฃ์ด ์ ๋ฌํ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ์ด ๋ด์ฉ์ ์์ฒด์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ๋๋ค.
- ๋งค ์๋ฒ ์์ฒญ๋ง๋ค ์ฟ ํค๋ ํจ๊ป ์ ์ก๋๋ค. ๋ง์ฝ ์ฟ ํค ์ฌ์ด์ฆ๊ฐ ์ปค์ง๋ฉด HTTP ์์ฒญ ํฌ๊ธฐ๋ ์ปค์ง๋ค.
- ์ฟ ํค ์กฐ์ ๋ฐฉ์ง๋ฅผ ์ํด httpOnly๋ฅผ ์ค์ ํ๋ ๊ฒ์ด ์ข๋ค.
- ๋ณดํต ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ๋ ์๊ฐ ์์ด์ง๋ฉฐ ์ ํจ ๊ธฐ๊ฐ์ ์ค์ ํ ์๋ ์๋ค.
๐ค ์ ์๋ฒ์ ์ฟ ํค๊ฐ ๊ฐ์ด ์ ์ก๋ ๊น?
HTTP ์์ฒญ์ ์ํ๋ฅผ ๊ฐ์ง ์๋๋ค. ์ฆ, ์๋ฒ๋ ์์ฒญ์ด ๋๊ตฌ์๊ฒ ์ค๋์ง ์ ์ ์์ผ๋ฏ๋ก ์ฟ ํค์ ์์ฒญ์ ๋ณด๋ด๋ ์ฌ๋์ ์ ๋ณด๋ฅผ ๋ด์ ์๋ฒ๋ก ๋ณด๋ด๋ฉด ์๋ฒ๋ ๋ฐ์ ์ฟ ํค๋ฅผ ์ฝ์ด ๊ทธ ์ฌ๋์๊ฒ ์๋ต์ ๋ณด๋ผ ์ ์๋ค.
์ฟ ํค๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ์ง์์ ์ธ ๋ฐ์ดํฐ ๊ตํ์ ์ํด ๋ง๋ค์ด์ก๊ธฐ ๋๋ฌธ์ ์๋ฒ๋ก ๊ณ์ ์ ์ก๋๋ ๊ฒ์ด๋ค.
Cookie ์ฐ๊ธฐ
- key=value ์์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ ๊ฐ ์์ ';'๋ฌ ๊ตฌ๋ถํ๋ค.
- document.cookie์ ๊ฐ์ ํ ๋นํ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ์ด ๊ฐ์ ํด๋น ์ฟ ํค ๊ฐ๋ง ๊ฐฑ์ ํ๋ค.
document.cookie = 'key=value';
Cookie ์ฝ๊ธฐ
document.cookie;
Cookie ์ ํจ ๊ธฐ๊ฐ ์ค์
- Cookie๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ๋ ์๊ฐ ์์ด์ง๋ฏ๋ก ์ ํจ ๊ธฐ๊ฐ์ ์ ์ํด ํน์ ๊ธฐ๊ฐ๊น์ง ์ ํจํ๋๋ก ์ค์ ํ ์ ์๋ค.
- ์ ํจ ๊ธฐ๊ฐ์ GMT String๋ก ์์ฑํ๋ค.
- GMT String ๊ฐ์ toGMTString()์ผ๋ก ๊ตฌํ ์ ์๋ค.
- ์ ํจ ๊ธฐ๊ฐ์ ์ค์ ํด '์ผ์ฃผ์ผ ๊ฐ ํด๋น ํ์ ๋ณด์ง ์๊ธฐ' ๋ฑ์ ๊ตฌํํ ์ ์๋ค. ์ผ์ฃผ์ผ ๊ฐ ์ ์ํ ์ฟ ํค๋ฅผ ๋ธ๋ผ์ฐ์ ์ ์ ์ฅํด ํด๋น ์ฟ ํค๊ฐ ์กด์ฌํ๋ค๋ฉด ํ์ ์ ๋ณด์ด์ง ์๋๋ก ํ๋ ๊ฒ์ด๋ค.
document.cookie = 'user=tom; expires=Wed, 18 Aug 2021 02:13:37 GMT';
- max-age๋ฅผ ์ด์ฉํ๋ฉด ์์ฑ ์์ ์ ๊ธฐ์ค์ผ๋ก ์ ํจ ๊ธฐ๊ฐ์ ์ค์ ํ ์๋ ์๋ค.
document.cookie = 'user=tom; max-age=100';
๐พ Local Storage
- ์ฟ ํค์ ๋จ์ ์ ๋ณด์ํ๋ค.
- key, value ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
- ๋๋ฉ์ธ ๊ธฐ๋ฐ์ผ๋ก Storage๊ฐ ์์ฑ๋๋ค. ๋ง์ฝ ๋๋ฉ์ธ๋ง ๊ฐ๋ค๋ฉด ์ฌ๋ฌ ํญ ๋ด์์ ๊ฐ์ Storage๊ฐ ๊ณต์ ๋๋ค.
- ๋ฐ์ดํฐ์ ๋ง๋ฃ ์๊ฐ์ด ์๋ค.
localStorage ์ฐ๊ธฐ
localStorage.setItem('name', 'tom');
localStorage ์ฝ๊ธฐ
์ฝ๊ณ ์ถ์ ๋ฐ์ดํฐ์ ํค ๊ฐ์ ์์ฑํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
localStorage.getItem('name');
localStorage ์ญ์ ํ๊ธฐ
localStorage.removeItem('name'); // ํน์ ๋ฐ์ดํฐ๋ง ์ญ์ ํ ๋
localStorage.clear(); // ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ๋
๐พ Session Storage
- ์ ์ฒด์ ์ธ ํน์ง์ Local Storage์ ๋น์ทํ๋ค.
- ์ฟ ํค์ ๋จ์ ์ ๋ณด์ํ๋ค.
- key, value ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
- ํ์ด์ง๋ฅผ ์๋ก ๊ณ ์นจํด๋ ๋ฐ์ดํฐ๋ ๋จ์ ์์ง๋ง, Local Storage์ ๋ค๋ฅด๊ฒ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ์ผ๋ฉด ์ ์ฅ๋ ๋ด์ฉ์ด ์ญ์ ๋๋ค.
๐ช Local Storage vs. Session Storage
๋ชจ๋ HTML5์ ์ถ๊ฐ๋ ์ ์ฅ์(์น ์คํ ๋ฆฌ์ง)์ด๋ค.
๊ณตํต์
- ๋ชจ๋ key-value ํํ๋ก ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค.
- ๋ ์ ์ฅ์๋ ๋ชจ๋ window ๊ฐ์ฒด ์์ ์กด์ฌํ๋ค.
- ๋ ์ ์ฅ์ ๋ชจ๋ Storage ๊ฐ์ฒด๋ฅผ ์์๋ฐ์ ๋ฉ์๋๊ฐ ๊ณตํต์ ์ผ๋ก ์กด์ฌํ๋ค.
- ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ํด๋ผ์ด์ธํธ ์ธก์ ์ ์ฅ๋๋ฉฐ ์๋ฒ๋ก ์ ์ก์ด ์ด๋ฃจ์ด์ง์ง ์๋๋ค.
- ์ฟ ํค์ ๋จ์ ์ ๋ณด์ํ๋ค. ์๋ฒ์ ์ ์กํ์ง ์์๋ ๋๋ ๋ฐ์ดํฐ๋ ์ฟ ํค๊ฐ ์๋ Local Storage๋ Session Storage์ ์ ์ฅํ์ฌ ๋ฐ์ดํฐ์ ๋ญ๋น๋ฅผ ๋ง์ ์ ์๋ค.
- ์ฟ ํค์ ๋ค๋ฅด๊ฒ HTTP ํค๋๋ฅผ ํตํด ์น ์คํ ๋ฆฌ์ง ๊ฐ์ฒด๋ฅผ ์กฐ์ํ ์ ์๋ค.
์ฐจ์ด์
๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ๋ฐ์ดํฐ์ ์ง์์ฑ(์๊ตฌ์ฑ)์ด๋ค.
Local Storage๋ ์๊ตฌ ์ ์ฅ์๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ง์ฐ์ง ์๋ ํ ๊ณ์ ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ๋์ด ์๋ค. ํ์ง๋ง ์์ ์ ์ฅ์๋ผ ๋ถ๋ฅด๋ Session Storage์ ๋ฐ์ดํฐ๋ ์๋์ฐ๋ ๋ธ๋ผ์ฐ์ ํญ์ ๋ซ์ ๊ฒฝ์ฐ ์ญ์ ๋๋ค.
๐ช ์ฟ ํค๋ ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ์์ ์ญํ ์ ํ์ง๋ง Local Storage, Session Storage์ ๋ค๋ฅด๊ฒ ๋ง๋ฃ ๊ธฐํ์ด ์๋ key-value ์ ์ฅ์์ด๋ค.
๐ ์ด์ ๋ฆฌ
- Cookie : ํ์ ์ฐฝ(๊ด๊ณ ์ผ์ฃผ์ผ ๊ฐ ๋์ฐ์ง ์๊ธฐ)
- Local Storage : ์๋ ๋ก๊ทธ์ธ
- Session Storage : ์ ๋ ฅ ํผ ์ ๋ณด, ๋น๋ก๊ทธ์ธ ์ฅ๋ฐ๊ตฌ๋, ์ผํ์ฑ ๋ก๊ทธ์ธ ์ ๋ณด
์ฐธ๊ณ ์๋ฃ
https://ko.javascript.info/cookie
https://www.zerocho.com/category/HTML&DOM/post/5918515b1ed39f00182d3048