크로스 브라우저 호환성 가이드
작성일: 2026-04-06 Last Updated: 2026-04-06 대상: Chrome, Firefox, Edge, Safari 확장 프로그램 호환성
공통 문서 참조: 테스트는
../common/testing.md, CI/CD는../common/ci-cd.md참조
목차
- 브라우저 호환성 매트릭스
- WXT 프레임워크 활용
- webextension-polyfill
- API 차이 대응 패턴
- 브라우저별 매니페스트 생성
- 테스트 매트릭스
- 스토어별 배포 파이프라인
- 체크리스트
1. 브라우저 호환성 매트릭스
Manifest V3 지원 현황
| 기능 | Chrome | Firefox | Edge | Safari |
|---|---|---|---|---|
| Manifest V3 | O (88+) | O (109+) | O (88+) | O (15.4+) |
| Service Worker | O | O (120+) | O | O |
chrome.action | O | O | O | O |
chrome.storage | O | O | O | O |
chrome.scripting | O | O (102+) | O | O |
chrome.sidePanel | O (114+) | O (125+) | O (114+) | X |
chrome.offscreen | O (109+) | X | O (109+) | X |
chrome.declarativeNetRequest | O | O (113+) | O | O (제한적) |
chrome.userScripts | O (120+) | O (123+) | O (120+) | X |
chrome.tabGroups | O | X | O | X |
확장 스토어 비교
| 항목 | Chrome Web Store | Firefox AMO | Edge Add-ons | Safari Extensions |
|---|---|---|---|---|
| 등록비 | $5 (1회) | 무료 | 무료 | $99/년 (Apple Dev) |
| 매니페스트 | MV3 필수 | MV2/MV3 | MV3 (CWS 호환) | MV3 (Xcode 변환) |
| 심사 속도 | 수 시간-수 일 | 수 일-수 주 | 수 시간-수 일 | 수 일 |
| 소스 제출 | X | 필수 (빌드 시) | X | X (App Review) |
| 자동 업데이트 | O | O | O | O (App Store) |
| 사용자 수 | 최대 | 중간 | 중간 | 소 |
브라우저 엔진 관계
+-- Chromium --+
| |
+-- Chrome | Firefox (Gecko) Safari (WebKit)
+-- Edge |
+-- Opera |
+-- Brave |
+-- Vivaldi |
+--------------+
Edge: Chrome과 거의 동일 (Chromium 기반). CWS에서 직접 설치도 가능. Safari: Xcode 변환 필요. 별도 개발 비용 고려.
2. WXT 프레임워크 활용
WXT 소개
WXT는 Vite 기반 브라우저 확장 개발 프레임워크. 크로스 브라우저 빌드, HMR, 자동 매니페스트 생성을 지원.
프로젝트 초기화
# 새 프로젝트
npx wxt@latest init my-extension
cd my-extension
npm install
# 개발 모드 (Chrome)
npm run dev
# 개발 모드 (Firefox)
npm run dev:firefox
WXT 크로스 브라우저 설정
// wxt.config.ts
import { defineConfig } from 'wxt';
export default defineConfig({
modules: ['@wxt-dev/module-react'],
manifest: {
name: '__MSG_extensionName__',
description: '__MSG_extensionDescription__',
default_locale: 'en',
permissions: ['storage', 'activeTab'],
},
// 브라우저별 추가 설정
// WXT가 빌드 시 자동으로 브라우저별 매니페스트 생성
});
WXT 브라우저 분기 패턴
// WXT 내장 유틸리티 (권장)
import { browser } from 'wxt/browser';
// browser 객체는 자동으로 적절한 네임스페이스 사용
const data = await browser.storage.local.get('key');
// 현재 브라우저 감지
import { getBrowser } from 'wxt/utils';
const currentBrowser = getBrowser(); // 'chrome' | 'firefox' | 'edge' | 'safari'
if (currentBrowser === 'firefox') {
// Firefox 전용 처리
}
WXT 빌드 명령
# 브라우저별 빌드
npm run build # Chrome (기본)
npm run build:firefox # Firefox
# 또는 직접 지정
wxt build --browser chrome
wxt build --browser firefox
wxt build --browser edge
wxt build --browser safari
# 모든 브라우저 빌드 (CI 용)
wxt build --browser chrome && \
wxt build --browser firefox && \
wxt build --browser edge
# ZIP 패키징 (스토어 업로드용)
wxt zip --browser chrome
wxt zip --browser firefox
WXT 빌드 출력
.output/
+-- chrome-mv3/ # Chrome/Edge 빌드
| +-- manifest.json # Chrome 형식 MV3
| +-- ...
+-- firefox-mv3/ # Firefox 빌드
| +-- manifest.json # Firefox 형식 MV3
| +-- ...
WXT vs 기타 도구 비교
| 기능 | WXT | Plasmo | 직접 Vite |
|---|---|---|---|
| HMR | O | O | 수동 설정 |
| 자동 매니페스트 | O | O | X |
| 크로스 브라우저 빌드 | O | O | 수동 |
| React/Vue/Svelte | O | O | O |
| TypeScript | O | O | O |
| Content Script HMR | O | 제한적 | X |
| 자체 테스트 유틸 | O | X | X |
| 러닝커브 | 낮음 | 낮음 | 높음 |
| 프로젝트 권장 | O | O | X |