피드로 돌아가기
Dev.toFrontend
원문 읽기
Manifest V3 마이그레이션 기반 Stateless 아키텍처 전환 및 17개 확장 프로그램 최적화
Manifest V3 Migration Pitfalls — Lessons from 17 Chrome Extensions
AI 요약
Context
기존 Manifest V2의 Persistent Background Page 기반 상태 유지 방식이 MV3의 Service Worker 도입으로 인한 비지속성 모델로 변경됨. 이로 인해 약 30초의 유휴 시간 후 워커가 종료되며 전역 변수 기반의 상태가 소실되는 런타임 불안정성 발생.
Technical Solution
- 전역 변수 기반 상태 관리를 제거하고 chrome.storage.local을 통한 Persistent Storage 구조로 전환하여 워커 재시작 후에도 상태 연속성 확보
- Blocking 방식의 webRequest API를 declarativeNetRequest 기반의 정적/동적 규칙 기반으로 교체하여 브라우저 엔진 레벨의 요청 제어 구현
- Service Worker의 비활성 상태에서 발생하는 sendMessage 요청의 무한 대기를 방지하기 위해 Timeout 설정 및 Local Cache Fallback 로직 도입
- chrome.tabs.executeScript를 chrome.scripting.executeScript로 대체하고 직렬화 가능한 함수(Serializable Function) 및 args 파라미터를 통한 데이터 전달 구조 설계
- 1분 단위의 최소 Alarm 주기 제약에 대응하여 정밀 타이밍이 필요한 로직에 한해 Service Worker 내부 setTimeout을 활용한 하이브리드 스케줄링 적용
- 과도한 권한 요청으로 인한 심사 거부 방지를 위해 activeTab 중심의 최소 권한 원칙(Principle of Least Privilege) 적용 및 번들 사이즈 최적화
실천 포인트
- 모든 전역 상태를 chrome.storage로 이전하여 Stateless 환경 검증 - runtime.sendMessage 호출 시 반드시 Timeout 및 Fallback 처리 구현 - webRequest 기반 차단 로직을 declarativeNetRequest의 dynamic rules(최대 5,000개)로 전환 - chrome://serviceworker-internals를 통한 강제 종료 시나리오 테스트 수행 - Broad Permissions(<all_urls>)를 activeTab 및 구체적 호스트 권한으로 세분화