ํ”ผ๋“œ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
Unpacking Manifest V3: Chromeโ€™s Big Extension Shakeup! ๐Ÿ› ๏ธ
Dev.toDev.to
Frontend

Service Worker ๊ธฐ๋ฐ˜ Event-Driven ๊ตฌ์กฐ ์ „ํ™˜์„ ํ†ตํ•œ ๋ธŒ๋ผ์šฐ์ € ๋ฆฌ์†Œ์Šค ์ตœ์ ํ™” ๋ฐ ๋ณด์•ˆ ๊ฐ•ํ™”

Unpacking Manifest V3: Chromeโ€™s Big Extension Shakeup! ๐Ÿ› ๏ธ

TenE2026๋…„ 6์›” 13์ผ4๋ถ„intermediate

Context

Manifest V2์˜ Persistent Background Pages๋กœ ์ธํ•œ ์ง€์†์ ์ธ RAM ์ ์œ  ๋ฐ ๊ณผ๋„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„ ๋ฌธ์ œ ๋ฐœ์ƒ. Remotely Hosted Code ์‹คํ–‰ ํ—ˆ์šฉ์— ๋”ฐ๋ฅธ ๋ณด์•ˆ ์ทจ์•ฝ์ ๊ณผ webRequest API ๊ธฐ๋ฐ˜์˜ ๋ฌด๋ถ„๋ณ„ํ•œ ๋„คํŠธ์›Œํฌ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์ œ์–ด ํ•œ๊ณ„ ์ง๋ฉด.

Technical Solution

  • Persistent Background Page๋ฅผ Stateless Service Worker๋กœ ๋Œ€์ฒดํ•˜์—ฌ Event-Driven ๋ฐฉ์‹์˜ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ ๊ตฌํ˜„
  • webRequest API์˜ Blocking ๊ธฐ๋Šฅ์„ declarativeNetRequest API๋กœ ์ „ํ™˜ํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋„คํŠธ์›Œํฌ ํ•„ํ„ฐ๋ง์„ ์ง์ ‘ ์ˆ˜ํ–‰ํ•˜๋Š” ์„ ์–ธ์  ๊ตฌ์กฐ ์ฑ„ํƒ
  • ์›๊ฒฉ ์ฝ”๋“œ ์‹คํ–‰์„ ์ „๋ฉด ๊ธˆ์ง€ํ•˜๊ณ  ๋ชจ๋“  JavaScript๋ฅผ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ํŒจํ‚ค์ง€ ๋‚ด์— ํฌํ•จ์‹œ์ผœ ์ •์  ๋ถ„์„ ๋ฐ ๊ฒ€ํ†  ํ”„๋กœ์„ธ์Šค ๊ฐ•ํ™”
  • ์ฝœ๋ฐฑ ๊ธฐ๋ฐ˜ API๋ฅผ Modern Promise ๊ธฐ๋ฐ˜์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜์—ฌ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋กœ์ง์˜ ์ผ๊ด€์„ฑ ํ™•๋ณด
  • DOM ์ ‘๊ทผ์ด ํ•„์š”ํ•œ ๋ฐฐ๊ฒฝ ์ž‘์—… ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด Offscreen Document API๋ฅผ ํ†ตํ•œ ํŠน์ˆ˜ ๋ชฉ์  ๋ Œ๋”๋ง ๊ณ„์ธต ๋ถ„๋ฆฌ

- Service Worker ๋„์ž… ์‹œ ์ƒํƒœ ์œ ์ง€ ๋ถˆ๊ฐ€(Stateless) ์ œ์•ฝ์„ ๊ณ ๋ คํ•˜์—ฌ chrome.storage.local ๊ธฐ๋ฐ˜์˜ ์ƒํƒœ ๊ด€๋ฆฌ ์ „๋žต ์ˆ˜๋ฆฝ - ๋„คํŠธ์›Œํฌ ์š”์ฒญ ์ œ์–ด ๋กœ์ง ์„ค๊ณ„ ์‹œ ์ธํ„ฐ์…‰ํ„ฐ ๋ฐฉ์‹์—์„œ ์„ ์–ธ์  ๋ฃฐ์…‹(Rule-set) ๋ฐฉ์‹์œผ๋กœ์˜ ํŒจ๋Ÿฌ๋‹ค์ž„ ์ „ํ™˜ ๊ฒ€ํ†  - ์™ธ๋ถ€ ์Šคํฌ๋ฆฝํŠธ ์˜์กด์„ฑ์„ ์ œ๊ฑฐํ•˜๊ณ  ๋ชจ๋“  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ฒˆ๋“ค๋งํ•˜๋Š” ์ •์  ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•

์›๋ฌธ ์ฝ๊ธฐ