ํด๋ผ์ด์ธํธ ์คํ ๋ฆฌ์ง
๐พ 20์ฅ ํด๋ผ์ด์ธํธ ์คํ ๋ฆฌ์ง
- ๐ ์๋ฐ ์คํฌ๋ฆฝํธ ์๋ฒฝ ๊ฐ์ด๋
๐ ์๋ฐ ์คํฌ๋ฆฝํธ ์๋ฒฝ ๊ฐ์ด๋
๐พ 20์ฅ ํด๋ผ์ด์ธํธ ์คํ ๋ฆฌ์ง
๐ ์น ์คํ ๋ฆฌ์ง
๋ฌธ์์ด ํค์ ๊ฐ์ ๋์์ํจ ์ฐ๊ด ๋ฐฐ์ด์ธ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ธ์ ์คํ ๋ฆฌ์ง ๊ฐ์ฒด๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ์ฌ์ฉํ๊ธฐ ์ฝ๊ณ ๋๋ฌด ํฌ์ง์์ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ์ ์ ํฉํ๋ค.
๐ช ์ฟ ํค
์๋ฒ์ธก์์ ์คํฌ๋ฆฝํ ๊ฐ๋ฅํ๋๋ก ์ค๊ณ๋ ์ค๋๋ ํด๋ผ์ด์ธํธ ์คํ ๋ฆฌ์ง ๋ฉ์ปค๋์ฆ์ด๋ค. ์ ์์์ ํ ์คํธ ๋ฐ์ดํฐ๋ฅด ์ ์ฅํ ๊ฒฝ์ฐ์๋ง ์ ์ ํ๋ค. ์ฟ ํค๋ ํด๋ผ์ด์ธํธ์์ ์ฌ์ฉํ๋๋ผ๋ HTTP ์์ฒญ ์ ํญ์ ์๋ฒ๋ก ์ ์ก๋๋ค.
###๐ IE User Data
IE 5 ์ดํ ๋ฒ์ ๋ถํฐ ๊ตฌํ๋ ์ ์ฉ ํด๋ผ์ด์ธํธ ์คํ ๋ฆฌ์ง ๋ฉ์ปค๋์ฆ
###๐ด ์คํ๋ผ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์
HTML5์์ ํด๋น ํ์ด์ง์ ๋ฆฌ์์ค๋ฅผ ์บ์ํ ์ ์๊ฒ ํด์ฃผ๋๊ฒ ์คํธ๋ก์ง์ ๊ฐ๋ ๋ณด๋ค๋ ๋ฐ์ดํฐ ๊ทธ ์์ฒด๋ฅผ ์๋ฏธํ๋ค.
๐ป ์น ๋ฐ์ดํฐ๋ฒ ์ด์ค
์ฌํ๋ฆฌ, ํฌ๋กฌ, ์คํ๋ผ์์ SQL๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ์ํ ํด๋ผ๋ฆฌ์ธํธ API (ํ์คํ๋ ์คํจํ๋ค.)
๐ ํ์ผ์์คํ API
XMLHttpRequest๋ฅผ ํตํด ์ ํํ ํ์ผ์ ์ ๋ก๋ ํ ์ ์๊ฒ ํด์ฃผ๋ File๊ฐ์ฒด๋ฅผ ์ง์ํ๊ฒ๋์ด ๋ง๋ ๊ฒ.
๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ธ์ ์คํ ๋ฆฌ์ง
๋ ๊ฐ์ฒด ๋ชจ๋ Window๊ฐ์ฒด์ ํ๋กํผํฐ๊ฐ ์ ์๋์ด์๋ค. ๋ ๊ฐ์ฒด๋ ๋ฐ์ดํฐ๋ฅผ ์ผ๋ง๋ ์ค๋ ๋ณด๊ดํ ์ง ๊ฒฐ์ ํ๋ ์๋ช ์ฃผ๊ธฐ์ ์ ๊ทผ ๊ฐ๋ฅ ๋์์ ์ง์ ํ๋ ๋ฒ์์์ ์ฐจ์ด๊ฐ ์๋ค.
localStorage.x = 10;
var x = parseInt(localStorage.x); // ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ๋๋ ํ๋ณํํ ํด์ํด์ผํ๋ค.
localStorage.lastRead = (new Date()).toUTCString();
localStorage.data = JSON.stringify(data); //์ธ์ฝ๋ฉํ์ฌ ์ ์ฅํ
var data = JSON.parse(localStorage.data); //๋์ฝ๋ฉํด์ ๊ฐ์ ธ์จ๋ค.
์คํ ๋ฆฌ์ง ์๋ช ์ฃผ๊ธฐ์ ๋ฒ์
๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ๋ฐ์ดํฐ๋ ๋ง๋ฃ ๊ธฐํ์ด ์๊ณ ๋ฒ์๋ ๋ฌธ์์ ์ถ์ฒ(URL)์ ํ์ ๋๋ค. ์ธ์ ์คํ ๋ฆฌ์ง์ ๋ฐ์ดํฐ๋ ์ต์์ ์ฐฝ์ด๋ ํด๋น ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ๋ธ๋ผ์ฐ์ ์ ํญ๊ณผ ์๋ช ์ฃผ๊ธฐ๊ฐ ๊ฐ๋ค. ์ธ์ ์คํ ๋ฆฌ์ง์ ๋ฒ์๋ ๊ฐ๋ณ ์ฐฝ์ ๊ธฐ๋ฐ์ ๋ ๋ฒ์๋ฅผ ๊ฐ๋๋ค.
์คํ ๋ฆฌ์ง API
method | description |
---|---|
getItem() | ๊ฐ ์ ์ฅ |
setItem() | ๊ฐ ๊ฐ์ ธ์ค๊ธฐ |
removeItem() | ๊ฐ ์ญ์ |
clear() | ์ ์ฅ๋ ๋ชจ๋ ๊ฐ ์ ๊ฑฐ |
โ๏ธ length๋ ํ๋กํผํฐ๋ก ์กด์ฌํ๋ค.
โก ์คํ ๋ฆฌ์ง ์ด๋ฒคํธ
์คํ ๋ฆฌ์ง์ ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค, ๋ธ๋ผ์ฐ์ ๋ ์ด ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๋ค๋ฅธ Window๊ฐ์ฒด์ ์คํ ๋ฆฌ์ง ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํจ๋ค.
- key : ์ค์ ๋๊ฑฐ๋ ์ญ์ ๋ ๋ฐ์ดํฐ์ ์ด๋ฆ ๋๋ ํค์ด๋ค.
- newValue : ํน์ ์คํ ๋ฆฌ์ง ๋ฐ์ดํฐ์ ์๋ก์ด ๊ฐ ๋๋ remoteIte()์ด ํธ์ถ๋ฌ์๋ null์ ์ ์ฅํ๋ค.
- oldValue : ๋ณ๊ฒฝ๋์๊ฑฐ๋ ์ญ์ ๋ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ณธ๋ ๊ฐ์ ์ ์ฅํ๋ค.
- url : ์คํฌ๋ฆฝํธ๊ฐ ํฌํจ๋ ๋ฌธ์์ URL
๐ช ์ฟ ํค
์ฟ ํค ๋ฐ์ดํฐ๋ ์น๋ธ๋ผ์ฐ์ ์ ์๋ฒ ์ฌ์ด์์ ์๋์ผ๋ก ์ ์ก๋๋ฏ๋ก, ์๋ฒ ์ธก ์คํฌ๋ฆฝํธ๋ ํด๋ผ์ด์ธํธ์์ ์ ์ฅํ ์ฟ ํค์ ๊ฐ์ ์ฝ๊ฑฐ๋ ์ธ ์ ์๋ค.
โ ์ฟ ํค๋ ์ด๋ค ์ข ๋ฅ์ ์ํธํ ๊ธฐ๋ฒ๋ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ๋ณด ์ ๋ฌ์ ๋ณดํธ๋ฐ์ง ๋ชปํ๋ค.
-
์ฟ ํค๋ ๋ฉ์๋๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉฐ Document๊ฐ์ฒด์ cookie ํ๋กํผํฐ๋ฅผ ํตํด ์กฐ์ํ๋ค.
-
๊ฐ ์ฟ ํค๋ณ๋ก ์๋ช ์ฃผ๊ธฐ์ ๋ฒ์๋ ๊ฐ๋ณ ์ง์ ํ ์ ์๋ค.
max-age
( ๊ธฐ๋ณธ์ ์ผ๋ก๋ ์ผ์์ ์ด๋ค. ) -
๋๋ฉ์ธ์ depth๋ฅผ ์ง์ ( ๊ฒฝ๋ก๋ฅผ ์ง์ ) ํจ์ผ๋ก์จ ์ฟ ํค๋ฅผ ๊ณต์ ํ ์ ์๋ค.
์ฟ ํค ์ ์ฅํ๊ธฐ
์ผ์์ ์ธ ์ฟ ํค๋ฅผ ๋ง๋๋ ค๋ฉด cookieํ๋กํผํฐ๋ฅผ ๋ฌธ์์ด ํ์์ผ๋ก ์ค์ ํ์.
document.cookie = "version=" + encodeURIComponent(document.lastModified);
- name
- max-age
- path
- domain
- secure
์ฟ ํค๊ฐ ์ฝ๊ธฐ
๋ณดํต ๊ฐ๋ณ ์ด๋ฆ=๊ฐ ์์ ๋ถ๋ฆฌํด ๋ผ ์ ์๋๋ก split() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผ ํ ๊ฒ์ด๋ค. ๊ฐ์ ์ถ์ถํ ํ ํด๋น ๊ฐ์ ํด์ํ๊ธฐ ์ํด decodeURIComponent()์ ์ ๋ฌํ JSON.parse()๋ฅผ ์ฌ์ฉํด ๊ฐ์ฒด๋ก ๋ณํํ๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์คํ ๋ฆฌ์ง์ ์คํ๋ผ์ธ ์น์ฑ
์ ํ๋ฆฌ์ผ์ด์ ์บ์ ๊ธฐ๋ฅ์ ์ถ๊ฐ๋ก HTML๊ณผ CSS JS IMG ๋ฑ์ ํ์ผ ์์ฒด๋ฅผ ์ ์ฅํ๋๊ฒ์ด ๊ฐ๋ฅํด์ก๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ค์น๋๋ฉด ์์ฒด์ ์ผ๋ก ์ ๊ฑฐํ๊ฑฐ๋ ์ฌ์ฉ์๊ฐ ์ง์ ์ง์ฐ๊ธฐ ์ ๊น์ง ๋จ์์๊ฒ ๋๋ค.
์คํ๋ผ์ธ ์น์ฑ์ ์ ํ๋ฆฌ์ผ์ด์ ์บ์์ ์ค์น๋ ๊ฒ์ผ๋ก ๋์ํ๊ณ ๋ก์ปฌ ์คํ ๋ฆฌ์ง๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ค์, ์จ๋ผ์ธ ์ํ๊ฐ ๋๋ฉด ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก ์ ์กํ์ฌ ๋๊ธฐํํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์บ์ MANIFEST
์์ฒญํ URL๋ค์ ๋ชฉ๋ก์ ๋ด๊ณ ์๋ ๋งค๋ํ์คํธ ํ์ผ์ ์์ฑํ ํ ํ๊ทธ์ manifest์์ฑ์ ์ค์ ํ์ฌ HTMLํ์ด์ง์ ์ฐ๊ฒฐํด์ค๋ค.
- MANIFEST์ ๊ตฌ์ฑ
CACHE MANIFEST
myapp.HTML
myapp.js
myapp.css
images/background.png
// resource๋ค
์บ์ ์ ๋ฐ์ดํธ
์บ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ํ์ผ์ ์บ์์์ ๋ถ๋ฌ์จ๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ์คํ๋ผ์ธ ์ํ์ผ๋๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๋งค๋ํ์คํธ ํ์ผ์ ๋ณ๊ฒฝ์ ๋น๋๊ธฐ์ ์ผ๋ก ํ์ธํ ๊ฒ์ด๋ค.
๋ธ๋ผ์ฐ์ ๋ ์บ์ ์์ ๊ณผ์ ์์ ๋ค์์ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๋ฉฐ, ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฑ๋กํ ์ ์๋ค.
applicationCache.onupdateready = function(){
var reload = confirm("์ ํ๋ฆฌ์ผ์ด์
์๋ก๊ณ ์นจ์ด ํ์ํฉ๋๋ค. ์ง๊ธ ์๋ก๊ณ ์นจ ํ๊ฒ ์ต๋๊น?");
if (reload)
location.reload();
}
-
์ ๋ฐ์ดํธํ ๊ฒ์ด ์๋ ์ํ
noupdate
-
์ ๋ฐ์ดํธํ ๊ฒ์ด ์๋ ๊ฒฝ์ฐ
downloading
์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ณ ๋งค๋ํ์คํธ๋ฅผ ์ฐธ์กฐํ๋ฉฐ ๋ชจ๋ ํ์ผ๋ค์ ์บ์
-
์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ์ ๋ก๋ํ๋ ๊ฒฝ์ฐ
downloading
๊ณผprogress
์ด๋ฒคํธ๊ฐ ๋ฐ์๋๋ฉฐ ๋ค์ด๋ก๋ ์๋ฃ์updateready
๊ฐ ์๋cached์ด๋ฒคํธ
๊ฐ ๋ฐ์
-
๋ธ๋ผ์ฐ์ ๊ฐ ์คํ๋ผ์ธ ์ํ์ธ ๊ฒฝ์ฐ
- ๋งค๋ํ์คํธ๋ฅผ ํ์ธํ ์ ์์ผ๋ฏ๋ก
error
- ๋งค๋ํ์คํธ๋ฅผ ํ์ธํ ์ ์์ผ๋ฏ๋ก
-
๋งค๋ํ์คํธ๋ฅผ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ
obsolete
๋ฐ์ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์บ์์์ ์ญ์
์บ์ ์ํ
UNCACHED
- manifest์์ฑ์ ํ์ธํ ์ ์์.
IDLE
- ์ต์ ๋ฒ์ ์ผ๋ก ์บ์๋ ์ํ
CHECKING
- ๋งค๋ํ์คํธ ํ์ผ์ ํ์ธ์ค์ธ ์ํ
DOWNLOADING
- ํ์ผ๋ค์ ๋ค์ด๋ก๋ํ ๋ค์ ์บ์์ ์ ์ฉํ๋ ์ค์ธ ์ํ
UPDATEREADY
- ์๋ฒ์ ์ ๋ค์ด๋ก๋ํ๊ณ ์บ์ํ ์ํ
OBSOLETE
- ๋งค๋ํ์คํธ๊ฐ ์์ด์ ์ ํ๋ฆฌ์ผ์ด์ ์บ์๋ ์ญ์ ๋ ์์ ์ธ ์ํ
์บ์ ๋ฉ์๋
-
update()
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฒ์ ์ ํ์ธํ๊ธฐ ์ํ ์บ์ ์ ๋ฐ์ดํธ ์๊ณ ๋ฆฌ์ฆ์ ๋ช ์์ ์ผ๋ก ํธ์ถํ๋ค.
-
swapCache()
- ๋ธ๋ผ์ฐ์ ๊ฐ ์ด์ ๋ฒ์ ์ ์บ์๋ฅผ ํ๊ธฐํ๊ณ ์์ผ๋ก์ ์์ฒญ๋ค์ด ์ ์บ์๋ฅผ ๊ฐ์ ธ์ฌ๊ฒ ํด์ค๋ค.
โ๏ธ ์ํ๊ฐ์ด UPDATEREADY
์ด๊ฑฐ๋ OBSOLETE
์ผ๋๋ง ์๋ฏธ๊ฐ ์๋ค.