개발이야기/Web

부가 기능, 그리고 부가 기능 ID

paperboxturtle 2021. 1. 23. 17:49
본 글은 Mozilla 재단에서 제공하는 Firefox Extension Workshop 웹 사이트의 게시글을 번역한 것입니다. 원 게시글의 라이선스는 CC-BY-SA 3.0 Unported이며, Mozilla.org 라이선스 정책 상 CC-BY-SA 3.0 Unported 혹은 이후 버전을 사용할 수 있으므로 이 글은 하단 라이선스 표기와 관계 없이 CC-BY-SA 3.0 Unported로 배포됩니다.
전체 기여자 및 원본 글은 여기에서 확인하실 수 있습니다.

Firefox 부가 기능은 다른 Firefox 부가 기능과 구별하기 위한 각각의 ID가 있습니다. 이 글은 WebExtension API를 이용하여 제작된 부가 기능에 add-on ID가 어떻게 작동하는지에 대한 내용을 설명합니다.

Firefox에서 사용하는 부가 기능은 모두 Firefox 내부 및 addons.mozilla.org (AMO) 웹사이트에서 사용하는 고유한 식별자를 가지고 있습니다. 예를 들어, Firefox는 설치된 부가 기능에 업데이트가 있는지 확인하거나 어떤 항목(예를 들면 저장된 데이터)을 해당 부가 기능으로 제어하고 있는지 확인하기 위해 사용합니다.

오래된 형태의 Firefox 부가 기능은 개발자가 반드시 부가 기능의 ID를 명시적으로 설정해두어야만 했습니다. XUL/XPCOM 부가 기능은 설치 용도의 manifest 파일[각주:1]에 ID를 설정해야 했으며, SDK 부가기능은 package.json 파일[각주:2]에 명시해야 했습니다.

그러나, Firefox 버전 48부터는 이렇게 ID를 명시하지 않아도 개발, 버그 수정, 배포 및 업데이트를 할 수 있도록 변경되었습니다.

주의: ID를 넣지 않고도 WebExtension 부가기능을 개발하거나 버그를 수정하는 기능은 Firefox 48부터 도입되었습니다. 이전 버전을 사용할 필요가 있다면, 반드시 browser_specific_settings 키를 사용하여 ID를 명시해야 합니다.

부가 기능 ID가 없을 때의 기본 작업 흐름

부가 기능은 manifest.json 내의 browser_specific_settings 키를 사용하여 부가 기능 ID를 명시적으로 설정합니다. 그러나, 이 키는 보통 선택 옵션입니다. 설정하지 않기를 원한다고 해도 일반적으로 ID 없이 개발, 버그 수정, 배포, 업데이트하는 것이 가능합니다. 이렇게 했을 때 한 가지 장점은 바로 Google Chrome이 browser_specific_settings 키를 인식하지 못하며 넣게 되면 경고를 띄울 것이라는 점입니다.

그러나, 이런 이점에도 불구하고 몇몇 WebExtension API는 부가기능 ID를 사용하며 다음 브라우저 세션까지 동일할 것입니다.[각주:3] 이런 API를 Firefox에서 사용할 필요가 있을 때에는, 반드시 browser_specific_settings 키를 사용하여 부가 기능 ID를 명시적으로 설정해야 합니다. 좀 더 자세히 알고 싶다면 아래 '부가 기능 ID가 필요할 때'를 참고하세요.

개발 및 버그 수정

Firefox 버전 48부터, manifest.json 내에 ID가 명시되어 있지 않다면 about:debugging 페이지에서 부가 기능을 설치할 때 랜덤으로 생성된 임시 ID를 부여합니다. "새로 고침" 버튼을 눌러 부가 기능을 다시 불러온다면, 같은 ID가 사용됩니다. 그러나 Firefox를 재시작하고 부가 기능을 다시 불러온다면, 새로운 ID를 부여받을 것입니다.

만약 부가 기능을 .xpi 혹은 .zip 파일 형태로 about:addons 페이지에서 설치한다면, 작동하지 않을 것입니다. 이런 상황에서는 manifest.json 파일 내에 browser_specific_settings 키를 추가하세요.

배포하기

부가 기능을 완성한 후에는, 부가 기능을 패키지로 묶어서 검토 및 서명 작업을 위해 AMO에 제출할 수 있습니다. 만약 올린 부가 기능이 고유한 ID를 가지고 있지 않다면, AMO는 고유한 값을 부여해 줄 것입니다. 이 과정은 제출 후 부가 기능이 영구적인 ID를 할당받는 시점에서만 이뤄지며, 추후 ID는 서명된 부가 기능 패키지에 포함됩니다.

주의하실 점은 이렇게 영구적으로 ID가 할당되고 나면, 과거의 Add-on SDK나 XUL/XPCOM 형태로 업데이트할 수 없다는 것입니다.[각주:4] Add-on SDK, XUL/XPCOM 플랫폼으로 전환을 원하신다면, 반드시 새로운 ID로 새로운 부가 기능을 제출해야 합니다.

업데이트

업데이트 작업을 하는 시점에서도, 일반적으로 ID를 가지고 무언가를 할 필요는 없습니다. ID 없이 개발을 지속하실 수 있으며, 업데이트가 필요할 때에는 부가 기능의 AMO 페이지에 접속하여 새로운 버전을 올리시면 됩니다. 이는 그 페이지로 부가 기능을 올렸을 때, ID가 없어도 AMO는 그 부가 기능의 업데이트 버전이라는 것을 알기 때문입니다.

부가 기능을 수동으로 AMO에서 제공하는 각 부가 기능의 페이지를 사용하여 업데이트하는 경우, 이 작업은 필수적입니다. 만약 다른 방법으로 제출하게 되면, AMO가 제출된 부가 기능이 기존에 존재하는 부가 기능의 업데이트라는 것을 알지 못해 새로운 부가 기능으로 간주할 것입니다.

이런 방식으로 업데이트하는 것은 XUL/XPCOM과 같은 옛날 형식의 부가 기능을 WebExtension API로 업데이트할 때에도 사용하실 수 있습니다. AMO에서 제공하는 구형 부가 기능의 페이지에 접속하신 후, 새 부가 기능을 올리시면 구 버전의 업데이트로 인식할 것입니다.

부가 기능 ID가 필요할 때

 

  1. 역자 주: 현재는 삭제된 문서입니다. [본문으로]
  2. 역자 주: 현재는 삭제된 문서입니다. [본문으로]
  3. 역자 주: expect it to be the same from one browser session to the next가 원문이며, 브라우저를 재실행하더라도 다음 세션까지 ID가 동일할 것이라는 내용인 것 같습니다. [본문으로]
  4. 역자 주: ID를 명시하지 않는 방법은 WebExtension API라는 최신 기술에서만 지원되므로, 한 번 ID가 할당되면 그 ID로는 과거 사용했던 다른 기술로 만든 부가 기능을 올릴 수 없다는 의미입니다. 더 쉽게는, 업데이트라는 형태로 '바꿔치기' 할 수 없다는 뜻이라고 볼 수 있겠습니다. [본문으로]