Firefox Add-on (AMO) 배포 가이드
작성일: 2026-04-06 Last Updated: 2026-04-06 대상: Firefox Add-ons (addons.mozilla.org, AMO)
공통 문서 참조: CI/CD 파이프라인은
../common/ci-cd.md, Chrome 배포는chrome-store.md참조
목차
- AMO 개발자 등록
- Firefox vs Chrome API 차이점
- browser vs chrome 네임스페이스
- Manifest V3 Firefox 대응
- AMO 심사 기준
- 소스코드 제출 요구사항
- Firefox Android 지원
- 배포 자동화 (web-ext)
- 체크리스트
1. AMO 개발자 등록
등록 절차
| 단계 | 작업 | 비용 |
|---|---|---|
| 1 | Firefox 계정 생성 | 무료 |
| 2 | addons.mozilla.org 접속 | - |
| 3 | 개발자 동의서 수락 | 무료 |
| 4 | 확장 업로드 | 무료 |
Chrome Web Store와 달리 등록비 없음. 무료로 배포 가능.
Self-Distribution vs AMO 배포
| 옵션 | 설명 | 자동 업데이트 |
|---|---|---|
| AMO Listed | AMO에 리스팅 (검색 가능) | O (AMO 통해) |
| AMO Unlisted | AMO에서 서명만 (검색 불가) | X (직접 구현) |
| Self-Distribution | 자체 서버에서 배포 | X (update_url 필요) |
중요: Firefox는 AMO 서명 없이는 일반 사용자 설치 불가 (개발자/Nightly 제외).
2. Firefox vs Chrome API 차이점
API 호환성 매트릭스
| API | Chrome | Firefox | 차이점 |
|---|---|---|---|
chrome.storage | O | O | 동일 |
chrome.alarms | O | O | 동일 |
chrome.tabs | O | O | 일부 옵션 차이 |
chrome.scripting | O | O | MV3에서 동일 |
chrome.sidePanel | O | O (MV3) | Firefox는 sidebar_action 대신 sidePanel (125+) |
chrome.action | O | O (MV3) | MV2: browser_action |
chrome.offscreen | O | X | Firefox 미지원, 대안 필요 |
chrome.declarativeNetRequest | O | O | 규칙 수 제한 차이 |
chrome.userScripts | O | O | Firefox가 먼저 지원 |
| Service Worker (Background) | O (MV3) | O (MV3) | Firefox 120+에서 지원 |
| Background Page (persistent) | X (MV3) | O (MV2) | Firefox MV2는 여전히 유효 |
Firefox 전용 API
| API | 용도 | Chrome 대안 |
|---|---|---|
browser.browserSettings | 브라우저 설정 접근 | 없음 |
browser.pkcs11 | 하드웨어 보안 모듈 | 없음 |
browser.dns | DNS 조회 | 없음 |
browser.proxy | 프록시 설정 (고급) | 제한적 |
Chrome 전용 API (Firefox 미지원)
| API | 용도 | Firefox 대안 |
|---|---|---|
chrome.offscreen | DOM API 백그라운드 사용 | Background Page (MV2) 또는 별도 탭 |
chrome.enterprise.* | 기업 관리 | 없음 |
chrome.instanceID | 푸시 알림 | Firefox Push API |
chrome.gcm | Google Cloud Messaging | Web Push API |
Manifest 차이점
// Chrome manifest.json (MV3)
{
"manifest_version": 3,
"background": {
"service_worker": "background.js",
"type": "module"
}
}
// Firefox manifest.json (MV3, Firefox 120+)
{
"manifest_version": 3,
"background": {
"scripts": ["background.js"],
"type": "module"
},
"browser_specific_settings": {
"gecko": {
"id": "extension@example.com",
"strict_min_version": "120.0"
}
}
}
핵심 차이: Firefox MV3는
service_worker대신scripts배열을 사용. Firefox에서 도 Service Worker 방식으로 동작하지만 선언 방식이 다름.
3. browser vs chrome 네임스페이스
문제
- Chrome:
chrome.*(콜백 기반, MV3에서 Promise도 지원) - Firefox:
browser.*(Promise 기반),chrome.*도 호환 지원 - Edge:
chrome.*(Chrome과 동일)
해결 방법 1: WXT 사용 (권장)
// WXT는 자동으로 브라우저별 네임스페이스 처리
// entrypoints/background.ts
export default defineBackground(() => {
// WXT가 내부적으로 polyfill 처리
browser.storage.local.get('key').then((result) => {
console.log(result);
});
});
해결 방법 2: webextension-polyfill
npm install webextension-polyfill
npm install -D @types/webextension-polyfill
// lib/browser.ts
import browser from 'webextension-polyfill';
// Chrome에서도 browser.* (Promise 기반)로 통일
const result = await browser.storage.local.get('key');
const tabs = await browser.tabs.query({ active: true, currentWindow: true });
해결 방법 3: Feature Detection (최소 의존성)
// lib/browser-compat.ts
const api = typeof browser !== 'undefined' ? browser : chrome;
// Promise 래퍼 (chrome.* 콜백 → Promise 변환)
function promisify<T>(method: Function, ...args: unknown[]): Promise<T> {
return new Promise((resolve, reject) => {
method(...args, (result: T) => {
if (chrome.runtime.lastError) {
reject(new Error(chrome.runtime.lastError.message));
} else {
resolve(result);
}
});
});
}
네임스페이스 전략 비교
| 방법 | 장점 | 단점 | 권장 |
|---|---|---|---|
| WXT | 자동 처리, 빌드 최적화 | WXT 의존 | O (프로젝트 기본) |
| webextension-polyfill | 표준, 안정적 | 번들 크기 증가 (~20KB) | O (WXT 미사용 시) |
| Feature Detection | 의존성 없음 | 직접 유지보수 필요 | X |
4. Manifest V3 Firefox 대응
Firefox MV3 지원 현황 (2026 기준)
| 기능 | 최소 버전 | 상태 |
|---|---|---|
| Manifest V3 기본 | Firefox 109 | 안정 |
| Background Service Worker | Firefox 120 | 안정 |
declarativeNetRequest | Firefox 113 | 안정 |
scripting API | Firefox 102 | 안정 |
sidePanel API | Firefox 125 | 안정 |
| Event Pages (MV3 대안) | Firefox 109 | 안정 |