๋ธ๋ผ์ฐ์ ํ์ฅ ํ๋ก๊ทธ๋จ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํฌ๋ฆฝํธ๋ฅผ ์๋น์ค ์์ปค๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ์ฌ ์ฑ๋ฅ, ๋ณด์ ๋ฐ ์ต์ ์น ๊ฐ๋ฐ ๊ดํ์ ๊ฐ์ ํ์ธ์. ์ด ๊ฐ์ด๋๋ ๊ธ๋ก๋ฒ ๋ชจ๋ฒ ์ฌ๋ก์ ์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค.
๋ธ๋ผ์ฐ์ ํ์ฅ ํ๋ก๊ทธ๋จ ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํฌ๋ฆฝํธ: JavaScript ์๋น์ค ์์ปค ๋ง์ด๊ทธ๋ ์ด์ ์ฌ์ธต ๋ถ์
๋ธ๋ผ์ฐ์ ํ์ฅ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค๊ณ ์น ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๋ฐ ์์ด์๋ ์ ๋ ๋๊ตฌ๊ฐ ๋์์ต๋๋ค. ๋ง์ ํ์ฅ ํ๋ก๊ทธ๋จ์ ํต์ฌ์๋ ํ์ฅ ํ๋ก๊ทธ๋จ์ ํต์ฌ ๋ก์ง์ ๊ด๋ฆฌํ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํฌ๋ฆฝํธ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํฌ๋ฆฝํธ์ ๋ํ ์ ํต์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ฑ๋ฅ, ๋ณด์ ๋ฐ ์ต์ ์น ๊ฐ๋ฐ ๊ดํ๊ณผ ๊ด๋ จํ์ฌ ์ฌ๋ฌ ๋ฌธ์ ๋ฅผ ์ ๊ธฐํด ์์ต๋๋ค. ์ด ์ข ํฉ ๊ฐ์ด๋๋ ๊ธฐ์กด์ ๋ ๊ฑฐ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํฌ๋ฆฝํธ์์ JavaScript ์๋น์ค ์์ปค๋ก์ ์ ํ์ ํ๊ตฌํ๋ฉฐ, ๊ฐ๋ฐ์๊ฐ ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํด ๋ ํจ์จ์ ์ด๊ณ ์์ ํ๋ฉฐ ๋ฏธ๋ ์งํฅ์ ์ธ ํ์ฅ ํ๋ก๊ทธ๋จ์ ๊ตฌ์ถํ๋ ๋ฐ ํ์ํ ์ง์๊ณผ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ง์ด๊ทธ๋ ์ด์ ์ ํ์์ฑ ์ดํดํ๊ธฐ
์ ํต์ ์ธ ๋ธ๋ผ์ฐ์ ํ์ฅ ํ๋ก๊ทธ๋จ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํฌ๋ฆฝํธ๋ ์ข ์ข ์ง์์ ์ด๊ณ ์ค๋ ์คํ๋๋ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์๋ํ์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๊ธฐ๋ฅ์ ์ด๊ธด ํ์ง๋ง ๋ช ๊ฐ์ง ๋จ์ ์ด ์์์ต๋๋ค:
- ๋ฆฌ์์ค ์๋น: ์ง์์ ์ธ ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํฌ๋ฆฝํธ๋ ์์คํ ๋ฆฌ์์ค๋ฅผ ์๋นํ์ฌ ๋ธ๋ผ์ฐ์ ์ฑ๋ฅ๊ณผ ๋ฐฐํฐ๋ฆฌ ์๋ช ์ ์ํฅ์ ๋ฏธ์น๋ฉฐ, ํนํ ์ ์ธ๊ณ์ ์ผ๋ก ๋ณดํธํ๋ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์ ๋์ฑ ๊ทธ๋ ์ต๋๋ค.
- ๋ณด์ ์ทจ์ฝ์ : ์ค๋ ์คํ๋๋ ์คํฌ๋ฆฝํธ๋ ์ ์ ํ๊ฒ ๊ด๋ฆฌ ๋ฐ ์ ๋ฐ์ดํธ๋์ง ์์ ๊ฒฝ์ฐ ๋ณด์ ์ํ์ ์ด๋ํ ์ ์์ต๋๋ค.
- ์ ํ๋ ๊ธฐ๋ฅ: ์ค๋๋ ์ ๊ทผ ๋ฐฉ์์ ์ต์ ์น ํ์ค๊ณผ API๋ฅผ ์ง์ํ์ง ์์ ํ์ฅ ํ๋ก๊ทธ๋จ์ ์ ์ฌ๋ ฅ์ ์ ํํ ์ ์์ต๋๋ค.
์๋น์ค ์์ปค๋ ํ์ํ ๋๋ง ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์๋ํจ์ผ๋ก์จ ๋ ํจ์จ์ ์ด๊ณ ์์ ํ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค. ์ด ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ๋ ์ฑ๋ฅ์ ํฅ์์ํค๊ณ ํ์ฅ ํ๋ก๊ทธ๋จ์ด ์ต์ ์น ๊ธฐ์ ์ ํ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
JavaScript ์๋น์ค ์์ปค๋ ๋ฌด์์ธ๊ฐ?
JavaScript ์๋น์ค ์์ปค๋ ๋ธ๋ผ์ฐ์ ์ฐฝ๊ณผ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์คํฌ๋ฆฝํธ์ ๋๋ค. ์ด๋ค์ ๋คํธ์ํฌ ์์ฒญ์ ๊ฐ๋ก์ฑ๊ณ , ์บ์ฑ์ ๊ด๋ฆฌํ๋ฉฐ, ํธ์ ์๋ฆผ์ ์ฒ๋ฆฌํ๋ ๋ฑ ๋ค์ํ ์์ ์ ์ํํฉ๋๋ค. ์๋น์ค ์์ปค๋ ๊ธฐ์กด์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํฌ๋ฆฝํธ์ ๋นํด ์ฌ๋ฌ ๊ฐ์ง ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ํฅ์๋ ์ฑ๋ฅ: ์๋น์ค ์์ปค๋ ํ์ํ ๋๋ง ์คํ๋๋ฏ๋ก ๋ฆฌ์์ค๋ฅผ ์ ์ฝํ๊ณ ๋ธ๋ผ์ฐ์ ์๋ต์ฑ์ ๊ฐ์ ํฉ๋๋ค.
- ๊ฐ์ ๋ ๋ณด์: ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ๊ณผ ํน์ ๋ชฉ์ ์ ์ ์ฌ์ ์ธ ๋ณด์ ์ํ์ ์ต์ํํฉ๋๋ค.
- ์คํ๋ผ์ธ ๊ธฐ๋ฅ: ์๋น์ค ์์ปค๋ ๋ฆฌ์์ค๋ฅผ ์บ์ฑํ๊ณ ๋คํธ์ํฌ ์์ฒญ์ ๊ด๋ฆฌํ์ฌ ํ์ฅ ํ๋ก๊ทธ๋จ์ด ์คํ๋ผ์ธ์์๋ ์๋ํ ์ ์๊ฒ ํฉ๋๋ค.
- ์ต์ ์น ํ์ค: ์๋น์ค ์์ปค๋ ์ต์ ์น ๊ฐ๋ฐ ํ์ค๊ณผ ์ผ์นํ์ฌ ๋ฏธ๋ ์งํฅ์ ์ธ ๊ฐ๋ฐ์ ์ด์งํฉ๋๋ค.
์๋น์ค ์์ปค๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๊ธฐ: ๋จ๊ณ๋ณ ๊ฐ์ด๋
์๋น์ค ์์ปค๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ฌ๋ฌ ๋จ๊ณ๋ฅผ ํฌํจํฉ๋๋ค. ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ ํ์ฅ ํ๋ก๊ทธ๋จ์ ๋ณต์ก์ฑ๊ณผ ๊ธฐ๋ฅ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค. ๋ค์์ ์ผ๋ฐ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค:
1. ๊ธฐ์กด ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํฌ๋ฆฝํธ ๋ถ์
์์ํ๊ธฐ ์ ์ ๊ธฐ์กด ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ฒ ์ ํ ๋ถ์ํ์ญ์์ค. ์ฌ์ฉํ๋ ํจ์, ์ด๋ฒคํธ ๋ฐ ํต์ ์ฑ๋์ ์๋ณํ์ธ์. ์ด๋ ์๋น์ค ์์ปค ํ๊ฒฝ ๋ด์์ ๋ณต์ ํด์ผ ํ ๊ธฐ๋ฅ์ ์ดํดํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
์์: ๋ง์ฝ ํ์ฅ ํ๋ก๊ทธ๋จ์ด ์ฌ์ฉ์ ์ค์ ์ ์ ์ฅํ๊ธฐ ์ํด chrome.storage.sync
๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, ์๋น์ค ์์ปค๊ฐ ์ด ์ ์ฅ์์ ์ ๊ทผํ๊ณ ๊ด๋ฆฌํ ์ ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ๋ง์ฝ 'alarms' API๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, ์ด๋ฅผ ์ ์ ํ ๋ฐฑ๊ทธ๋ผ์ด๋ ์๋น์ค๋ก ๋ณํํด์ผ ํฉ๋๋ค.
2. ๋งค๋ํ์คํธ ํ์ผ ์ค๋น (manifest.json)
๋งค๋ํ์คํธ ํ์ผ์ ํ์ฅ ํ๋ก๊ทธ๋จ์ ์ค์ ๊ตฌ์ฑ ํ์ผ์ ๋๋ค. ์๋น์ค ์์ปค๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํฌ๋ฆฝํธ๋ก ์ง์ ํ๊ธฐ ์ํด ์ด ํ์ผ์ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค. ๊ธฐ์กด์ `background` ์์ฑ์ `service_worker` ์์ฑ์ผ๋ก ๊ต์ฒดํ์ธ์:
๋ ๊ฑฐ์ (๋ ์ด์ ์ฌ์ฉ๋์ง ์์):
{
"manifest_version": 3,
"name": "My Extension",
"version": "1.0",
"background": {
"scripts": ["background.js"],
"persistent": true //Optional, and deprecated.
},
...
}
์๋น์ค ์์ปค ์ฌ์ฉ ์:
{
"manifest_version": 3,
"name": "My Extension",
"version": "1.0",
"background": {
"service_worker": "background.js"
},
...
}
persistent
ํค๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฏ๋ก ์ ๊ฑฐํด์ผ ํฉ๋๋ค. ์๋น์ค ์์ปค์ ๋์์ ์ด๋ฒคํธ ๊ธฐ๋ฐ์
๋๋ค. ์๋น์ค ์์ปค๋ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ํ์ฑํ๋๊ณ , ์ ํด ์ํ์ผ ๋ ์ข
๋ฃ๋ฉ๋๋ค.
์ค์ ๊ณ ๋ ค์ฌํญ:
- ๋งค๋ํ์คํธ ๋ฒ์ ์ด 3์ธ์ง ํ์ธํ์ธ์.
service_worker
์์ฑ์ ์๋น์ค ์์ปค ํ์ผ(์:background.js
)์ ์ง์ ํ์ธ์.
3. ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํฌ๋ฆฝํธ ๋ณํ (background.js)
๊ธฐ์กด ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํฌ๋ฆฝํธ๋ฅผ ์๋น์ค ์์ปค ์ปจํ ์คํธ ๋ด์์ ์๋ํ๋๋ก ๋ฆฌํฉํฐ๋งํ์ธ์. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์ฃผ์ ๋จ๊ณ๋ฅผ ํฌํจํฉ๋๋ค:
- ์ด๋ฒคํธ ๋ฆฌ์ค๋: ์๋น์ค ์์ปค๋
onInstalled
(ํ์ฅ ํ๋ก๊ทธ๋จ์ด ์ค์น๋ ๋),onMessage
(๋ค๋ฅธ ํ์ฅ ํ๋ก๊ทธ๋จ ๋ถ๋ถ์์ ๋ฉ์์ง๋ฅผ ์์ ํ ๋),onUpdateAvailable
(์ ๋ฐ์ดํธ๊ฐ ์์ ๋)๊ณผ ๊ฐ์ ๋ธ๋ผ์ฐ์ ์ด๋ฒคํธ์ ์๋ตํ๊ธฐ ์ํด ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.chrome.runtime.onInstalled.addListener()
๋ฅผ ์ฌ์ฉํ์ฌ ์ค์น ์ฝ๋ฐฑ์ ์ค์ ํ๊ณ ๋ค๋ฅธ ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ๋ํด์๋ ์ ์ฌํ๊ฒ ์ค์ ํฉ๋๋ค. - ๋ฉ์์ง ์ ๋ฌ: ๋ ๊ฑฐ์ ๋ฐฉ์์ ์ง์ ์ ์ธ ํจ์ ํธ์ถ ๋์ , ๋ฉ์์ง ์ ๋ฌ API(
chrome.runtime.sendMessage
๋ฐchrome.runtime.onMessage.addListener
)๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฅ ํ๋ก๊ทธ๋จ์ ๋ค๋ฅธ ๋ถ๋ถ(์: ํ์ ํ์ด์ง, ์ฝํ ์ธ ์คํฌ๋ฆฝํธ)๊ณผ ํต์ ํฉ๋๋ค. - ์ ์ฅ์ ๊ด๋ฆฌ:
chrome.storage.sync
๋๋chrome.storage.local
์ ์ฌ์ฉํ์ฌ ์ ์ฅ์์ ์ ๊ทผํ๊ณ ์์ ํฉ๋๋ค. ์ด๋ค์ ๋์ฒด๋ก ๋ณ๊ฒฝ๋์ง ์์ผ๋ฏ๋ก, ๋ฐ์ดํฐ๋ฅผ ์ฌ์ ํ ์ฝ๊ณ ์ธ ์ ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค. - API ํธํ์ฑ: ์ฌ์ฉํ๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ API๋ฅผ ๊ฒํ ํ๊ณ ์ง์๋๋ API๋ก ๋ง์ด๊ทธ๋ ์ด์
ํฉ๋๋ค. ์๋ฅผ ๋ค์ด,
chrome.browserAction
์ ์ฌ์ฉํ๊ณ ์๋ค๋ฉดchrome.action
์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. - ๋ฆฌ์์ค ์บ์ฑ: ์๋น์ค ์์ปค ๋ด์ ์บ์ฑ ๋ฉ์ปค๋์ฆ์ ๊ตฌํํ์ฌ ์ฑ๋ฅ์ ๊ฐ์ ํ๊ณ ์คํ๋ผ์ธ ๊ธฐ๋ฅ์ ํ์ฑํํฉ๋๋ค. Cache API๋ฅผ ์ฌ์ฉํ์ฌ ์์ฃผ ์ ๊ทผํ๋ ๋ฆฌ์์ค๋ฅผ ์ ์ฅํฉ๋๋ค.
์์: ์๋ฆผ์ ๋ฉ์์ง ์ ๋ฌ๋ก ๊ต์ฒดํ๊ธฐ:
๋ ๊ฑฐ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํฌ๋ฆฝํธ (background.js):
chrome.browserAction.onClicked.addListener(function(tab) {
alert("Hello from the background script!");
});
์๋น์ค ์์ปค (background.js):
chrome.action.onClicked.addListener(function(tab) {
chrome.scripting.executeScript({
target: { tabId: tab.id },
function: () => {
alert("Hello from the background script!");
}
});
});
4. ๋น๋๊ธฐ ์์ ๊ตฌํ
์๋น์ค ์์ปค๋ ๋ณธ์ง์ ์ผ๋ก ๋น๋๊ธฐ์ ์ ๋๋ค. ์ด๋ ๋คํธ์ํฌ ์์ฒญ, ์ ์ฅ์ ์ ๊ทผ, ๋ฉ์์ง ์ ๋ฌ๊ณผ ๊ฐ์ ์์ ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฃผ๋ก ํ๋ก๋ฏธ์ค(promise)์ async/await๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์๋น์ค ์์ปค์ ์คํ์ ๋ง์ง ์๋๋ก ์ฝ๋๊ฐ ์ ์ ํ ๊ตฌ์กฐํ๋์๋์ง ํ์ธํ์ธ์.
5. ์ฑ๋ฅ ๋ฐ ๋ฆฌ์์ค ๊ด๋ฆฌ ์ต์ ํ
- ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ ์ต์ํ: ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ถํ์ํ ์์ ์ ์ํํ์ง ๋ง์ญ์์ค. ์ด๋ฒคํธ์ ์ํด ํธ๋ฆฌ๊ฑฐ๋ ๋๋ง ์ฝ๋๋ฅผ ์คํํ์ธ์.
- ํจ์จ์ ์ธ ์บ์ฑ: Cache API๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ ฅํ ์บ์ฑ ์ ๋ต์ ๊ตฌํํ์ฌ ์์ฃผ ์ ๊ทผํ๋ ๋ฆฌ์์ค๋ฅผ ์ ์ฅํ๊ณ ๋คํธ์ํฌ ์์ฒญ์ ์ต์ํํ์ธ์. ์ ์ธ๊ณ์ ์ผ๋ก ์ ์ฉํ ์บ์ ์ฐ์ , ๋คํธ์ํฌ ์ฐ์ ๋๋ stale-while-revalidate์ ๊ฐ์ ์ ๋ต ์ฌ์ฉ์ ๊ณ ๋ คํ์ธ์.
- ๋ฐ์ดํฐ ์ ์ฅ ์ ํ: ๋ฐฑ๊ทธ๋ผ์ด๋์ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ง ๋ง์ธ์. ํ์์ ์ธ ๊ฒฝ์ฐ์๋ง ์ ์ฅ์๋ฅผ ์ฌ์ฉํ๊ณ ๋ฐ์ดํฐ ํฌ๊ธฐ ์ ํ์ ๊ณ ๋ คํ์ธ์.
6. ํ ์คํธ ๋ฐ ๋๋ฒ๊น
๋ง์ด๊ทธ๋ ์ด์ ๋ ํ์ฅ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ๋ธ๋ผ์ฐ์ ์ ํ๋ซํผ์์ ์ฒ ์ ํ ํ ์คํธํ์ฌ ๋ชจ๋ ๊ฒ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋์ง ํ์ธํ์ธ์. ๋ธ๋ผ์ฐ์ ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค ์์ปค๋ฅผ ๋๋ฒ๊น ํ๊ณ ๋คํธ์ํฌ ์์ฒญ, ์ฝ์ ๋ก๊ทธ ๋ฐ ์ ์ฅ์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ฌํ์ธ์. ๊ธ๋ก๋ฒ ํ ์คํธ๋ ์ฌ์ฉ์๊ฐ ์ผ๊ด๋ ๊ฒฝํ์ ํ ์ ์๋๋ก ๋ณด์ฅํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
์ผ๋ฐ์ ์ธ ๋๋ฒ๊น ๋๊ตฌ:
- ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ: ๋ธ๋ผ์ฐ์ ์ ๊ฐ๋ฐ์ ๋๊ตฌ์์ ์๋น์ค ์์ปค ์น์ ์ ์ ๊ทผํ์ฌ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ , ๋ก๊ทธ๋ฅผ ๊ฒ์ฌํ๋ฉฐ, ์ฝ๋๋ฅผ ๋๋ฒ๊น ํ ์ ์์ต๋๋ค.
- ์ฝ์ ๋ก๊น
:
console.log()
๋ฅผ ์ฌ์ฉํ์ฌ ๋๋ฒ๊น ์ ๋ณด๋ฅผ ์ถ๋ ฅํ์ธ์. - ์ค๋จ์ (Breakpoints): ์๋น์ค ์์ปค ์ฝ๋ ๋ด์ ์ค๋จ์ ์ ์ค์ ํ์ฌ ์คํ์ ์ผ์ ์ค์งํ๊ณ ๋ณ์๋ฅผ ๊ฒ์ฌํ์ธ์.
7. ์ ๋ฐ์ดํธ ๋ฐ ํธํ์ฑ ์ฒ๋ฆฌ
ํ์ฅ ํ๋ก๊ทธ๋จ์ ๋ํ ์ ๋ฐ์ดํธ๋ฅผ ๋ฆด๋ฆฌ์คํ ๋ ์๋น์ค ์์ปค ์ ๋ฐ์ดํธ๊ฐ ์ ๋๋ก ์ฒ๋ฆฌ๋๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ํ์ฅ ํ๋ก๊ทธ๋จ ์์คํ ์ ์๋น์ค ์์ปค๋ฅผ ์๋์ผ๋ก ์ ๋ฐ์ดํธํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ค์๊ณผ ๊ฐ์ ์ ๋ฐ์ดํธ ๋ก์ง์ ํฌํจํด์ผ ํ ์๋ ์์ต๋๋ค:
- ์ ์ฅ์ ๊ตฌ์กฐ ๋ง์ด๊ทธ๋ ์ด์ ๊ด๋ฆฌ.
- ๊ธฐ๋ฅ ํธํ์ฑ ๋ณด์ฅ.
๊ณ ๊ธ ๊ธฐ์ ๋ฐ ๊ณ ๋ ค์ฌํญ
1. ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ๊ตฌํ
์๋น์ค ์์ปค๋ ๋ค์ํ ์ ๋ต์ ์ฌ์ฉํ์ฌ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, chrome.alarms
API๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๋ณต์ ์ธ ์์
์ ์์ฝํ๊ฑฐ๋, chrome.idle
API๋ฅผ ์ฌ์ฉํ์ฌ ๋ธ๋ผ์ฐ์ ๊ฐ ์ ํด ์ํ์ผ ๋๋ฅผ ๊ฐ์งํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์์๋ฅผ ์ค๊ณํ ๋, ๊ฐ๋ฐ ๋์๊ตญ์ ๋ชจ๋ฐ์ผ ์ฌ์ฉ์๋ค์ ๋ฐฐํฐ๋ฆฌ ์๋ช
์๊ตฌ์ ๊ฐ์ด ์ ์ธ๊ณ ์ฌ์ฉ์์ ์๊ตฌ๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
2. ๋คํธ์ํฌ ์์ฒญ ๊ฐ๋ก์ฑ๊ธฐ ๋ฐ ์์
์๋น์ค ์์ปค๋ ๋คํธ์ํฌ ์์ฒญ์ ๊ฐ๋ก์ฑ๊ณ ์์ ํ๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ ํนํ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค:
- ๊ด๊ณ ์ฐจ๋จ๊ธฐ ๊ตฌํ.
- ์น ํ์ด์ง์ ์ฌ์ฉ์ ์ง์ ์ฝํ ์ธ ์ฃผ์ .
- HTTP ํค๋ ์์ .
fetch
์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญ์ ๊ฐ๋ก์ฑ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ชจ๋ ์์ฒญ์ ๋ํด URL์ ๋ค์ ์์ฑํ๋๋ก ์ ํํ ์ ์์ต๋๋ค. ์ด๋ ๋งค์ฐ ๊ฐ๋ ฅํ์ง๋ง ์๋ํ์ง ์์ ๋ถ์์ฉ์ด ์์ ์ ์์ผ๋ฏ๋ก ์ฒ ์ ํ ํ
์คํธํด์ผ ํฉ๋๋ค. fetch ์์ฒญ์ ์๋ต์ ์์ ํ๊ฑฐ๋ ๋ ๋น ๋ฅธ ์๋์ ์ํด ์บ์ํ ์๋ ์์ต๋๋ค.
3. ํธ์ ์๋ฆผ
์๋น์ค ์์ปค๋ ์น ์๋ฒ๋ก๋ถํฐ ํธ์ ์๋ฆผ์ ์ฒ๋ฆฌํ ์ ์์ด, ๋ธ๋ผ์ฐ์ ๊ฐ ๋ซํ ์์ ๋๋ ํ์ฅ ํ๋ก๊ทธ๋จ์ด ๋ฉ์์ง๋ฅผ ์์ ํ ์ ์๊ฒ ํฉ๋๋ค. ์ด๋ ๋ค์์ ํฌํจํฉ๋๋ค:
- ํธ์ ์๋ฆผ ์๋ํฌ์ธํธ ์ค์ .
- ์๋น์ค ์์ปค์
push
๋ฐpushSubscription
์ด๋ฒคํธ ๊ตฌํ.
์ด๋ ์ฌ์ฉ์ ์ฐธ์ฌ๋ฅผ ์ํ ์์ฒญ๋ ๊ธฐํ๋ฅผ ์ ๊ณตํ๋ฉฐ, ์ฌ์ฉ์์ ์์น์ ๊ด๊ณ์์ด ์ค์๊ฐ ์ ๋ฐ์ดํธ๋ฅผ ์ ๊ณตํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
4. ๊ธ๋ก๋ฒ ํ์ฅ ํ๋ก๊ทธ๋จ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํ ๋ธ๋ผ์ฐ์ ํ์ฅ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ ๋ ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ช ์ฌํ์ธ์:
- ํ์งํ ๋ฐ ๊ตญ์ ํ (I18n): ๋ค์ํ ์ฌ์ฉ์๋ฅผ ๋ง์กฑ์ํค๊ธฐ ์ํด ์ฌ๋ฌ ์ธ์ด๋ฅผ ์ง์ํฉ๋๋ค. ๋ฒ์ญ ํ์ผ์ ๊ตฌํํ๊ณ ์ฌ์ฉ์์๊ฒ ์ธ์ด ์ต์ ์ ์ ๊ณตํ์ธ์. ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์ฐ๋ ์ธ์ด ์ง์๋ ๊ณ ๋ คํ์ธ์.
- ์ ๊ทผ์ฑ: WCAG ๊ฐ์ด๋๋ผ์ธ์ ์ค์ํ์ฌ ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์๊ฐ ํ์ฅ ํ๋ก๊ทธ๋จ์ ์ ๊ทผํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค. ํค๋ณด๋ ํ์, ์ด๋ฏธ์ง์ ๋ํ ๋์ฒด ํ ์คํธ ๋ฐ ํ๋ฉด ๋ฆฌ๋ ํธํ์ฑ์ ์ ๊ณตํ์ธ์.
- ์ฑ๋ฅ ์ต์ ํ: ๋ค์ํ ๋คํธ์ํฌ ์กฐ๊ฑด๊ณผ ๊ธฐ๊ธฐ ์ฑ๋ฅ์ ๊ณ ๋ คํ์ฌ ํ์ฅ ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ์ ์ต์ ํํ์ธ์. ์ง์ฐ ๋ก๋ฉ, ์ฝ๋ ๋ถํ ๋ฐ ํจ์จ์ ์ธ ์บ์ฑ ์ ๋ต์ ๊ตฌํํ์ธ์.
- ๋ณด์: ๊ฐ๋ฐ ๊ณผ์ ์ ๋ฐ์ ๊ฑธ์ณ ๋ณด์์ ์ฐ์ ์ํ์ธ์. ์ฌ์ฉ์ ์ ๋ ฅ์ ์ด๊ท ํ๊ณ , ๋คํธ์ํฌ ์์ฒญ์ HTTPS๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๋ณด์ ์ทจ์ฝ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ์ ๊ธฐ์ ์ผ๋ก ํ์ฅ ํ๋ก๊ทธ๋จ์ ์ ๋ฐ์ดํธํ์ธ์.
- ๊ฐ์ธ์ ๋ณด ๋ณดํธ: ํ์ฅ ํ๋ก๊ทธ๋จ์ด ์์งํ๋ ๋ฐ์ดํฐ์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ํด ์ฌ์ฉ์์๊ฒ ํฌ๋ช ํ๊ฒ ๊ณต๊ฐํ์ธ์. ์ ์ธ๊ณ์ ์ผ๋ก ์ ์ฉ๋๋ GDPR ๋ฐ CCPA์ ๊ฐ์ ๊ฐ์ธ์ ๋ณด ๋ณดํธ ๊ท์ ์ ์ค์ํ์ธ์.
- ์ฌ์ฉ์ ๊ฒฝํ: ์ฌ์ฉ์ ์นํ์ ์ธ ์ธํฐํ์ด์ค๋ฅผ ๋์์ธํ์ธ์. ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI) ๋ฐ ์ฌ์ฉ์ ๊ฒฝํ(UX) ๋์์ธ ์์น์ ๊ณ ๋ คํ์ฌ ์ง๊ด์ ์ด๊ณ ๋งค๋ ฅ์ ์ธ ๊ฒฝํ์ ๋ง๋์ธ์.
5. ํ์ฅ ํ๋ก๊ทธ๋จ์์์ ์๋น์ค ์์ปค ์ฌ์ฉ ์์
๋ค์์ ๋ค์ํ ์ ํ์ ํ์ฅ ํ๋ก๊ทธ๋จ์์ ์๋น์ค ์์ปค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์์ ๋๋ค. ์ด๋ฌํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ณ ๋ คํ๊ณ ํน์ ํ์ฅ ํ๋ก๊ทธ๋จ์ ๋ง๊ฒ ์กฐ์ ํด ๋ณด์ธ์.
- ์ฝํ ์ธ ์ฐจ๋จ๊ธฐ: ์๋น์ค ์์ปค๋ ๋คํธ์ํฌ ์์ฒญ์ ๊ฐ๋ก์ฑ๊ณ ๋ฏธ๋ฆฌ ์ ์๋ ๊ท์น์ ๋ฐ๋ผ ํํฐ๋งํ์ฌ ์์น ์๋ ์ฝํ ์ธ (์: ๊ด๊ณ , ํธ๋์ปค)๋ฅผ ํจ์จ์ ์ผ๋ก ์ฐจ๋จํฉ๋๋ค.
- ์คํ๋ผ์ธ ์ ํ๋ฆฌ์ผ์ด์ : ์๋น์ค ์์ปค๋ ์น ๋ฆฌ์์ค๋ฅผ ์บ์ํ์ฌ ํ์ฅ ํ๋ก๊ทธ๋จ์ด ์ฝํ ์ธ ๋ ๊ธฐ๋ฅ์ ์คํ๋ผ์ธ์ผ๋ก ์ ๊ทผํ ์ ์๋๋ก ํฉ๋๋ค.
- ์น์ฌ์ดํธ ๊ฐ์ : ์๋น์ค ์์ปค๋ ์น ํ์ด์ง์ ๋ชจ์์ ์์ ํ๊ฑฐ๋, ์ฌ์ฉ์ ์ง์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฃผ์ ํ๊ฑฐ๋, ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๋ค์ํ ํ๋ฉด ํฌ๊ธฐ์ ํด์๋, ๋๋ ๋คํธ์ํฌ ๋์ญํญ์ ๋ง์ถฐ ์ต์ ํํ๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ คํด ๋ณด์ธ์.
- ์์ฐ์ฑ ๋๊ตฌ: ์๋น์ค ์์ปค๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ๊ด๋ฆฌํ๊ณ , ์๋ฆผ์ ๋ณด๋ด๋ฉฐ, ์ฌ๋ฌ ๊ธฐ๊ธฐ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ฆผ์ ์๋น์ค ์์ปค๋ฅผ ์ฌ์ฉํ๋ ํฌ๋ก์ค ํ๋ซํผ ํ ์ผ ๋ชฉ๋ก์ ๋ง๋ค ์ ์์ต๋๋ค.
- ์ปค๋ฎค๋์ผ์ด์ ๋๊ตฌ: ์๋น์ค ์์ปค๋ ์ค์๊ฐ ๋ฉ์์ง์ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
๋ธ๋ผ์ฐ์ ํ์ฅ ํ๋ก๊ทธ๋จ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํฌ๋ฆฝํธ๋ฅผ JavaScript ์๋น์ค ์์ปค๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฒ์ ์ ์ธ๊ณ ์ฌ์ฉ์์ ์๊ตฌ๋ฅผ ์ถฉ์กฑ์ํค๋ ๊ณ ์ฑ๋ฅ์ ์์ ํ๊ณ ํ๋์ ์ธ ํ์ฅ ํ๋ก๊ทธ๋จ์ ๊ตฌ์ถํ๊ธฐ ์ํ ํ์์ ์ธ ๋จ๊ณ์ ๋๋ค. ์ด ๊ฐ์ด๋์ ์ค๋ช ๋ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด๊ณ ๊ธ๋ก๋ฒ ๊ฐ๋ฐ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ช ์ฌํจ์ผ๋ก์จ, ์ฐ์ํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ํ์ฅ ํ๋ก๊ทธ๋จ์ ๋ง๋ค ์ ์์ต๋๋ค. ์๋น์ค ์์ปค๋ฅผ ์ฑํํ๋ ๊ฒ์ ์น ๊ฐ๋ฐ์ ๋ฏธ๋์ ๋ํ ์ฝ์์ ๋ํ๋ ๋๋ค. ์ต์ ๋ธ๋ผ์ฐ์ ํ์ฅ ํ๋ก๊ทธ๋จ ํ์ค ๋ฐ ๊ธฐ์ ์ ๋ํ ์ต์ ์ ๋ณด๋ฅผ ์ ์งํ๊ณ , ์๋ก์ด ๊ธฐ๋ฅ์ ์คํํ๋ฉฐ, ์ ์ธ๊ณ ๋ชจ๋ ์ฌ๋์ ์ํ ๋ ์ข๊ณ ์ ๊ทผ์ฑ ๋์ ๋๊ตฌ๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํด ํ์ฅ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ ๊ดํ์ ์ง์์ ์ผ๋ก ๊ฐ์ ํด ๋๊ฐ์ธ์.