λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨ κΆνκ³Ό μ μΈκ³ μΉ μ¬μ©μλ₯Ό μν JavaScript API 보μμμμ ν΅μ¬ μν μ λν μ¬μΈ΅ νꡬ.
λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨ κΆν: JavaScript API 보μ λͺ¨λΈ 보νΈ
μ€λλ μνΈ μ°κ²°λ λμ§νΈ νκ²½μμ μΉ λΈλΌμ°μ λ κ°μΈ λ° μ λ¬Έκ° νλ λͺ¨λμ νμμ μΈ λκ΅¬κ° λμμ΅λλ€. μ΄λ¬ν κΈ°λ₯μ μλΉ λΆλΆμ κΈ°λ₯μ μΆκ°νκ³ λΈλΌμ°μ§ κ²½νμ λ§μΆ€ννλ μμ μννΈμ¨μ΄ νλ‘κ·Έλ¨μΈ λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨μ ν΅ν΄ ν₯μλ©λλ€. κ·Έλ¬λ μ΄λ¬ν νμ₯ νλ‘κ·Έλ¨μ κ°λ ₯ν¨κ³Ό λ€μ¬λ€λ₯ν¨μλ κ·Έλ€μ΄ μμ²νλ κΆνμ κ΄λ¦¬ν΄μΌ νλ μ€λν μ± μμ΄ λ°λ¦ λλ€. μ΄ λΈλ‘κ·Έ κ²μλ¬Όμμλ λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨ κΆνμ 볡μ‘ν μΈκ³μ μΉ μ ν리μΌμ΄μ κΈ°λ₯μ ν΅μ¬ κ΅¬μ± μμμΈ JavaScript APIλ₯Ό 보νΈνλ λ° μμ΄ κ·Έλ€μ κ·Όλ³Έμ μΈ μν μ μ¬μΈ΅μ μΌλ‘ μ΄ν΄λ΄ λλ€.
JavaScript APIμ κ·Έ μ€μμ± μ΄ν΄νκΈ°
νμ₯ νλ‘κ·Έλ¨ κΆνμ λΆμνκΈ° μ μ JavaScript APIμ μ€μμ±μ νμ νλ κ²μ΄ μ€μν©λλ€. JavaScript API(μ ν리μΌμ΄μ νλ‘κ·Έλλ° μΈν°νμ΄μ€)λ μλ‘ λ€λ₯Έ μννΈμ¨μ΄ κ΅¬μ± μμκ° μλ‘ ν΅μ ν μ μλλ‘ νλ κ·μΉ λ° νλ‘ν μ½ μ§ν©μ λλ€. μΉ λΈλΌμ°μ μ λ§₯λ½μμ JavaScript APIλ μΉ νμ΄μ§κ° λΈλΌμ°μ μ κΈ°λ₯, μ¬μ©μμ μμ€ν λ° λ€λ₯Έ μΉ μλΉμ€μ μνΈ μμ©ν μ μκ² ν©λλ€. μ΄λ¬ν APIλ λμ μ½ν μΈ , λνν μ¬μ©μ μΈν°νμ΄μ€ λ° μ κ΅ν μΉ μ ν리μΌμ΄μ μ κ΅¬μ± μμμ λλ€.
JavaScript APIμ μλ λ€μκ³Ό κ°μ΅λλ€:
- DOM API: μΉ νμ΄μ§μ ꡬ쑰, μ€νμΌ λ° μ½ν μΈ λ₯Ό μ‘°μνκΈ° μν¨.
- μΉ μ€ν λ¦¬μ§ API: μ¬μ©μμ λΈλΌμ°μ μ λ‘μ»¬λ‘ λ°μ΄ν°λ₯Ό μ μ₯νκΈ° μν¨ (μ: localStorage, sessionStorage).
- λ€νΈμν¬ API (Fetch, XMLHttpRequest): λ°μ΄ν°λ₯Ό κ²μνκ±°λ μ μ‘νκΈ° μν΄ μλ²μ HTTP μμ²μ νκΈ° μν¨.
- μ§λ¦¬ μμΉ API: μ¬μ©μμ μ§λ¦¬μ μμΉμ μ κ·ΌνκΈ° μν¨ (μ¬μ©μ λμ νμ).
- μΉ μνΈν API: μνΈν μμ μ μννκΈ° μν¨.
μ΄λ¬ν APIμ μ κ·Όμ± λλΆμ μΉμ λ§€μ° κ°λ ₯νκ³ μ μλ ₯μ΄ λμ΅λλ€. κ·Έλ¬λ μ΄λ μ λλ‘ κ΄λ¦¬λμ§ μμΌλ©΄, νΉν μ 3μ νμ₯ νλ‘κ·Έλ¨μ΄ κ΄λ ¨λ κ²½μ° μ μ¬μ μΈ κ³΅κ²© νλ©΄μ μ μνκΈ°λ ν©λλ€.
λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨μ μν
λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨μ λΈλΌμ°μ μ κΈ°λ₯μ 보κ°νλλ‘ μ€κ³λμμ΅λλ€. λ€μμ μνν μ μμ΅λλ€:
- κ΄κ³ μ°¨λ¨.
- λΉλ°λ²νΈ κ΄λ¦¬.
- λ€λ₯Έ μλΉμ€μ ν΅ν©νμ¬ μμ°μ± ν₯μ.
- μ κ·Όμ± κΈ°λ₯ μ 곡.
- μΉμ¬μ΄νΈμ λν λ§μΆ€ν μ€νμΌλ§ νμ±ν.
λ§μ νμ₯ νλ‘κ·Έλ¨μ JavaScriptλ₯Ό ν΅ν΄ μΉ νμ΄μ§ λ° λΈλΌμ°μ κΈ°λ₯κ³Ό μνΈ μμ©νμ¬ μ΄λ¬ν κΈ°λ₯μ λ¬μ±ν©λλ€. μ΄ μνΈ μμ©μ μ’ μ’ λ―Όκ°ν λ°μ΄ν°μ μ κ·Όνκ±°λ μ¬μ©μμ κ°μΈ μ 보 λ³΄νΈ λ° λ³΄μμ μν₯μ λ―ΈμΉ μ μλ μμ μ μνν΄μΌ ν©λλ€.
λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨ κΆν: μ κ·Όμ λ¬Έμ§κΈ°
μ΄ μ§μ μμ λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨ κΆνμ΄ κ°μ₯ μ€μν΄μ§λλ€. μ΄λ 보μ λ©μ»€λμ¦μΌλ‘ μμ©νμ¬ νμ₯ νλ‘κ·Έλ¨μ΄ μ κ·Όν μ μλ 리μμ€μ κΈ°λ₯μ μ μν©λλ€. μ΅μ λΈλΌμ°μ λ μΈλΆνλ κΆν μμ€ν
μ μ¬μ©νμ¬ κ°λ°μκ° κ΅¬μ± νμΌ(μΌλ°μ μΌλ‘ manifest.json)μ νμ₯ νλ‘κ·Έλ¨μ νμν κΆνμ λͺ
μμ μΌλ‘ μ μΈνλλ‘ κ°μ ν©λλ€.
μ΅μ κΆν μμΉμ΄λΌλ κ°λ μ΄ μ΄ λ³΄μ λͺ¨λΈμ ν΅μ¬μ λλ€. νμ₯ νλ‘κ·Έλ¨μ μλλ κΈ°λ₯μ νμν μ΅μνμ κΆνλ§ λΆμ¬λ°μμΌ ν©λλ€. κ³Όλν κΆνμ μμ²νλ κ²μ μ¬μ©μμκ² μν μ νΈκ° λ μ μμΌλ©°, νμ₯ νλ‘κ·Έλ¨μ΄ μμλκ±°λ μ μμ μΈ κ²½μ° λ³΄μ μνμ΄ λ μ μμ΅λλ€.
μΌλ°μ μΈ λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨ κΆν μ ν
ꡬκΈ(ν¬λ‘¬), λͺ¨μ§λΌ(νμ΄μ΄νμ€), λ§μ΄ν¬λ‘μννΈ(μ£μ§)μ κ°μ λΈλΌμ°μ 곡κΈμ 체λ λ€μν κΆν λ²μλ₯Ό μ μν©λλ€. μ νν μ΄λ¦κ³Ό λ²μ£Όλ μ½κ° λ€λ₯Ό μ μμ§λ§ ν΅μ¬ μμΉμ μΌκ΄λκ² μ μ§λ©λλ€. λ€μμ μΌλ°μ μΌλ‘ μ νλ λͺ κ°μ§ κΆν μ νμ λλ€:
activeTab: μ΄κ²μ λ§€μ° μ μ©νκ³ λΉκ΅μ μμ ν κΆνμ λλ€. μ¬μ©μκ° νμ₯ νλ‘κ·Έλ¨μ λͺ μμ μΌλ‘ νΈμΆν λ(μ: μμ΄μ½ ν΄λ¦) νμ¬ νμ± νμ λν μμ μ κ·Ό κΆνμ λΆμ¬ν©λλ€. κ·Έλ¬λ©΄ νμ₯ νλ‘κ·Έλ¨μ ν΄λΉ νμ DOMμ μ κ·Όνκ³ μ€ν¬λ¦½νΈλ₯Ό μ€νν μ μμ§λ§, μ€μ§ ν΄λΉ νΉμ μνΈ μμ©μ λν΄μλ§ κ°λ₯ν©λλ€. μ΄κ²μ μ΅μ κΆν μμΉμ λνμ μΈ μμ λλ€.scripting: μ΄ κΆνμ νμ₯ νλ‘κ·Έλ¨μ΄ νλ‘κ·Έλλ° λ°©μμΌλ‘ μΉ νμ΄μ§μ JavaScriptλ₯Ό μ½μ ν μ μλλ‘ νμ©ν©λλ€. κ³ κΈ κΈ°λ₯μ μ 곡νκΈ° μν΄ μ’ μ’activeTabκ³Ό ν¨κ» μ¬μ©λ©λλ€. μ΄κ²μ΄ μμΌλ©΄ νμ₯ νλ‘κ·Έλ¨μ νμ΄μ§μ μ½ν μΈ μ μ§μ μνΈ μμ©ν μ μμ΅λλ€.storage: νμ₯ νλ‘κ·Έλ¨μ΄ λ‘컬μ λ°μ΄ν°λ₯Ό μ μ₯νκΈ° μν΄chrome.storageλλbrowser.storageμ κ°μ λΈλΌμ°μ μ μ μ₯μ APIμ μ κ·Όν μ μλ κΆνμ λΆμ¬ν©λλ€. μ΄κ²μ μΌλ°μ μΌλ‘ μ€μ , μ¬μ©μ κΈ°λ³Έ μ€μ λλ μμ λ°μ΄ν°μ μ¬μ©λ©λλ€.tabs: νμ₯ νλ‘κ·Έλ¨μ΄ λΈλΌμ°μ νμ 쿼리νκ³ κ΄λ¦¬ν μ μλλ‘ νμ©ν©λλ€. μ¬κΈ°μλ ν μμ±, μ λ°μ΄νΈ, λ«κΈ°, μ΄λ λ° νμ λν μ 보 κ²μμ΄ ν¬ν¨λ μ μμ΅λλ€.webNavigation: νμ΄μ§ λ‘λ© μμ, λ‘λ© μλ£ λλ νλ μ μμ± μμ κ³Ό κ°μ λΈλΌμ°μ λ΄ νμ μ΄λ²€νΈμ λν μμΈν μ 보μ μ κ·Όν μ μλ κΆνμ λΆμ¬ν©λλ€.webRequest: μ΄κ²μ κ°λ ₯νκ³ λ―Όκ°ν κΆνμΌλ‘, νμ₯ νλ‘κ·Έλ¨μ΄ λΈλΌμ°μ κ° λ§λ λ€νΈμν¬ μμ²μ κ°λ‘μ±κ±°λ μ°¨λ¨νκ±°λ μμ ν μ μλλ‘ νμ©ν©λλ€. κ΄κ³ μ°¨λ¨κΈ°, κ°μΈ μ 보 λ³΄νΈ λꡬ λ° λ³΄μ νμ₯ νλ‘κ·Έλ¨μ μ’ μ’ μ΄ κΆνμ νμλ‘ ν©λλ€.alarms: νμ₯ νλ‘κ·Έλ¨μ΄ νμ± μνκ° μλλλΌλ νΉμ μκ°μ΄λ μΌμ κ°κ²© νμ μ½λλ₯Ό μ€ννλλ‘ μμ½ν μ μμ΅λλ€.notifications: νμ₯ νλ‘κ·Έλ¨μ΄ μ¬μ©μμκ² μμ€ν μμ€μ μλ¦Όμ νμν μ μλλ‘ ν©λλ€.- κ΄λ²μν νΈμ€νΈ κΆν (μ:
<all_urls>λλ νΉμ λλ©μΈ ν¨ν΄): μ΄κ²μ΄ κ°μ₯ λ―Όκ°ν κΆνμ λλ€. νμ₯ νλ‘κ·Έλ¨μ<all_urls>μ λν μ κ·Ό κΆνμ λΆμ¬νλ©΄ μ¬μ©μκ° λ°©λ¬Ένλ λͺ¨λ μΉμ¬μ΄νΈμ μ μ¬μ μΌλ‘ μνΈ μμ©ν μ μμμ μλ―Έν©λλ€. μ΄λ λͺ¨λ μΉνμ΄μ§μ μΏ ν€, μμ λ°μ΄ν° λ° μ½ν μΈ μ λν κ΄λ²μν μ κ·Όμ νμ©ν©λλ€. μ΄λ¬ν κΆνμ κ·Ήλμ μ£Όμλ₯Ό κΈ°μΈμ¬ λΆμ¬ν΄μΌ ν©λλ€.
manifest.json νμΌ: κΆν μ μΈ
manifest.json νμΌμ λͺ¨λ λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨μ ν΅μ¬μ
λλ€. μ΄λ νμ₯ νλ‘κ·Έλ¨μ μ΄λ¦, λ²μ , μ€λͺ
, μμ΄μ½ λ° κ²°μ μ μΌλ‘ νμν κΆνμ ν¬ν¨ν νμ λ©νλ°μ΄ν°λ₯Ό μ 곡νλ JSON νμΌμ
λλ€.
λ€μμ κΆνμ΄ μ΄λ»κ² μ μΈλλμ§μ λν κ°λ¨ν μμ λλ€:
{
"manifest_version": 3,
"name": "My Awesome Extension",
"version": "1.0",
"description": "An extension that enhances your browsing experience.",
"permissions": [
"activeTab",
"scripting",
"storage",
"notifications"
],
"host_permissions": [
"https://*.example.com/*"
],
"action": {
"default_popup": "popup.html"
}
}
μ΄ μμμ:
"activeTab","scripting","storage","notifications"λ νμ€ κΆνμ λλ€."host_permissions"λ νΉμ μΉμ¬μ΄νΈμ λν μ κ·Όμ μ§μ νκΈ° μν μλ‘μ΄ μΉ΄ν κ³ λ¦¬(ν¬λ‘¬μ Manifest V3μμ λμ λ¨)μ λλ€. μ¬κΈ°μλexample.comνμμ λͺ¨λ νμ λλ©μΈ λ° κ²½λ‘μ λν μ κ·Όμ νμ©ν©λλ€.
μ¬μ©μκ° νμ₯ νλ‘κ·Έλ¨μ μ€μΉνλ €κ³ ν λ λΈλΌμ°μ λ μμ²νλ κΆνμ λͺ νν λͺ©λ‘μ μ μν©λλ€. μ΄λ¬ν ν¬λͺ μ±μ μ¬μ©μκ° μ κ·Όμ νμ©νκΈ° μ μ μ 보μ μ κ°ν κ²°μ μ λ΄λ¦΄ μ μλλ‘ νλ μ€μν λ°©μ΄ λ©μ»€λμ¦μ λλ€.
κΆνμ΄ JavaScript API 보μ λͺ¨λΈμ 보νΈνλ λ°©λ²
λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨ κΆνμ μ¬λ¬ κ°μ§ μ€μν μ΄μ λ‘ JavaScript APIμ 보μμ μ μ§νλ λ° κ·Όλ³Έμ μ λλ€:
1. λ―Όκ°ν λ°μ΄ν°μ λν λ¬΄λ¨ μ κ·Ό λ°©μ§
λ§μ JavaScript APIλ λ‘κ·ΈμΈ μ격 μ¦λͺ , κΈμ΅ μ 보, λΈλΌμ°μ§ κΈ°λ‘ λ° κ°μΈ ν΅μ κ³Ό κ°μ λ―Όκ°ν μ¬μ©μ λ°μ΄ν°μ μνΈ μμ©ν©λλ€. κ΄λ²μν νΈμ€νΈ κΆν(μ: λͺ¨λ μΉμ¬μ΄νΈμ λν μ κ·Ό)μ μμ²νλ νμ₯ νλ‘κ·Έλ¨μ μ μμ μ΄κ±°λ μμλ κ²½μ° μμ, μΏ ν€ λλ νμ΄μ§ μ½ν μΈ μμ λ°μ΄ν°λ₯Ό μ½λ μ€ν¬λ¦½νΈλ₯Ό μ£Όμ νμ¬ μ΄ λ°μ΄ν°λ₯Ό μ μΆν μ μμ΅λλ€.
λͺ
μμ μΈ κΆνμ μꡬν¨μΌλ‘μ¨ λΈλΌμ°μ λ νμ₯ νλ‘κ·Έλ¨μ΄ λͺ
μμ μΌλ‘ νκ°λ μΉμ¬μ΄νΈμ λ°μ΄ν°μλ§ μ κ·Όν μ μλλ‘ λ³΄μ₯ν©λλ€. activeTab κΆνμ μνμ μ΅μννλ λνμ μΈ μλ‘, μ¬μ©μκ° μμν λλ§ μνΈ μμ©μ νμ©ν©λλ€.
2. κ΅μ°¨ μ¬μ΄νΈ μ€ν¬λ¦½ν (XSS) λ° κΈ°ν μ£Όμ 곡격 μν
νμ₯ νλ‘κ·Έλ¨μ μ’ μ’ μΉ νμ΄μ§μ 컨ν μ€νΈ λ΄μμ μ체 JavaScript μ½λλ₯Ό μ€νν©λλ€. νμ₯ νλ‘κ·Έλ¨μ΄ κ³Όλν κΆνμ κ°μ§κ³ μκ±°λ μ체μ μΌλ‘ μμλ κ²½μ°, μΉμ¬μ΄νΈλ λΈλΌμ°μ μ체μ μ·¨μ½μ μ μ μ©νλ μ μ± μ€ν¬λ¦½νΈλ₯Ό μ£Όμ ν μ μμ΅λλ€. μ΄λ λ€μμΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€:
- κ΅μ°¨ μ¬μ΄νΈ μ€ν¬λ¦½ν (XSS): μ μ± μ€ν¬λ¦½νΈλ₯Ό μΉ νμ΄μ§μ μ£Όμ νμ¬ μ¬μ©μμ λΈλΌμ°μ μμ μ€νλκ² νμ¬ μΏ ν€λ μΈμ ν ν°μ νμΉ μ μμ΅λλ€.
- ν΄λ¦μ¬νΉ: μ¬μ©μκ° ν΄λ¦νκ³ μλ€κ³ μΈμνλ κ²κ³Ό λ€λ₯Έ κ²μ ν΄λ¦νλλ‘ μμ΄λ νμ.
- μ€κ°μ(MitM) 곡격: μ¬μ©μμ μΉμ¬μ΄νΈ κ°μ ν΅μ μ κ°λ‘μ±κ³ μ μ¬μ μΌλ‘ λ³κ²½νλ νμ.
μΈλΆνλ κΆν, νΉν νΉμ 컨ν μ€νΈλ μ¬μ©μ μμ μΌλ‘ μ€ν¬λ¦½νΈ μ£Όμ μ μ ννλ κΆνμ μ΄λ¬ν μ νμ μνμ λν 곡격 νλ©΄μ ν¬κ² μ€μ λλ€.
3. μ¬μ©μ κ°μΈμ 보 λ³΄νΈ κ°ν
JavaScriptκ° μμΉ λ°μ΄ν°(μ§λ¦¬ μμΉ API), λ§μ΄ν¬, μΉ΄λ©λΌ λ° κΈ°ν λ―Όκ°ν λΈλΌμ°μ κΈ°λ₯μ μ κ·Όν μ μλ λ₯λ ₯μ κ°λ ₯νμ§λ§ μ격ν ν΅μ κ° νμν©λλ€. κΆν μμ€ν μ νμ₯ νλ‘κ·Έλ¨μ΄ μμλ‘ μ΄λ¬ν 리μμ€μ μ κ·Όν μ μλλ‘ λ³΄μ₯ν©λλ€. μ¬μ©μλ μΌλ°μ μΌλ‘ νμ₯ νλ‘κ·Έλ¨μ΄ μ΄λ¬ν κΈ°λ₯μ μ²μ μ¬μ©νλ €κ³ ν λ λμλ₯Ό μμ²λ°μ΅λλ€.
μλ₯Ό λ€μ΄, μ§λ¦¬ μμΉ APIλ₯Ό μ¬μ©νλ €λ νμ₯ νλ‘κ·Έλ¨μ νΉμ κΆνμ΄ νμνλ©°, λΈλΌμ°μ λ μ¬μ©μμκ² μμΉ κ³΅μ μ λν λͺ μμ μΈ λμλ₯Ό μμ²ν κ²μ λλ€.
4. μλλ°μ± λ° κ²©λ¦¬
λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨μ μ€κ³μ μλλ°μ€ νκ²½μμ μ€νλ©λλ€. μ΄λ μ½λκ° ν΅μ¬ λΈλΌμ°μ νλ‘μΈμ€ λ° λ€λ₯Έ νμ₯ νλ‘κ·Έλ¨κ³Ό 격리λμ΄ μμμ μλ―Έν©λλ€. κΆνμ μ΄ μλλ°μ€μ λ λμ λΈλΌμ°μ νκ²½ κ°μ μΈν°νμ΄μ€ μν μ ν©λλ€. λΈλΌμ°μ μ 보μ λͺ¨λΈμ μ΄λ¬ν κΆνμ κ°μ νμ¬ νμ₯ νλ‘κ·Έλ¨μ΄ λΆμ¬λ λ²μλ₯Ό λ²μ΄λ μμμ λ©λͺ¨λ¦¬λ μμ€ν 리μμ€μ μ§μ μ κ·Όνλ κ²μ λ°©μ§ν©λλ€.
5. μν λͺ¨λΈλ§ λ° κ°λ°μ μ± μ
κΆνμ μ μΈν΄μΌ νλ μꡬ μ¬νμ νμ₯ νλ‘κ·Έλ¨ κ°λ°μκ° μ½λμ 보μμ μν₯μ λν΄ λΉνμ μΌλ‘ μκ°νλλ‘ κ°μ ν©λλ€. κ·Έλ€μ μ μ¬μ μνμ μλ³νκ³ νμν μ΅μνμ κΆν μ§ν©μ μ μνκΈ° μν΄ μν λͺ¨λΈλ§μ μνν΄μΌ ν©λλ€. μ΄ μ± μμ λ μμ ν κ°λ° κ΄νμ μ₯λ €ν©λλ€.
λμ κ³Όμ μ μ§ννλ 보μ λͺ¨λΈ
κΆν μμ€ν μ κ²¬κ³ ν νΉμ±μλ λΆκ΅¬νκ³ λμ κ³Όμ λ μ¬μ ν λ¨μ μμ΅λλ€:
1. μ¬μ©μ μΈμ λ° μ΄ν΄
κ°μ₯ ν° μ₯μ λ¬Ό μ€ νλλ μ¬μ©μ μΈμμ λλ€. λ§μ μ¬μ©μκ° κ·Έ μλ―Έλ₯Ό μμ ν μ΄ν΄νμ§ λͺ»ν μ± κΆν μμ²μ ν΄λ¦νλ©° λμ΄κ°λλ€. νΉν κ²λ³΄κΈ°μλ 무ν΄ν΄ 보μ΄μ§λ§ κ΄λ²μν νΈμ€νΈ μ κ·Ό κΆνμ μμ²νλ νμ₯ νλ‘κ·Έλ¨μ κ²½μ° λμ± κ·Έλ μ΅λλ€. κ° κΆνμ μλ―Έμ λν΄ μ¬μ©μλ₯Ό κ΅μ‘νλ κ²μ μ§μμ μΈ λ Έλ ₯μ λλ€.
κΈλ‘λ² κ΄μ : μ¬μ©μ μ΄ν΄λλ μ§μ λ° κ΅μ‘ λ°°κ²½μ λ°λΌ ν¬κ² λ€λ₯Ό μ μμ΅λλ€. κΆν μ€λͺ μ λ¨μννκ³ μ¬λ¬ μΈμ΄λ‘ λͺ ννκ³ κ°κ²°ν μ€λͺ μ μ 곡νλ κ²μ΄ μ€μν©λλ€(JSON ꡬ쑰 λ΄μμλ μλμ§λ§ νμ₯ νλ‘κ·Έλ¨μ λλ© νμ΄μ§μμ).
2. ν©λ²μ μΈ λκ΅¬λ‘ μμ₯ν μ μ± νμ₯ νλ‘κ·Έλ¨
μ¬μ΄λ² λ²μ£μλ€μ ν©λ²μ μΈ κΈ°λ₯μ λͺ¨λ°©νλ μ μ± νμ₯ νλ‘κ·Έλ¨μ λ§λλ λ° λ₯μν©λλ€. κ·Έλ€μ μ΅μνμ κΆνμΌλ‘ μμν λ€μ, μ λ°μ΄νΈλ₯Ό ν΅ν΄ μ¬μ©μκ° λμΉμ±μ§ λͺ»νκΈ°λ₯Ό λ°λΌλ©° λ λ―Όκ°ν κΆνμ μμ²ν μ μμ΅λλ€. λΈλΌμ°μ 곡κΈμ 체λ μ΄λ¬ν μνμ λν΄ νμ₯ νλ‘κ·Έλ¨ λ§μΌνλ μ΄μ€λ₯Ό μ§μμ μΌλ‘ λͺ¨λν°λ§ν©λλ€.
3. λ§€λνμ€νΈ λ²μ μ μ§ν
λΈλΌμ°μ 곡κΈμ 체λ μ£ΌκΈ°μ μΌλ‘ νμ₯ νλ‘κ·Έλ¨ API λ° λ§€λνμ€νΈ λ²μ μ μ λ°μ΄νΈν©λλ€(μ: ν¬λ‘¬μ Manifest V2μμ V3λ‘μ μ ν). μ΄λ¬ν μ λ°μ΄νΈλ μ’ μ’ λ³΄μ λ° κ°μΈ μ 보 보νΈλ₯Ό κ°μ νκΈ° μν΄ κΆν μ²λ¦¬ λ°©μμ λ³κ²½νλ κ²μ ν¬ν¨ν©λλ€. μλ₯Ό λ€μ΄, Manifest V3λ λ€νΈμν¬ μμ² μμ μ λν λ μ격ν κ·μΉμ λμ νκ³ νΉμ κ°λ ₯ν APIλ₯Ό νκΈ°νμ¬ κ°λ°μκ° λ μμ ν λμμ μ¬μ©νλλ‘ μ λν©λλ€.
μμ: ν¬λ‘¬μ Manifest V3λ νΉμ μ¬μ© μ¬λ‘μ λν΄ webRequest APIλ₯Ό μ ννκ³ , νμ₯ νλ‘κ·Έλ¨μ΄ μ 체 μμ² μΈλΆ μ 보λ₯Ό λ³Ό νμ μμ΄ λΈλΌμ°μ κ° μ°¨λ¨ κ·μΉμ κ°μ ν μ μλλ‘ νμ¬ κ°μΈ μ 보 보νΈλ₯Ό κ°ννλ λ³΄λ€ μ μΈμ μΈ declarativeNetRequest APIμ μ±νμ μ₯λ €ν©λλ€.
4. λ κ±°μ νμ₯ νλ‘κ·Έλ¨ λ° μ λ°μ΄νΈ
λ§μ μ€λλ νμ₯ νλ‘κ·Έλ¨μ νμ¬μ λ μΈλΆνλ κΆν λͺ¨λΈμ μΌλμ λκ³ λ§λ€μ΄μ§μ§ μμμ μ μμ΅λλ€. μ΄λ¬ν νμ₯ νλ‘κ·Έλ¨μ μλ‘μ΄ λ³΄μ νμ€μ λ§κ² μ λ°μ΄νΈνλ κ²μ κ°λ°μμκ² μλΉν μμ μ΄ λ μ μμΌλ©° κΈ°μ‘΄ μ¬μ©μ κΈ°λ°μ μ μ€νκ² κ³ λ €ν΄μΌ ν©λλ€.
μ¬μ©μλ₯Ό μν λͺ¨λ² μ¬λ‘
λΈλΌμ°μ§ κ²½νμ 보νΈνκΈ° μν΄ νμ λ€μμ λ°λ₯΄μμμ€:
- μ λ’°ν μ μλ μΆμ²μμ νμ₯ νλ‘κ·Έλ¨ μ€μΉ: 곡μ λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨ μ€ν μ΄(ν¬λ‘¬ μΉ μ€ν μ΄, νμ΄μ΄νμ€ μ λμ¨, λ§μ΄ν¬λ‘μννΈ μ£μ§ μ λμ¨)λ₯Ό μ΄μ©νμμμ€.
- 리뷰 λ° νμ μ½κΈ°: λ€λ₯Έ μ¬μ©μκ° νμ₯ νλ‘κ·Έλ¨μ λν΄, νΉν κ°μΈ μ 보 λ³΄νΈ λ° λ³΄μκ³Ό κ΄λ ¨νμ¬ λλΌκ³ νλμ§ μ£Όμ κΉκ² μ΄ν΄λ³΄μμμ€.
- κΆν λ©΄λ°ν κ²ν : μ€μΉνκΈ° μ μ μμ²λ κΆν λͺ©λ‘μ μ£Όμ κΉκ² κ²ν νμμμ€. νμ₯ νλ‘κ·Έλ¨μ λͺ μλ κΈ°λ₯μ λΆνμν΄ λ³΄μ΄λ κΆνμ΄ μλ€λ©΄ κ²½κ³ν΄μΌ ν©λλ€. μλ₯Ό λ€μ΄, κ°λ¨ν κ³μ°κΈ° νμ₯ νλ‘κ·Έλ¨μ΄ λΈλΌμ°μ§ κΈ°λ‘μ μ κ·Όν νμλ μμ΅λλ€.
- μ΅μ κΆν λΆμ¬: κ°λ₯νλ©΄
activeTabκ³Ό κ°μ΄ λ μ νμ μΈ κΆνμ μ¬μ©νλ νμ₯ νλ‘κ·Έλ¨μ μ ννμμμ€. - νμ₯ νλ‘κ·Έλ¨ μ΅μ μνλ‘ μ μ§: μ λ°μ΄νΈμλ μ’ μ’ λ³΄μ ν¨μΉκ° ν¬ν¨λ©λλ€.
- μ¬μ©νμ§ μλ νμ₯ νλ‘κ·Έλ¨ μ κ±°: μ€μΉλ νμ₯ νλ‘κ·Έλ¨μ΄ μ μμλ‘ μ μ¬μ μΈ κ³΅κ²© νλ©΄μ΄ μμμ§λλ€.
- κ΄λ²μν νΈμ€νΈ κΆνμ μ£Όμ:
<all_urls>μ λν μ κ·Όμ μμ²νλ νμ₯ νλ‘κ·Έλ¨μ κ·Ήλμ μ£Όμλ₯Ό κΈ°μΈμ¬μΌ νλ©°, μ λμ μΌλ‘ νμνκ³ λ§€μ° ννμ΄ μ’μ μΆμ²μμλ§ μ€μΉν΄μΌ ν©λλ€.
κ°λ°μλ₯Ό μν λͺ¨λ² μ¬λ‘
νμ₯ νλ‘κ·Έλ¨ κ°λ°μμκ² λ³΄μκ³Ό μ¬μ©μ μ λ’°λ κ°μ₯ μ€μν©λλ€:
- μ΅μ κΆν μμΉ μμ©: νμ₯ νλ‘κ·Έλ¨ κΈ°λ₯μ μ λμ μΌλ‘ νμμ μΈ κΆνλ§ μμ²νμμμ€.
- μΈλΆνλ κΆν νμ©: κ°λ₯ν λλ§λ€ κ΄λ²μν κΆνλ³΄λ€ νΉμ κΆν(
activeTabλ±)μ νμ©νμμμ€. - κΆν λͺ ννκ² λ¬Έμν: νμ₯ νλ‘κ·Έλ¨ μ€λͺ μ κ° κΆνμ΄ νμν μ΄μ λ₯Ό μ€λͺ νμμμ€. μ¬μ©μμ ν¬λͺ νκ² μν΅νμμμ€.
- μ κΈ°μ μΌλ‘ μ½λ κ°μ¬: μ μ¬μ μΈ λ³΄μ μ·¨μ½μ μ μ°Ύκ³ μ½λκ° λͺ¨λ² μ¬λ‘λ₯Ό μ€μνλμ§ νμΈνμμμ€.
- λΈλΌμ°μ API λ³κ²½ μ¬νμ λν μ΅μ μ 보 μ μ§: λΈλΌμ°μ 곡κΈμ 체μμ λμ νλ μλ‘μ΄ λ³΄μ κΈ°λ₯ λ° μꡬ μ¬ν(μ: Manifest V3)μ λν μ΅μ μ 보λ₯Ό νμ νμμμ€.
- λ―Όκ°ν λ°μ΄ν° μμ νκ² μ²λ¦¬: νμ₯ νλ‘κ·Έλ¨μ΄ λ―Όκ°ν λ°μ΄ν°λ₯Ό μ²λ¦¬ν΄μΌ νλ κ²½μ°, μ¬μ©μ κ°μΈ μ 보 λ³΄νΈ λ° λΈλΌμ°μ 보μ μ§μΉ¨μ μ‘΄μ€νμ¬ μμ ν λ°©μμΌλ‘ μ²λ¦¬λλλ‘ νμμμ€.
- λ€νΈμν¬ μμ² μ΅μν: νμν λ€νΈμν¬ μμ²λ§ νλλ‘ νμ₯ νλ‘κ·Έλ¨μ μ€κ³νμμμ€.
κΈλ‘λ² κ³ λ € μ¬ν λ° νμ₯ νλ‘κ·Έλ¨ λ³΄μμ λ―Έλ
μΉμ΄ λμ± μΈκ³νλ¨μ λ°λΌ λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨ κΆνμ λν λμ κ³Όμ μ ν΄κ²°μ± λ κΈλ‘λ²ν΄μΌ ν©λλ€. κ°λ°μμ λΈλΌμ°μ 곡κΈμ 체λ λ€μμ κ³ λ €ν΄μΌ ν©λλ€:
- μ€λͺ μ νμ§ν: λ€μν μ¬μ©μ κΈ°λ°μ μν΄ κΆνμ λν λͺ ννκ³ λ²μλ μ€λͺ μ μ 곡ν©λλ€.
- κ΅μ°¨ λΈλΌμ°μ νΈνμ±: ννΈνλ₯Ό νΌνκΈ° μν΄ κΆν λͺ¨λΈκ³Ό λͺ¨λ² μ¬λ‘κ° λ€λ₯Έ λΈλΌμ°μ κ°μ κ°λ₯ν ν μΌκ΄λλλ‘ λ³΄μ₯ν©λλ€.
- μ μ’ μν 벑ν°: νμ₯ νλ‘κ·Έλ¨ μ¬μ©μλ₯Ό λμμΌλ‘ νλ μ κ΅ν μ¬ν 곡νμ 곡격과 κ°μ μλ‘μ΄ μνμ λμνκΈ° μν΄ λ³΄μ λͺ¨λΈμ μ§μμ μΌλ‘ μ‘°μ ν©λλ€.
- AI λ° λ¨Έμ λ¬λ: AIλ₯Ό μ¬μ©νμ¬ νμ₯ νλ‘κ·Έλ¨μ νλμ λΆμνκ³ , μ΄μμ κ°μ§νλ©°, μ μ± νμ₯ νλ‘κ·Έλ¨μ μ¬μ μ μλ³νλ λ°©λ²μ νμν©λλ€.
λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨μ μν κ²¬κ³ ν κΆν μμ€ν μ μν΄ λ·λ°μΉ¨λλ JavaScript API 보μ λͺ¨λΈμ μλμ μ΄κ³ μ§ννλ λΆμΌμ λλ€. μ΄λ κ°λ ₯ν μΉ κΈ°λ₯μ νμ±ννλ κ²κ³Ό μ μ¬μ μΈ νΌν΄λ‘λΆν° μ¬μ©μλ₯Ό 보νΈνλ κ² μ¬μ΄μ λμμλ μνΈ μμ©μ λλ€.
κ²°λ‘
λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨ κΆνμ λ¨μν κΈ°μ μ μΈ μΈλΆ μ¬νμ΄ μλλλ€. κ·Έκ²μ μΉ λ³΄μκ³Ό μ¬μ©μ κ°μΈ μ 보 보νΈμ μ€μν κΈ°λ₯μ λλ€. μ΄λ νλ μΉ κ²½νμ μ£Όλνλ κ°λ ₯ν JavaScript APIμ νμ₯ νλ‘κ·Έλ¨μ΄ μνΈ μμ©νλ λ°©μμ μ μ΄νλ νμμ μΈ λ¬Έμ§κΈ° μν μ ν©λλ€. μ΄λ¬ν κΆνμ μ΄ν΄ν¨μΌλ‘μ¨ μ¬μ©μμ κ°λ°μ λͺ¨λ λ μμ νκ³ , λ μμ νλ©°, λ μ λ’°ν μ μλ μΈν°λ·μ κΈ°μ¬ν μ μμ΅λλ€. μ΄λ¬ν κΆν λͺ¨λΈμ μ§μμ μΈ μ§νλ λμμμ΄ λ³ννλ λμ§νΈ μΈκ³μμ μ¬μ©μλ₯Ό 보νΈνλ €λ λΈλΌμ°μ 곡κΈμ 체μ μ§μμ μΈ λ Έλ ₯μ λ°μν©λλ€.