스크래치에서 Firefox New Tab Extension을 만들며 배운 5가지 교훈

발행: (2026년 5월 4일 AM 05:51 GMT+9)
5 분 소요
원문: Dev.to

Source: Dev.to

manifest_version: 3 전환은 대부분 원활하지만, Service Worker 함정에 주의

Firefox가 이제 Manifest V3를 지원하고, 나는 전면적으로 적용하기로 했습니다. 대부분은 그대로 작동합니다 — 선언형 콘텐츠 스크립트, 새로운 권한 모델, 더 깔끔한 백그라운드 처리 등.

하지만 Service Worker에는 중요한 제한이 있습니다: 30초가 지나면 비활성화됩니다. 날씨 데이터를 주기적으로 갱신해야 하는 새 탭 확장 프로그램에서는 이것이 문제됩니다.

해결책: 지속적인 백그라운드 스케줄이 아니라 새 탭이 열릴 때마다 날씨 데이터를 가져옵니다. 결과를 localStorage에 캐시하고, 캐시된 데이터가 10분보다 오래됐을 때만 새로 고칩니다.

async function getWeather() {
  const cached = JSON.parse(localStorage.getItem('weatherCache') || '{}');
  const now = Date.now();

  if (cached.data && (now - cached.timestamp)  fetchWeatherByCoords(pos.coords),
  (err) => {
    // err.code === 1: User denied
    // err.code === 2: Position unavailable  
    // err.code === 3: Timeout
    showManualCityInput(
      err.code === 1
        ? 'Location blocked — enter your city manually'
        : 'Could not detect location'
    );
  },
  { timeout: 5000, maximumAge: 3600000 }
);

확장 프로그램에서 다크 모드 감지는 실제로 우아함

확장 프로그램에서 다크/라이트 모드 전환을 구현하는 것은 간단합니다. prefers-color-scheme 지원을 기본으로 제공받으며, 사용자 선호도를 저장할 옵션도 있습니다.

// Auto-detect system preference
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)');

// Apply theme
function applyTheme(dark) {
  document.documentElement.setAttribute('data-theme', dark ? 'dark' : 'light');
  localStorage.setItem('theme', dark ? 'dark' : 'light');
}

// Listen for system changes
prefersDark.addEventListener('change', (e) => applyTheme(e.matches));

// On load: check user preference first, then system
const savedTheme = localStorage.getItem('theme');
if (savedTheme) {
  applyTheme(savedTheme === 'dark');
} else {
  applyTheme(prefersDark.matches);
}

사용자는 OS 설정과 일치하는 “그대로 작동” 경험을 얻으며, 필요 시 직접 오버라이드할 수 있습니다.


AMO 리뷰는 실제로 꽤 빠르고 (사람이) 친절합니다

Firefox Add‑On (AMO) 리뷰 과정이 몇 주가 걸릴 거라 예상했지만, 내 경험은 놀라울 정도로 좋았습니다:

  • 초기 리뷰: 약 3일
  • 리뷰어 피드백: 구체적이고 실행 가능 (내가 놓친 eval() 호출 하나를 지적)
  • 추가 리뷰: 약 1일

리뷰어는 시계 시간 값을 설정할 때 innerHTML을 사용하고 있다고 지적했는데(내부 데이터라 하더라도 불필요한 DOM 위험), textContent로 바꾸라고 했습니다. 타당한 지적이었습니다.

리뷰 속도를 높이는 팁:

  • 깔끔하고 읽기 쉬운 코드 작성
  • 필요한 권한만 최소화
  • 원격 코드 실행 피하기
  • 난독화 금지
  • 압축한다면 소스맵 포함

결과

이 모든 과정을 거쳐 Weather & Clock Dashboard 를 출시했습니다 — 오픈 소스(MIT), 계정 필요 없이 바로 사용할 수 있으며 실제로 유용합니다.

Firefox 확장 프로그램을 만든다면, 개발자 경험이 꽤 탄탄합니다. API 문서는 최근 몇 년간 크게 개선됐고, Mozilla 개발자 커뮤니티도 도움이 됩니다.

Built with: Pure HTML/CSS/JS · No build step · MIT Licensed

0 조회
Back to Blog

관련 글

더 보기 »