Search

๐‚๐ก๐ซ๐จ๐ฆ๐ž ๐ž๐ฑ๐ญ๐ž๐ง๐ฌ๐ข๐จ๐ง

Why Chrome extension?
์•„๋ฌด๋ž˜๋„ ์š”๊ทผ๋ž˜ ์ปดํ“จํ„ฐ๋กœ ๊ณต๋ถ€๋ฅผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„ ๋ชจ๋“ ๊ฒƒ์„ ์ปดํ“จํ„ฐ๋กœ ํ•ด๊ฒฐํ•˜๊ณ  ์‹ถ์€ ๋งˆ์Œ์ด ์ปธ์Šต๋‹ˆ๋‹ค. ํ•ธ๋“œํฐ์œผ๋กœ๋„, ์•„์ดํŒจ๋“œ๋กœ๋„ ํ˜น์€ ์•„๋‚ ๋กœ๊ทธํ•˜๊ฒŒ ์ˆ˜์ฒฉ์œผ๋กœ๋„ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ํ•„๊ธฐ๋ฅผ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์กฐ๊ธˆ ๋” ์ ‘๊ทผ์„ฑ์ด ์ข‹์œผ๋ฉด ์ข‹๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ๋ฌธ๋“ ์ต์Šคํ…์…˜ ํƒญ์— ๋ˆˆ๊ธธ์ด ๊ฐ€๊ฒŒ ๋˜์—ˆ๊ณ , ํˆฌ๋‘๋ฆฌ์ŠคํŠธ๋‚˜ ๋ฉ”๋ชจ์žฅ์„ ์ต์Šคํ…์…˜์œผ๋กœ ๋งŒ๋“ค์–ด๋ณผ ์ˆ˜ ์—†์„๊นŒ? ํ•˜๋Š” ์ƒ๊ฐ์„ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๊นƒํ—ˆ๋ธŒ
chrome-extension
sieunnnn
ํ† ์ดํ”„๋กœ์ ํŠธ ์ง„ํ–‰๊ณผ์ •
โ€ข
๋Œ€๋žต์ ์ธ ๊ตฌ์„ฑ ์งœ๊ธฐ
ํ”ผ๊ทธ๋งˆ๋กœ ๊ตฌ์„ฑ์„ ์งœ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ ์œˆ๋„์šฐ98 ๊ฐ์„ฑ์„ ์ฐธ ์ข‹์•„ํ•ด์„œ ์ด๋ฅผ ์‚ด๋ ค ๋งŒ๋“ค์–ด๋ณด์•˜์Šต๋‹ˆ๋‹ค..
โ€ข
manifest.jason ์ž‘์„ฑ
{ "manifest_version": 2, "name": "TodoList", "description": "์œˆ๋„์šฐ 98 ์˜ ๊ฐ์„ฑ์„ ์ž…ํžŒ ํˆฌ๋‘๋ฆฌ์ŠคํŠธ์™€ ๋ฉ”๋ชจ์žฅ ์ž…๋‹ˆ๋‹ค!", "version": "1.0.0", "browser_action": { "default_icon": "icon.png", "default_popup": "todoList.html" }, "permissions": [ "tabs", "activeTab", "storage" ] }
JSON
๋ณต์‚ฌ
manifest_version ์€ 3 ์ด ์ตœ์‹ ์ด์ง€๋งŒ, 3 ์—์„œ๋Š” activeTab ์ด ์ง€์›์ด ๋˜์ง€ ์•Š์•„ 2 ๋กœ ๋‚ฎ์ถ”์–ด ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
โ€ข
์ฝ”๋“œ์ž‘์„ฑ
โ—ฆ
์ผ๋ฐ˜์ ์ธ todoList ์™€ memo ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
โ—ฆ
localStorage ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
Local Storage
๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€๋ž€ ๋ฌด์—‡์ธ๊ฐ€? ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€๋Š” ์›น ์Šคํ† ๋ฆฌ์ง€์˜ ํ•œ ์ข…๋ฅ˜์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋ธŒ๋ผ์šฐ์ € ์ƒ์— ์ €์žฅํ•˜๋Š” ๊ธฐ์ˆ ์ธ๋ฐ, ๋™์ผํ•œ ์ปดํ“จํ„ฐ์—์„œ ๋™์ผํ•œ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์— ํ•œํ•ด ๋ฐ์ดํ„ฐ ์˜์†์„ฑ์ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ด ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ƒˆ๋กœ๊ณ ์นจ ํ•˜์ž๋งˆ์ž ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚ ์•„๊ฐ€ ๋ฒ„๋ฆฌ๊ฒ ์ฃ ,,
์›น ์Šคํ† ๋ฆฌ์ง€๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ‚ค์™€ ๊ฐ’์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ API ์‚ฌ์šฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
// ํ‚ค์— ๋ฐ์ดํ„ฐ ์“ฐ๊ธฐ localStorage.setItem("key", value); // ํ‚ค๋กœ ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ localStorage.getItem("key"); // ํ‚ค์˜ ๋ฐ์ดํ„ฐ ์‚ญ์ œ localStorage.removeItem("key"); // ๋ชจ๋“  ํ‚ค์˜ ๋ฐ์ดํ„ฐ ์‚ญ์ œ localStorage.clear(); // ์ €์žฅ๋œ ํ‚ค/๊ฐ’ ์Œ์˜ ๊ฐœ์ˆ˜ localStorage.length;
JavaScript
๋ณต์‚ฌ
์›น ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ/์ฝ๊ธฐ ํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผํ•  ์ ์ด ํ•˜๋‚˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›น ์Šคํ† ๋ฆฌ์ง€๋Š” ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ ๋ฐ–์— ์ €์žฅํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ ์ธ๋ฐ์š”, ์ด๋ฅผ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ๋Š” ๋ฐฐ์—ด์„ JSON ํ˜•ํƒœ๋กœ ์ง๋ ฌํ™”(serialization) ํ•˜๊ณ , ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ๋•Œ๋Š” ๋ฐ˜๋Œ€๋กœ ์ŠคํŠธ๋ง ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ JSON ํ˜•ํƒœ๋กœ ์—ญ์ง๋ ฌํ™”(deserialization) ํ•˜์—ฌ ์›๋ณธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์–ป์Šต๋‹ˆ๋‹ค.
์ง๋ ฌํ™”
์—ญ์ง๋ ฌํ™”
์ง๋ ฌํ™”/์—ญ์ง๋ ฌํ™” ๊ฐ„๋‹จํ•œ ์ •๋ฆฌ
์‹œ์—ฐ
ํˆฌ๋‘๊ธฐ๋Šฅ
๋ฉ”๋ชจ๊ธฐ๋Šฅ
ํšŒ๊ณ 
๋ฐ๊ธฐ์ ๋Œ€์ง€๋งŒ ์•Š์•˜๋‹ค๋ฉด ํ•˜๋ฃจ๋งŒ์— ๋๋ƒˆ์„๊ฑด๋””,, ๋„ˆ๋ฌด ๊ฒŒ์œผ๋ฆ„์„ ํ”ผ์šด๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋ฆ„ ๋””ํ…Œ์ผ์„ ์‚ด๋ ค๋ณด๊ฒ ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, ๋‚จ์ด ๋ณด์•˜์„ ๋•Œ ์ž˜ ๋ณด์ผ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜๋„ ๊ฐ„๋‹จํ•œ ํ”„๋กœ๊ทธ๋žจ, ์žฌ๋ฏธ์žˆ๊ฒŒ ์ž˜ ๋งˆ์นœ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋งŒ๋“ค๊ณ  ๋ณด๋‹ˆ ์ˆ˜์ •๊ธฐ๋Šฅ์„ ๋„ฃ์ง€ ์•Š์•„์„œ ์กฐ๋งŒ๊ฐ„ ์‹œ๊ฐ„๋‚  ๋•Œ ๊ผญ ๋„ฃ์–ด๋ด์•ผ ๊ฒ ์Šต๋‹ˆ๋‹ค. ์“ฐ๋‹ค๋ณด๋ฉด ๊ทธ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•  ๋•Œ๊ฐ€ ์˜ค๊ฒ ์ฃ ,,?
ํฌ๋กฌ ์ต์Šคํ…์…˜์„ ํ•œ๋ฒˆ ๋งŒ๋“ค์–ด๋ดค์œผ๋‹ˆ ๋‹ค์Œ ํŒ€ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ์‹œ ์ด๋ฅผ ์‚ฌ์šฉํ•ด๋ด์•ผ ๊ฒ ์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ํ™œ์šฉ์„ ํ•ด๋ณผ์ง€ ๋ฒŒ์จ๋ถ€ํ„ฐ ๊ธฐ๋Œ€๊ฐ€ ๋˜๋„ค์š”!
์ฝ์–ด์ฃผ์‹  ๋ถ„๋“ค ๋ชจ๋‘ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.