본문 바로가기
C.W.K.
Stream
Lesson 03 of 05 · published

Web Store submission — Listing / review / privacy policy

~13 min · web-store, submission, review, privacy-policy

Level 0Extension 입덕
0 XP0/56 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete
"zip을 올리면 Chrome이 들여다봐. 어떤 날은 두 시간 만에 올라가고, 어떤 날은 일주일이 걸려. 이 lesson은 대시보드가 뭘 달라고 하는지, 제출이 어디서 막히는지, 그리고 심사자가 진짜로 읽는 개인정보 처리방침이 어떤 건지에 대한 얘기야."

Dashboard 설정

chrome.google.com/webstore/devconsole. 일회성 설정:

  • Developer registration을 끝내고 current dashboard가 표시하는 signup fee를 내. Release instruction에 금액을 hardcode하지 마. Account나 지역 요구는 바뀔 수 있어.
  • Developer email 검증 (Google이 표준 email loop 통해 검증).
  • Monetize 계획 있으면 payment profile 추가 (free extension은 건너뛰기 가능).

Dashboard가 extension list. 각 새 extension이 만들고 zip upload 하는 새 "Item".

Listing field

Extension 당 채울 것:

  • 제목 — user가 검색 결과에서 보게 될 이름이야. 최대 45 자. 무슨 물건인지까지 담는 게 좋아. 'ClipDeck' 보다는 'ClipDeck — save text clips' 가 낫지.
  • Summary — 한 줄 pitch. 최대 132 자. 검색-결과 subhead.
  • Description — long-form. Markdown 비슷. 뭘 하는지, 뭘 안 하는지, 누구 위한 건지.
  • Category — Productivity / Communication / Developer Tools 등. 가장 정확한 거 선택. reviewer가 틀리면 re-categorize.
  • 언어 — 등록 정보의 기준 언어야. 나중에 Web Store의 번역 기능으로 늘리거나, manifest의 _locales 폴더로 직접 다국어를 붙일 수 있어.
  • Visibility — Public / Unlisted / Private (Google Workspace only). Submission 전 선택. 나중에 변경 가능하지만 각 변경이 review 재trigger.
  • Permission justification — manifest가 선언하는 각 permission에, 왜인지 한 문단 설명. Reviewer가 이거 read. 모호한 답 ('feature 위해 필요')가 hold. specific 한 거 ('downloads가 popup에서 trigger 되는 Export Clips feature에 사용')가 통과.

Privacy Policy URL

user 데이터를 다루는 extension 이라면 전부 있어야 해. chrome.storage.local만 써도 마찬가지고. 최소한 이 정도는 담아야 말이 돼:

  • Extension이 뭘 collect 하는지 (clip text / source URL / source title).
  • 그 data가 어디 사는지 (user 머신에 local, chrome.storage.local에).
  • 어디든 transmit 되는지 (true 면 "안 됨" 이 완전 받아들일 만한 답).
  • User가 어떻게 제어하는지 (export, delete, uninstall이 모든 것 제거).

정책 문서는 내가 관리하는 도메인에 올려 둬 (GitHub Pages 로도 충분해). 솔직하게 쓴 두 문단이면 돼. Chrome 심사자가 보고 싶은 건 사실이지 GDPR 상용구가 아니거든. 남의 템플릿을 갖다 붙이지 마. 심사자는 알아봐.

Single Purpose Policy

Chrome이 여러 무관 feature bundle 하는 extension 거부. 'ClipDeck — save text clips, browse them in a side panel' 가 한 목적, 네 interface (popup / panel / hotkey / omnibox). 'ClipDeck Plus — save clips AND generate passwords AND auto-translate' 가 세 목적. 세 extension으로 ship.

판단이 가끔 fuzzy. Clip도 export 하는 clip-saver는 fine (export가 clip lifecycle 일부). Email도 읽는 clip-saver는 안 됨 (email이 다른 domain). 헷갈리면, 목적 한 문장으로 쓰고 물어 봐: user가 그 문장에서 모든 feature 기대할까? Yes 면 fine. 놀랄 거면 split.

Review process

Submission이 자동화 체크 먼저 (분 안에), 다음 human review (시간에서 일까지). 자동화 체크: manifest validation / malware scanning / permission consistency. Human review: description read, screenshot click, extension install, exercise. 뭐든 불명확하면 원하는 것 설명하는 note와 submission hold. dashboard에서 응답하고 re-submit.

흔한 hold:

  • 권한 설명이 두루뭉술할 때 — 심사자가 이 권한이 왜 필요한지 끝내 알 수 없거든.
  • Privacy policy mismatch — manifest가 policy가 언급 안 하는 거 collect.
  • Description이 behavior와 mismatch — 동작 안 하는 기술된 feature, 또는 기술 안 된 동작하는 feature.
  • Trademark 이름 — permission 없이 title에 'Chrome' / 'Google' / 유명 trademark 사용.
  • Spam-like wording — description의 keyword 채우기 ('best fastest most amazing clip saver').

Update cadence

각 update가 fresh review. Patch가 보통 시간 안에 통과. permission 변경이 더 깊은 look trigger. 매 upload 마다 manifest version bump — Chrome이 같은 version의 re-upload 거부. Semver 느슨하게 사용: 1.0.0, 1.0.1, 1.1.0 등.

정직한 description + tight permission 정당화 + 정확한 privacy policy = 빠른 review. 모호하거나 boilerplate가 hold. Review가 human read, robot pass 아님. human 위해 작성.
더 이상 못 하는 것. Web Store는 새 제출로 들어오는 MV2 extension을 더 이상 받지 않아 (이미 올라와 있던 MV2 extension도 걷어내는 중). Remote code execution 금지 (eval 없음, remote-host script 없음). User data 판매가 영구 ban 사유. 회색 영역 아님 — 이 list의 어느 것이든 시도하는 submission 즉시 bounce.

Code

PRIVACY.md — local-only extension 위한 minimum 정직 privacy policy·markdown
# ClipDeck Privacy Policy

*Last updated: 2026-05-16*

ClipDeck is a Chrome extension that saves text clips selected from web pages.
This policy describes what data ClipDeck handles and where that data lives.

## What we collect

When you save a clip, ClipDeck stores the following locally on your device:

- The selected text.
- The URL of the page you were on.
- The page title at the time you saved.
- The timestamp of when you saved.
- (Optional) A small cropped screenshot of the highlighted region.

ClipDeck also keeps tab-pause state for the current browser session and
computes the daily toolbar count from locally stored clip timestamps.

## Where the data lives

Clip text and metadata are stored in `chrome.storage.local`, a per-machine,
per-Chrome-profile area. Tab-pause IDs live only in `chrome.storage.session`. The data never leaves your
machine. ClipDeck does not contact any server, does not call any analytics
service, and does not phone home in any form.

## How you control it

- Open the side panel to view, search, edit, or delete any clip.
- Click 'Export Clips' in the popup to download all clips as a JSON file.
- Click 'Delete' on any clip; a 5-second undo window applies.
- Uninstall ClipDeck from chrome://extensions to remove everything ClipDeck
  ever stored on your machine. There is no data we can or would retain.

## Updates to this policy

If ClipDeck ever changes what it collects or where it sends data, this policy
will be updated and the changelog noted in the ClipDeck release notes.

Questions: contact <your-email@example.com>.
manifest.json — privacy policy와 listing 매칭하는 description·json
{
  "description": "Save text clips from any page. Search and copy them from a persistent side panel. All data stays on your device."
}

External links

Exercise

실제로 submit 안 해도 dashboard walk: chrome.google.com/webstore/devconsole 열기, publish 원하는 Google 계정으로 sign in, 금액을 가정하지 말고 current registration requirement 확인, 'New item' click. clipdeck/ 디렉토리의 zip upload, validation pass만 보기 — dashboard가 manifest parse, 선언된 permission list, 정당화 요청. Title / summary / description / category draft 채우기. GitHub Pages 나 제어하는 URL에 privacy policy host 하고 URL을 dashboard에 paste. Submit 안 함. cancel out. Dry-run이 실제 submission이 요구할 data 노출, real push 전 prep 가능.
Hint
Dashboard가 'invalid manifest' 로 zip 거부하면, zip을 local에서 열어 manifest.json이 zip의 ROOT 인지 확인 (clipdeck/ subdirectory 안 아님). 흔한 zip 실수: content 대신 parent folder zip. Permission 정당화 text box가 비면, 예상 — 각자 작성해야. privacy policy의 bullet을 시작점으로 복사. Privacy policy URL 없으면, PRIVACY.md를 github repo에 push 하고 Pages 활성화 — 5 분 걸림, dashboard가 받는 실제 https URL 줘.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.