[WEB] ์น ๋ธ๋ผ์ฐ์ ์ ์บ์(์ฟ ํค, ๋ก์ปฌ ์คํ ๋ฆฌ์ง, ์ธ์ ์คํ ๋ฆฌ์ง)
์ฟ ํค, ๋ก์ปฌ ์คํ ๋ฆฌ์ง, ์ธ์ ์คํ ๋ฆฌ์ง๋ ์น ๋ธ๋ผ์ฐ์ ์ ์์ ์ ์ฅ์ ์ญํ ์ ํ๋ค.
์ด๋ฌํ ๊ฒ๋ค์ ํตํด ๋ณดํต ์ฌ์ฉ์์ ์ปค์คํ ํ ์ ๋ณด๋ ์ธ์ฆ ๋ชจ๋ ๊ด๋ จ ์ฌํญ๋ค์ ์น ๋ธ๋ผ์ฐ์ ์ ์ ์ฅํด์ ์ถํ ์๋ฒ์ ์์ฒญํ ๋ ์์ ์ ๋ํ๋ด๋ ์์ด๋ดํฐํฐ๋ ์ค๋ณต ์์ฒญ ๋ฐฉ์ง๋ฅผ ์ํด ์ฐ์ธ๋ค.
์ฟ ํค
์ฟ ํค๋ ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ์๋จ ์ค ํ๋์ด๋ฉฐ, ๋ง๋ฃ๊ธฐํ์ด ์๋ ํค-๊ฐ ์ ์ฅ์์ด๋ค.
๋ธ๋ผ์ฐ์ ์์ ์๋ฒ๋ก ์์ฒญ์ ์ ์กํ ๋, ๊ทธ ์์ฒญ์ ๋ํ ์๋ต์ Set-Cookie ํค๋๊ฐ ํฌํจ๋์ด ์๋ ๊ฒฝ์ฐ, ๋ธ๋ผ์ฐ์ ๋ Set-Cookie์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ด ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ "์ฟ ํค"๋ผ ํ๋ค.
Set-Cookie : normal=yes
์์ฒ๋ผ ์๋ฒ์ ์๋ต์ Set-Cookie ํค๋๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ, normal์ด๋ผ๋ ์ด๋ฆ์ yes๊ฐ ์ ์ฅ๋๋ค.
์ด๋ ๊ฒ ์ ์ฅ๋ ์ฟ ํค๋ ๋ค์ ๊ทธ ๋ธ๋ผ์ฐ์ ์์ ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ผ ๋, Cookie๋ผ๋ ํค๋์ ๊ฐ์ด ์ ์ก๋๋ค.
์๋ฒ์์๋ ์ด ํค๋๋ฅผ ์ฝ์ด์ ์ ์ ๋ฅผ ์๋ณํ๋ ๋ฑ์ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค.
Cookie : normal=yes
์ฟ ํค๋ ์ด๋ ๊ฒ ๋์ํ๊ธฐ ๋๋ฌธ์ ์ฃผ๋ก ์๋ฒ์์ ์ฌ์ฉ์๋ฅผ ์๋ณํ๊ธฐ ์ํ ์๋จ์ผ๋ก ์ฌ์ฉ๋์ด ์๋ค.
์๋ฅผ ๋ค์ด, Set-Cookie ํค๋๋ก ์ธ์ ID๋ฅผ ๋ฃ์ด๋ ๋ค์, ์ด ํ ์์ฒญ๋ถํฐ ์ ์ก๋ Cookie ํค๋์ ์ธ์ ID๋ฅผ ์ฝ์ด ์ด๋ค ์ฌ์ฉ์๊ฐ ๋ณด๋ธ ์์ฒญ์ธ์ง ํ๋จํ๋ ์์ผ๋ก ๋์ํ๋ค.
์ ๋ง์ ์น ์ฌ์ดํธ์ ๋ก๊ทธ์ธ ๊ตฌํ์ด ๋๋ถ๋ถ ์ด์ ๊ฐ์ด ๊ตฌ์ฑ๋์ด ์๋ค.
์ฟ ํค๋ 4KB๊น์ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๊ณ ๋ง๋ฃ๊ธฐํ์ ์ ํ ์ ์๋ค. ํด๋ผ์ด์ธํธ ๋๋ ์๋ฒ์์ ๋ง๋ฃ๊ธฐํ ๋ฑ์ ์ ํ ์ ์๋๋ฐ ๋ณดํต ์๋ฒ์์ ๋ง๋ฃ๊ธฐํ์ ์ ํ๋ค.
์ถ๊ฐ๋ก, document.cookie๋ฅผ ์ด์ฉํด์ ํ์ฌ ์ฟ ํค ์ ๋ณด๋ฅผ ํ์ธ์ด ๋ณผ ์ ์๋๋ก httponly ์ต์ ์ ๊ฑธ์ด์ค์ผ ํ๋ค.
๋ก์ปฌ ์คํ ๋ฆฌ์ง
๋ง๋ฃ ๊ธฐํ์ด ์๋ ํค-๊ฐ ์ ์ฅ์์ด๋ค. ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ์๋ ์ ์ง๋๊ณ , ๋๋ฉ์ธ ๋จ์๋ก ์ ์ฅ, ์์ฑ๋๋ค.
๊ทธ๋์, ์ง์์ ์ผ๋ก ํ์ํ ๋ฐ์ดํฐ(์๋ ๋ก๊ทธ์ธ ๋ฑ)๋ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ ์ฅํ๋ค.
๋ก์ปฌ ์คํ ๋ฆฌ์ง๋ window.localStorage์ ์์นํ๋ค.
localStorage.setItem('name', 'zerocho');
localStorage.setItem('birth', 1994);
localStorage.getItem('name'); // zerocho
localStorage.getItem('birth'); // 1994 (๋ฌธ์์ด)
localStorage.removeItem('birth');
localStorage.getItem('birth'); // null (์ญ์ ๋จ)
localStorage.clear(); // ์ ์ฒด ์ญ์
๋ฉ์๋๋ฅผ ๊ฐ๋จํ ์ค๋ช ํ์๋ฉด, localStorage.setItem(ํค, ๊ฐ)์ผ๋ก ๋ก์ปฌ์คํ ๋ฆฌ์ง์ ์ ์ฅํ ํ, localStorage.getItem(ํค)๋ก ์กฐํํ๋ฉด ๋๋ค. localStorage.removeItem(ํค)ํ๋ฉด ํด๋น ํค๊ฐ ์ง์์ง๊ณ , localStorage.clear()ํ๋ฉด ์คํ ๋ฆฌ์ง ์ ์ฒด๊ฐ ๋น์์ง๋ค.
์ต๋ 10MB๊น์ง ์ ์ฅํ ์ ์์ผ๋ฉฐ HTML5๋ถํฐ ์๋ก ์๊ธด ์ ์ฅ์์ด๊ธฐ ๋๋ฌธ์, HTML5๋ฅผ ์ง์ํ์ง ์๋ ์น ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉํ ์ ์๊ณ , ํด๋ผ์ด์ธํธ๋จ์์๋ง ์์ ์ด ๊ฐ๋ฅํ๋ค.
์ธ์ ์คํ ๋ฆฌ์ง
๋ง๋ฃ๊ธฐํ์ด ์๋ ํค-๊ฐ ์ ์ฅ์์ด๋ค. ํญ ๋จ์๋ก ์ธ์ ์คํ ๋ฆฌ์ง๋ฅผ ์์ฑํ๋ฉฐ, ํญ์ ๋ซ์ผ๋ฉด ํด๋น ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๋ค.
๊ทธ๋์, ์ ๊น ๋์ ํ์ํ ์ ๋ณด(์ผํ์ฑ ๋ก๊ทธ์ธ ์ ๋ณด ๋ฑ)๋ ์ธ์ ์คํ ๋ฆฌ์ง์ ์ ์ฅํ๋ค.
์ธ์ ์คํ ๋ฆฌ์ง๋ window.sessionStorage์ ์์นํ๋ค.
์ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์์ ์ฌ์ฉํ๋ ๋ชจ๋ ๋ฉ์๋๊ฐ ๋์ผํ๊ฒ ์ ์ฉ๋์ง๋ง, ๋ฐ์ดํฐ๊ฐ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ๋์ง ์๋๋ค.
์ต๋ 5MB๊น์ง ์ ์ฅํ ์ ์์ผ๋ฉฐ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ๊ฐ์ด HTML5๋ถํฐ ์๋ก ์๊ธด ์ ์ฅ์์ด๊ธฐ ๋๋ฌธ์, HTML5๋ฅผ ์ง์ํ๋ ์น ๋ธ๋ผ์ฐ์ ์์๋ง ์ฌ์ฉํ ์ ์๋ค. ๋, ํด๋ผ์ด์ธํธ์์๋ง ์์ ์ด ๊ฐ๋ฅํ๋ค.
์ฐธ๊ณ ) ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์บ์ฑ ๊ณ์ธต
์ฐธ๊ณ ๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ๊ตฌ์ถํ ๋๋ ๋ฉ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ redis ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ณ์ธต์ '์บ์ฑ ๊ณ์ธต'์ผ๋ก ๋๊ณ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ๋ ํ๋ค.
์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์บ์ ํํธ๊ฐ ๋ฐ์ํ๋ฉด ์บ์ ์ญํ ์ ํ๋ redis ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ , ์บ์ ๋ฏธ์ค๊ฐ ๋ฐ์ํ๋ฉด ๋ฉ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ ํ์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ redis ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ค.