Skip to content

Latest commit

ย 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

์‹ํƒ๋ณด๋กœ ์ ‘์†ํ•˜๊ธฐ (TableCloth Chrome Extension)

โš ๏ธ ํ”„๋ฆฌ๋ทฐ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. ์•„์ง Chrome ์›น ์Šคํ† ์–ด์— ๋“ฑ๋ก๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉฐ, ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ๋กœ ์ง์ ‘ ๋ถˆ๋Ÿฌ์™€ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋™์ž‘๊ณผ ํ™”๋ฉด ๊ตฌ์„ฑ์ด ์˜ˆ๊ณ  ์—†์ด ๋ฐ”๋€” ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ํƒ๋ณด(TableCloth) ์นดํƒˆ๋กœ๊ทธ์— ๋“ฑ๋ก๋œ ์€ํ–‰๊ณผ ๊ณต๊ณต ๊ธฐ๊ด€ ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•˜๋ฉด ํŽ˜์ด์ง€ ์ƒ๋‹จ์— "์‹ํƒ๋ณด๋กœ ์ ‘์†ํ•˜๊ธฐ" ์•ˆ๋‚ด ๋ง‰๋Œ€๋ฅผ ๋„์šฐ๋Š” Chrome ํ™•์žฅ(Manifest V3) ์ž…๋‹ˆ๋‹ค. ์•ˆ๋‚ด ๋ง‰๋Œ€์˜ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋‹ค์Œ ๋‘ ๊ฒฝ๋กœ ์ค‘ ํ•˜๋‚˜๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

  • ์‹ํƒ๋ณด ์„ค์น˜ํŒ์ด ์žˆ์œผ๋ฉด tablecloth: ๋”ฅ๋งํฌ๋กœ ๋ณด๊ณ  ์žˆ๋˜ ํŽ˜์ด์ง€๋ฅผ ๊ทธ๋Œ€๋กœ ์ƒŒ๋“œ๋ฐ•์Šค์—์„œ ์—ฝ๋‹ˆ๋‹ค. ์ด๋•Œ๋Š” ํŒŒ์ผ์„ ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์„ค์น˜ํŒ์ด ์—†์œผ๋ฉด ๋ฌด์„ค์น˜ ์‹ํƒ๋ณด์šฉ .wsb ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ๋‚ด๋ ค์ค๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์„ ๋”๋ธ”ํด๋ฆญํ•˜๋ฉด Windows Sandbox๊ฐ€ ์—ด๋ฆฌ๊ณ , ๊ทธ ์•ˆ์—์„œ ํ•ด๋‹น ์‚ฌ์ดํŠธ๊ฐ€ ๋ฏธ๋ฆฌ ์„ ํƒ๋œ ์ฑ„๋กœ ์‹ํƒ๋ณด๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ PC์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ์„ค์น˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

ํ•ญ๋ชฉ ์กฐ๊ฑด
์šด์˜์ฒด์ œ Windows 10 ๋˜๋Š” 11์˜ Pro ์ด์ƒ ๋ฒ„์ „์ด์–ด์•ผ ํ•˜๊ณ , Windows Sandbox ๊ธฐ๋Šฅ์ด ์ผœ์ ธ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋ธŒ๋ผ์šฐ์ € Chrome 108 ์ด์ƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
์‹ํƒ๋ณด (๋”ฅ๋งํฌ ๊ฒฝ๋กœ) ์ •์‹ ์ฑ„๋„์€ 1.20.10 ์ด์ƒ, ํ”„๋ฆฌ๋ทฐ ์ฑ„๋„์€ 1.21.0-preview.2 ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์‹ํƒ๋ณด (๋ฌด์„ค์น˜ .wsb ๊ฒฝ๋กœ) ๋”ฐ๋กœ ์„ค์น˜ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. ์ƒŒ๋“œ๋ฐ•์Šค๊ฐ€ ์ตœ์‹  ํฌํ„ฐ๋ธ” ๋นŒ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ๋ฐ›์•„ ์˜ต๋‹ˆ๋‹ค.

์‹ํƒ๋ณด ๋ฒ„์ „ ์กฐ๊ฑด์€ ๋”ฅ๋งํฌ(tablecloth:) ๊ฒฝ๋กœ์—๋งŒ ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฒ„์ „๋ถ€ํ„ฐ tablecloth: URI ์Šคํ‚ด ๋“ฑ๋ก๊ณผ ๋Œ€์ƒ URL ๊ฒŒ์ดํŠธ(CatalogTargetUrlMatcher)๊ฐ€ ๋“ค์–ด๊ฐ”๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋” ๋‚ฎ์€ ๋ฒ„์ „์„ ์“ฐ๊ณ  ์žˆ๋‹ค๋ฉด ๋”ฅ๋งํฌ๋Š” ์•„๋ฌด ๋ฐ˜์‘์ด ์—†์œผ๋ฏ€๋กœ, ์•ˆ๋‚ด ๋ง‰๋Œ€๊ฐ€ ์•Œ๋ ค ์ฃผ๋Š” ๋Œ€๋กœ ๋ฌด์„ค์น˜ .wsb ๊ฒฝ๋กœ๋ฅผ ์“ฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ทผ๊ฑฐ๋กœ ์‚ผ์€ ๊ทœ๊ฒฉ

์ด ํ™•์žฅ์ด ๋งŒ๋“ค์–ด ๋‚ด๋Š” ๊ฒฐ๊ณผ๋ฌผ์€ ๋ชจ๋‘ ์‹ํƒ๋ณด ํ”„๋กœ์ ํŠธ๊ฐ€ ์ •ํ•œ ๊ณ„์•ฝ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ ์ถœ์ฒ˜
.wsb ๊ณ„์•ฝ (ํ”Œ๋ ˆ์ด์Šคํ™€๋” __SPORK_SITE_IDS__, ํ™˜๊ฒฝ ๋ณ€์ˆ˜ TABLECLOTH_SITE_IDS, ASCII ์ „์šฉ, ๋งˆ์šดํŠธ 0๊ฐœ) docs/PARAMETERIZED_WSB_SPEC.md ยง0.5
tablecloth: ๋”ฅ๋งํฌ ๊ณ„์•ฝ docs/DEEP_LINK_SCHEME.md
๋ฌด์„ค์น˜ ๋Ÿฐ์ฒ˜ ๋™์ž‘ (๊ณ ์ • URL์„ ๋จผ์ € ์“ฐ๊ณ  ์‹คํŒจํ•˜๋ฉด GitHub API๋กœ ๋„˜์–ด๊ฐ) docs/EXPRESS_BOOTSTRAPPER_DESIGN.md
.wsb ์›๋ณธ ํ…œํ”Œ๋ฆฟ tools/no-install/no-install-spork.wsb
์นดํƒˆ๋กœ๊ทธ ์Šคํ‚ค๋งˆ Catalog.xsd
์นดํƒˆ๋กœ๊ทธ ๋ฐ์ดํ„ฐ Catalog.xml

tools/verify.mjs๋Š” ์ด ํ™•์žฅ์ด ๋งŒ๋“  ์ผ๋ฐ˜ ๋Ÿฐ์ฒ˜ .wsb์˜ LogonCommand๊ฐ€ ์ƒ๋ฅ˜์˜ no-install-spork.wsb์™€ ๊ธ€์ž ๋‹จ์œ„๋กœ ๊ฐ™์€์ง€ ๋Œ€์กฐํ•ฉ๋‹ˆ๋‹ค. ๋”ฅ๋งํฌ ๋ณ€ํ˜•์€ ๊ทœ๊ฒฉ ยง0.5๋Œ€๋กœ $env:TABLECLOTH_SITE_IDS = ''<Id>''; ๋ฌธ์žฅ ํ•˜๋‚˜๋งŒ ๋ง๋ถ™์ž…๋‹ˆ๋‹ค.

... SecurityProtocol -bor 3072; $env:TABLECLOTH_SITE_IDS = ''WooriBank''; try { iex ((New-Object ...

๋™์ž‘ ๋ฐฉ์‹

์นดํƒˆ๋กœ๊ทธ XML โ”€โ”€โ–ถ ์Šค๋ƒ…์ƒท(JSON) โ”€โ”€โ–ถ ํ˜ธ์ŠคํŠธ, ๋“ฑ๋ก๊ฐ€๋Šฅ๋„๋ฉ”์ธ ์ธ๋ฑ์Šค
                                        โ”‚
ํŽ˜์ด์ง€ ์ ‘์† โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ–ถ ์ผ์น˜? โ”€โ”€โ–ถ ์ƒ๋‹จ ์•ˆ๋‚ด ๋ง‰๋Œ€
                                                        โ”‚ ํด๋ฆญ
                          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                          โ”‚
              โ‘  tablecloth:<๋ณด๋˜ URL>  โ”€โ”€โ–ถ ์„ค์น˜ํŒ ์‹ํƒ๋ณด๊ฐ€ ๊ทธ ํŽ˜์ด์ง€๋กœ ์ง„์ž… (ํŒŒ์ผ ์—†์Œ)
                          โ”‚
                          โ”‚ ์ฐฝ์ด ์—ด๋ฆฌ์ง€ ์•Š์•˜๋‹ค๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์•Œ๋ ค ์คŒ
                          โ–ผ
              โ‘ก .wsb ์ƒ์„ฑ โ”€โ”€โ–ถ ๋‹ค์šด๋กœ๋“œ โ”€โ”€โ–ถ ๋”๋ธ”ํด๋ฆญ โ”€โ”€โ–ถ Windows Sandbox โ”€โ”€โ–ถ ๋Œ€ํ‘œ URL๋กœ ์ง„์ž…

๋‘ ๊ฒฝ๋กœ์˜ ์ฐจ์ด๋Š” ์„ค์น˜ํŒ์ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์™€, ์–ด๋А ์ฃผ์†Œ๋กœ ์ง„์ž…ํ•˜๋Š”์ง€์ž…๋‹ˆ๋‹ค. โ‘ ์€ ํŒŒ์ผ์„ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ๋ณด๊ณ  ์žˆ๋˜ ํŽ˜์ด์ง€๋ฅผ ๊ทธ๋Œ€๋กœ ์—ด๋ฉฐ, โ‘ก๋Š” .wsb๋ฅผ ๋ฐ›์•„ ์นดํƒˆ๋กœ๊ทธ์˜ ๋Œ€ํ‘œ URL๋กœ ์ง„์ž…ํ•ฉ๋‹ˆ๋‹ค.

  • ๋„๋ฉ”์ธ์„ ํŒ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•. ์นดํƒˆ๋กœ๊ทธ Service/@Url์˜ ํ˜ธ์ŠคํŠธ์™€ ์ •ํ™•ํžˆ ๋น„๊ตํ•˜๊ณ , ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด ๋“ฑ๋ก๊ฐ€๋Šฅ๋„๋ฉ”์ธ(eTLD+1)์œผ๋กœ ๋‹ค์‹œ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ www.wooribank.com์ด ๋“ฑ๋ก๋˜์–ด ์žˆ์œผ๋ฉด pib.wooribank.com์—์„œ๋„ ์•ˆ๋‚ด ๋ง‰๋Œ€๊ฐ€ ๋œน๋‹ˆ๋‹ค. .kr์˜ 2๋‹จ๊ณ„ ์ ‘๋ฏธ์‚ฌ(co.kr, or.kr, go.kr ๋“ฑ)๋ฅผ ๋ชจ๋‘ ์•Œ๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์„œ๋กœ ๋ฌด๊ด€ํ•œ co.kr ์‚ฌ์ดํŠธ๋ผ๋ฆฌ ์ž˜๋ชป ๋ฌถ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ •ํ™•ํžˆ ์ผ์น˜ํ•  ๋•Œ๋งŒ ๋œจ๊ฒŒ ํ•˜๋ ค๋ฉด ์„ค์ •์—์„œ ๋Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์นดํƒˆ๋กœ๊ทธ๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•. 12์‹œ๊ฐ„๋งˆ๋‹ค ๊ณต์‹ ์นดํƒˆ๋กœ๊ทธ๋ฅผ ๋‹ค์‹œ ๋ฐ›์•„ ์˜ต๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ๊ฐ€ ์—†๊ฑฐ๋‚˜ ์ฒ˜์Œ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ํ™•์žฅ์— ํฌํ•จ๋œ ์Šค๋ƒ…์ƒท(data/catalog-snapshot.json)์„ ์”๋‹ˆ๋‹ค.
  • .wsb๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•. ๋ชจ๋“  ์ฒ˜๋ฆฌ๋ฅผ ํ™•์žฅ ์•ˆ์—์„œ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์ดํŠธ Id๋Š” ์นดํƒˆ๋กœ๊ทธ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์—์„œ๋งŒ ์˜ค๋ฉฐ, ^[A-Za-z0-9][A-Za-z0-9._-]*$๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ์ƒ์„ฑ ์ž์ฒด๋ฅผ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. PowerShell ์ธ์šฉ๋ถ€ํ˜ธ ์ฃผ์ž…์„ ๋ง‰๊ธฐ ์œ„ํ•œ ์žฅ์น˜์ž…๋‹ˆ๋‹ค.
  • ๋”ฅ๋งํฌ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•. ๋ณด๊ณ  ์žˆ๋˜ URL์ด ๊ฒŒ์ŠคํŠธ์˜ ๋„๋ฉ”์ธ ๊ฒŒ์ดํŠธ๋ฅผ ํ†ต๊ณผํ•  ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉด URL ํ˜•ํƒœ๋กœ ๋ณด๋‚ด๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์‚ฌ์ดํŠธ Id ํ˜•ํƒœ๋กœ ๋‚ฎ์ถฐ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜์—์„œ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

tablecloth: ๋”ฅ๋งํฌ์™€ ๊ฒŒ์ดํŠธ ์˜ˆ์ธก

๋”ฅ๋งํฌ๋Š” ๋‹ค์Œ ๋‘ ํ˜•ํƒœ๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ํ•˜๋‚˜์˜ ๋”ฅ๋งํฌ์— ๋‘˜์„ ํ•จ๊ป˜ ์‹ค์„ ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

ํ˜•ํƒœ ์˜ˆ ์ง„์ž… ์ฃผ์†Œ
๋Œ€์ƒ URL tablecloth:https://spib.wooribank.com/pib/Dream?... ์ง€์ •ํ•œ ๊ทธ ์ฃผ์†Œ๋กœ ์ง„์ž…ํ•ฉ๋‹ˆ๋‹ค.
์‚ฌ์ดํŠธ Id tablecloth:WooriBank ์นดํƒˆ๋กœ๊ทธ์˜ ๋Œ€ํ‘œ URL๋กœ ์ง„์ž…ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์ƒ URL์€ ๊ฒŒ์ŠคํŠธ์˜ CatalogTargetUrlMatcher๊ฐ€ ๋‹ค์‹œ ๊ฒ€์‚ฌํ•˜๋ฉฐ, ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•˜๋ฉด ์กฐ์šฉํžˆ ๋ฒ„๋ ค์ง‘๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ์‚ฌ์šฉ์ž๋Š” ์™œ ์—‰๋šฑํ•œ ํŽ˜์ด์ง€๊ฐ€ ์—ด๋ ธ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ src/common/deeplink.js๊ฐ€ ๊ทธ ํŒ์ • ๊ทœ์น™์„ ๊ทธ๋Œ€๋กœ ์˜ฎ๊ฒจ ๋ฏธ๋ฆฌ ์˜ˆ์ธกํ•˜๊ณ , ๋ฒ„๋ ค์งˆ URL์ด๋ผ๋ฉด ์• ์ดˆ์— ์‚ฌ์ดํŠธ Id ํ˜•ํƒœ๋กœ ๋‚ฎ์ถฐ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

npm run verify๋Š” ์ƒ๋ฅ˜ ๋ฌธ์„œ ยง6์˜ ์˜ˆ์‹œ๋ฅผ ๊ทธ๋Œ€๋กœ ์žฌํ˜„ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์ž…๋ ฅ ํŒ์ •
https://www.wooribank.com/ ํ›„๋ณด๊ฐ€ ํ•˜๋‚˜๋ฟ์ด๋ฏ€๋กœ WooriBank๋กœ ํ™•์ •ํ•ฉ๋‹ˆ๋‹ค.
https://spib.wooribank.com/โ€ฆ ๋™์ ์ด๋ฏ€๋กœ ์นดํƒˆ๋กœ๊ทธ์— ๋จผ์ € ์ ํžŒ WooriBank๋กœ ํ™•์ •ํ•ฉ๋‹ˆ๋‹ค.
https://ok.ibs.fsb.or.kr/ ๋ผ๋ฒจ์ด 3๊ฐœ ์ผ์น˜ํ•˜๋ฏ€๋กœ OKSavingsBank๋กœ ํ™•์ •ํ•ฉ๋‹ˆ๋‹ค.
https://www.fsb.or.kr/ ๋™์ ์ธ๋ฐ ์„œ๋น„์Šค๊ฐ€ 25๊ฐœ์ด๊ณ  ์„œ๋กœ ๋‹ค๋ฅธ ํšŒ์‚ฌ์ด๋ฏ€๋กœ URL์„ ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.
https://evilwooribank.com/ ๋ผ๋ฒจ ๋‹จ์œ„๋กœ ๋น„๊ตํ•˜๋ฏ€๋กœ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.
https://www.wooribank.com@evil.example/ ์ž๊ฒฉ ์ฆ๋ช…์ด ๋“ค์–ด ์žˆ์œผ๋ฏ€๋กœ ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.

์ƒ๋ฅ˜ ๊ตฌํ˜„์ด ๋ฐ”๋€Œ๋ฉด ์ด ์˜ˆ์ธก๊ธฐ๋„ ๊ฐ™์ด ๊ณ ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ํŒ์ •์ด ์–ด๊ธ‹๋‚˜๋ฉด URL์ด ์กฐ์šฉํžˆ ๋ฒ„๋ ค์ง‘๋‹ˆ๋‹ค.

์„ค์น˜ ์—ฌ๋ถ€๋Š” ๊ฐ์ง€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค

๋ธŒ๋ผ์šฐ์ €๋Š” ์ปค์Šคํ…€ ์Šคํ‚ด ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋“ฑ๋ก๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ์Šคํฌ๋ฆฝํŠธ์— ์•Œ๋ ค ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ™•์žฅ API๋กœ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€ ๋ผ๋Š” ์ ์„ ์‹ค์ œ๋กœ ์ธก์ •ํ•ด ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋“ฑ๋ก๋œ tablecloth:์™€ ํ™•์‹คํžˆ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์Šคํ‚ด์ด ์™„์ „ํžˆ ๊ฐ™์€ ์ด๋ฒคํŠธ๋ฅผ ๋ƒ…๋‹ˆ๋‹ค. ์–‘์ชฝ ๋ชจ๋‘ tabs.update๊ฐ€ ์„ฑ๊ณตํ•˜๊ณ , webNavigation.onErrorOccurred๊ฐ€ net::ERR_ABORTED๋กœ ๋œจ๋ฉฐ, ํƒญ์€ ์›๋ž˜ ํŽ˜์ด์ง€์— ๊ทธ๋Œ€๋กœ ๋‚จ์Šต๋‹ˆ๋‹ค.

ํฌ์ปค์Šค๊ฐ€ ๋น ์ง€๋Š” ๊ฒƒ์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์“ธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ ๋ฐฉ๋ฒ•์€ ์„ค์น˜๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์™€ ์‚ฌ์šฉ์ž๊ฐ€ ํ™•์ธ์ฐฝ์„ ์ทจ์†Œํ•œ ๊ฒฝ์šฐ๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ทจ์†Œํ•œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์›ํ•˜์ง€๋„ ์•Š์€ .wsb๊ฐ€ ์ž๋™์œผ๋กœ ๋‚ด๋ ค๊ฐ€๋Š” ์ชฝ์ด ๋” ๋‚˜์˜๊ธฐ ๋•Œ๋ฌธ์— ์“ฐ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ถ”์ธกํ•˜์ง€ ์•Š๊ณ  ์ˆœ์ฐจํ˜•์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋ฒ„ํŠผ์ด ๋จผ์ € ์„ค์น˜ํŒ์„ ์‹œ๋„ํ•˜๊ณ , ๊ณง๋ฐ”๋กœ ์ฐฝ์ด ์—ด๋ฆฌ์ง€ ์•Š์•˜์„ ๋•Œ ๋ฌด์„ค์น˜ .wsb๋ฅผ ๋ฐ›๋Š” ์„ ํƒ์ง€๋ฅผ ํ•จ๊ป˜ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ .wsb ๊ฒฝ๋กœ๋ฅผ ํ•œ ๋ฒˆ ์“ฐ๋ฉด preferNoInstall ์„ค์ •์ด ์ผœ์ ธ์„œ ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ๊ทธ ์„ ํƒ์ด ๊ธฐ๋ณธ์ด ๋ฉ๋‹ˆ๋‹ค. ์„ค์ • ํŽ˜์ด์ง€์—์„œ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ค์น˜ (๊ฐœ๋ฐœ์ž ๋ชจ๋“œ)

์›น ์Šคํ† ์–ด์— ๋“ฑ๋กํ•˜๊ธฐ ์ „์ด๋ผ ์••์ถ•์„ ํ‘ผ ์ƒํƒœ๋กœ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ๋นŒ๋“œ ๋‹จ๊ณ„๋Š” ์—†์œผ๋ฏ€๋กœ ๋‚ด๋ ค๋ฐ›์€ ํด๋”๋ฅผ ๊ทธ๋Œ€๋กœ ์ง€์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

1. ์†Œ์Šค ๋ฐ›๊ธฐ

git clone https://github.com/yourtablecloth/TableClothChrome.git

ZIP ํŒŒ์ผ๋กœ ๋ฐ›์•˜๋‹ค๋ฉด ์••์ถ•์„ ํ’€์–ด ๋‘์‹ญ์‹œ์˜ค. ํ™•์žฅ์„ ์“ฐ๋Š” ๋™์•ˆ ์ด ํด๋”๊ฐ€ ๊ทธ๋Œ€๋กœ ๋‚จ์•„ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Chrome์€ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•ด ๋‘์ง€ ์•Š๊ณ  ์ด ๊ฒฝ๋กœ๋ฅผ ๊ณ„์† ์ฐธ์กฐํ•˜๋ฏ€๋กœ, ํด๋”๋ฅผ ์˜ฎ๊ธฐ๊ฑฐ๋‚˜ ์ง€์šฐ๋ฉด ํ™•์žฅ๋„ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

2. Chrome์— ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

  1. ์ฃผ์†Œ์ฐฝ์— chrome://extensions๋ฅผ ์ž…๋ ฅํ•ด ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ํŽ˜์ด์ง€๋ฅผ ์—ฝ๋‹ˆ๋‹ค.
  2. ์˜ค๋ฅธ์ชฝ ์œ„์— ์žˆ๋Š” ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ ํ† ๊ธ€์„ ์ผญ๋‹ˆ๋‹ค.
  3. ์™ผ์ชฝ ์œ„์— ๋‚˜ํƒ€๋‚˜๋Š” ์••์ถ•ํ•ด์ œ๋œ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ๋กœ๋“œ๋ฅผ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
  4. 1๋‹จ๊ณ„์—์„œ ๋ฐ›์€ ํด๋”๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. manifest.json์ด ์ง์ ‘ ๋“ค์–ด ์žˆ๋Š” ํด๋”์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

src ํด๋”๋‚˜ ๊ทธ ์ƒ์œ„ ํด๋”๊ฐ€ ์•„๋‹ˆ๋ผ manifest.json์ด ์žˆ๋Š” ํด๋”๋ฅผ ๊ณจ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

3. ํ™•์ธํ•˜๊ธฐ

์นดํƒˆ๋กœ๊ทธ์— ์žˆ๋Š” ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•ด ๋ด…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด https://www.wooribank.com/์— ์ ‘์†ํ•˜๋ฉด ํŽ˜์ด์ง€ ์ƒ๋‹จ์— ์•ˆ๋‚ด ๋ง‰๋Œ€๊ฐ€ ๋œน๋‹ˆ๋‹ค. ํˆด๋ฐ”์˜ ์‹ํƒ๋ณด ์•„์ด์ฝ˜์„ ๋ˆ„๋ฅด๋ฉด ํ˜„์žฌ ์‚ฌ์ดํŠธ์˜ ์ƒํƒœ์™€ ์นดํƒˆ๋กœ๊ทธ ๊ฒ€์ƒ‰์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„์ด์ฝ˜์ด ํˆด๋ฐ”์— ๋ณด์ด์ง€ ์•Š์œผ๋ฉด ํผ์ฆ ์กฐ๊ฐ ๋ชจ์–‘์˜ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๋ชฉ๋ก์—์„œ ๊ณ ์ •ํ•˜์‹ญ์‹œ์˜ค.

4. ๊ฐฑ์‹ ํ•˜๊ธฐ

git pull

๋‚ด๋ ค๋ฐ›์€ ๋‹ค์Œ chrome://extensions์—์„œ ์ด ํ™•์žฅ์˜ ์ƒˆ๋กœ๊ณ ์นจ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์—ด๋ ค ์žˆ๋˜ ํƒญ์€ ์ƒˆ๋กœ ๊ณ ์ณ์•ผ ์•ˆ๋‚ด ๋ง‰๋Œ€๊ฐ€ ์ƒˆ ์ฝ”๋“œ๋กœ ๋‹ค์‹œ ๋œน๋‹ˆ๋‹ค.

๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด

์ฆ์ƒ ํ™•์ธํ•  ๊ฒƒ
์•ˆ๋‚ด ๋ง‰๋Œ€๊ฐ€ ๋œจ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ ์‚ฌ์ดํŠธ๊ฐ€ ์นดํƒˆ๋กœ๊ทธ์— ์žˆ๋Š”์ง€ ํˆด๋ฐ” ํŒ์—…์—์„œ ๊ฒ€์ƒ‰ํ•ด ๋ด…๋‹ˆ๋‹ค. ์„ค์ •์—์„œ ์•ˆ๋‚ด ๋ง‰๋Œ€๋ฅผ ๊ป๋Š”์ง€, ๊ทธ ์‚ฌ์ดํŠธ์—์„œ "์ด ์‚ฌ์ดํŠธ์—์„œ ๊ทธ๋งŒ ๋ณด๊ธฐ"๋ฅผ ๋ˆ„๋ฅธ ์ ์ด ์žˆ๋Š”์ง€๋„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
์•ˆ๋‚ด ๋ง‰๋Œ€๋Š” ๋œจ๋Š”๋ฐ ๋”ฅ๋งํฌ๊ฐ€ ๋ฐ˜์‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹ํƒ๋ณด ๋ฒ„์ „์ด ์œ„ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„์ „์ด ๋‚ฎ๋‹ค๋ฉด .wsb ๊ฒฝ๋กœ๋ฅผ ์“ฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
.wsb๊ฐ€ .xml๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ํ•ด๊ฒฐ๋œ ๋ฌธ์ œ์ด๋ฏ€๋กœ ํ™•์žฅ์„ ์ตœ์‹ ์œผ๋กœ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค. ํƒ์ƒ‰๊ธฐ์—์„œ ํŒŒ์ผ ํ™•์žฅ๋ช… ํ‘œ์‹œ๋ฅผ ์ผœ๊ณ  ์‹ค์ œ ์ด๋ฆ„์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
์˜ค๋ฅ˜๋ฅผ ์ž์„ธํžˆ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. chrome://extensions์—์„œ ์ด ํ™•์žฅ์˜ ์„œ๋น„์Šค ์›Œ์ปค ๋งํฌ๋ฅผ ๋ˆŒ๋Ÿฌ ์ฝ˜์†”์„ ์—ฝ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ

npm run verify         # ๋„๋ฉ”์ธ ๋งค์นญ, ๋”ฅ๋งํฌ ๊ฒŒ์ดํŠธ, .wsb ์ƒ์„ฑ์„ ๋ธŒ๋ผ์šฐ์ € ์—†์ด ์ ๊ฒ€ํ•ฉ๋‹ˆ๋‹ค
npm run catalog        # ๊ณต์‹ ์นดํƒˆ๋กœ๊ทธ๋ฅผ ๋‹ค์‹œ ๋ฐ›์•„ ์Šค๋ƒ…์ƒท๊ณผ manifest matches๋ฅผ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค
npm run catalog:check  # ๊ฐฑ์‹ ํ•˜์ง€ ์•Š๊ณ  ์ฐจ์ด๋งŒ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค (์ฐจ์ด๊ฐ€ ์žˆ์œผ๋ฉด ์ข…๋ฃŒ ์ฝ”๋“œ 1)

์ƒ๋ฅ˜ ์›๋ณธ๊ณผ์˜ ๋Œ€์กฐ๊นŒ์ง€ ํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

node tools/verify.mjs --upstream <TableCloth ์ €์žฅ์†Œ>/tools/no-install/no-install-spork.wsb

์นดํƒˆ๋กœ๊ทธ๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด

npm run catalog์€ manifest.json์˜ content_scripts[0].matches๋ฅผ ์นดํƒˆ๋กœ๊ทธ์˜ ๋“ฑ๋ก๊ฐ€๋Šฅ๋„๋ฉ”์ธ ๋ชฉ๋ก์œผ๋กœ ๋‹ค์‹œ ์”๋‹ˆ๋‹ค. <all_urls> ๋Œ€์‹  ์‹ค์ œ ๋“ฑ๋ก๋œ ๋„๋ฉ”์ธ๋งŒ ์„ ์–ธํ•ด ๊ถŒํ•œ ์š”๊ตฌ๋ฅผ ์ตœ์†Œํ™”ํ•˜๋ ค๋Š” ์„ค๊ณ„์ด๋ฏ€๋กœ, ์นดํƒˆ๋กœ๊ทธ์— ์‚ฌ์ดํŠธ๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด ์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค์‹œ ๋Œ๋ ค ์žฌ๋ฐฐํฌํ•ด์•ผ ์ •์  ๋งค์น˜๊ฐ€ ๋”ฐ๋ผ๊ฐ‘๋‹ˆ๋‹ค.

์žฌ๋ฐฐํฌํ•˜๊ธฐ ์ „์ด๋ผ๋„ ํ™•์žฅ์€ ๋Ÿฐํƒ€์ž„์— ์นดํƒˆ๋กœ๊ทธ๋ฅผ ๊ฐฑ์‹ ํ•˜๋ฉฐ, ์ •์  ๋งค์น˜์— ์—†๋Š” ๋„๋ฉ”์ธ์„ ํŒ์—…๊ณผ ์„ค์ • ํŽ˜์ด์ง€์—์„œ ์•Œ๋ ค ์ค๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒ์  ๊ถŒํ•œ์„ ํ—ˆ์šฉํ•˜๋ฉด chrome.scripting.registerContentScripts๋กœ ๋™์  ๋“ฑ๋กํ•ด ๊ทธ ์‚ฌ์ดํŠธ์—๋„ ์•ˆ๋‚ด ๋ง‰๋Œ€๊ฐ€ ๋œจ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์„ฑ

manifest.json                 MV3 ๋งค๋‹ˆํŽ˜์ŠคํŠธ (matches๋Š” ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ƒ์„ฑ)
data/catalog-snapshot.json    ์นดํƒˆ๋กœ๊ทธ ์Šค๋ƒ…์ƒท (์˜คํ”„๋ผ์ธ, ์ฒซ ์‹คํ–‰์šฉ)
src/common/psl.js             .kr ์ธ์‹ ๊ณต๊ฐœ ์ ‘๋ฏธ์‚ฌ ์ฒ˜๋ฆฌ, ๋“ฑ๋ก๊ฐ€๋Šฅ๋„๋ฉ”์ธ ๊ณ„์‚ฐ
src/common/xml.js             ์‹œ์ž‘ ํƒœ๊ทธ ํŠน์„ฑ๋งŒ ํ›‘๋Š” ์ตœ์†Œ XML ์Šค์บ๋„ˆ
src/common/catalog.js         Catalog.xml ํŒŒ์‹ฑ, ํ˜ธ์ŠคํŠธ์™€ ๋„๋ฉ”์ธ ์ธ๋ฑ์Šค, ๋งค์นญ
src/common/wsb.js             .wsb ์ƒ์„ฑ, ์‚ฌ์ดํŠธ Id ๊ฒ€์ฆ, data URL ๋ณ€ํ™˜
src/common/deeplink.js        tablecloth ๋”ฅ๋งํฌ์™€ ๊ฒŒ์ŠคํŠธ ๋„๋ฉ”์ธ ๊ฒŒ์ดํŠธ ์˜ˆ์ธก๊ธฐ
src/common/storage.js         ์„ค์ •, ์ˆจ๊น€ ๊ธฐ๋ก, ์นดํƒˆ๋กœ๊ทธ ์บ์‹œ
src/common/constants.js       URL, ์ €์žฅ์†Œ ํ‚ค, ๋ฉ”์‹œ์ง€ ํƒ€์ž…, ๊ธฐ๋ณธ ์„ค์ •
src/background/service-worker.js  ์นดํƒˆ๋กœ๊ทธ ๊ฐฑ์‹ , ๋งค์นญ, ๋‹ค์šด๋กœ๋“œ, ๋™์  ์Šคํฌ๋ฆฝํŠธ ๋“ฑ๋ก
src/content/banner.js         ์ƒ๋‹จ ์•ˆ๋‚ด ๋ง‰๋Œ€ (์„€๋„ DOM, ํŽ˜์ด์ง€ CSP ๋น„์˜์กด)
src/popup/                    ํˆด๋ฐ” ํŒ์—… (ํ˜„์žฌ ์‚ฌ์ดํŠธ, ์นดํƒˆ๋กœ๊ทธ ๊ฒ€์ƒ‰)
src/options/                  ์„ค์ • ํŽ˜์ด์ง€
icons/                        ํ™•์žฅ ์•„์ด์ฝ˜ (๊ณต์‹ ๋กœ๊ณ ์—์„œ ์ƒ์„ฑ)
tools/build-catalog.mjs       ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์Šค๋ƒ…์ƒท๊ณผ manifest matches๋กœ ๋ณ€ํ™˜
tools/build-icons.ps1         ๊ณต์‹ ๋กœ๊ณ ๋ฅผ ์•„์ด์ฝ˜ 4์ข…๊ณผ ์•ˆ๋‚ด ๋ง‰๋Œ€์šฉ data URL๋กœ ๋ณ€ํ™˜
tools/pack.mjs                ์Šคํ† ์–ด ํŒจํ‚ค์ง€์— ๋„ฃ์„ ํŒŒ์ผ ๋ชฉ๋ก ์ •์˜์™€ ์ ๊ฒ€
tools/verify.mjs              ์ž์ฒด ์ ๊ฒ€

์„œ๋น„์Šค ์›Œ์ปค์—๋Š” DOMParser๊ฐ€ ์—†์–ด์„œ XML ์Šค์บ๋„ˆ๋ฅผ ์ง์ ‘ ๋งŒ๋“ค์–ด ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค.

์•„์ด์ฝ˜

์•„์ด์ฝ˜์€ ์ƒ๋ฅ˜์˜ docs/images/TableCloth_NewLogo.png ์—์„œ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์›๋ณธ์€ 2160ร—2160 ํฌ๊ธฐ์ด์ง€๋งŒ ํˆฌ๋ช… ์—ฌ๋ฐฑ์ด ๊ฐ€๋กœ๋กœ 30%, ์„ธ๋กœ๋กœ 51%๋ฅผ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Œ€๋กœ ์ถ•์†Œํ•˜๋ฉด 16px์—์„œ ํ˜•์ฒด๋ฅผ ์•Œ์•„๋ณผ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ์•ŒํŒŒ ๊ฒฝ๊ณ„ ์ƒ์ž๋กœ ์ž˜๋ผ๋‚ธ ๋‹ค์Œ 4% ์—ฌ๋ฐฑ์„ ๋‘๊ณ  ๋‹ค์‹œ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.

pwsh tools/build-icons.ps1              # icons/icon-{16,32,48,128}.png๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ญ๋‹ˆ๋‹ค
pwsh tools/build-icons.ps1 -EmitBase64  # ์•ˆ๋‚ด ๋ง‰๋Œ€์šฉ data URL๋„ ํ•จ๊ป˜ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค

์•ˆ๋‚ด ๋ง‰๋Œ€๋Š” ์ฝ˜ํ…์ธ  ์Šคํฌ๋ฆฝํŠธ์—์„œ ๋™์ž‘ํ•˜๋ฏ€๋กœ ๋กœ๊ณ ๋ฅผ src/content/banner.js์˜ MARK_DATA_URL์— ์ธ๋ผ์ธํ•ด ์”๋‹ˆ๋‹ค. chrome.runtime.getURL๋กœ ํ™•์žฅ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉด ์ด๋ฏธ์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ฃผ์ฒด๊ฐ€ ํŽ˜์ด์ง€๊ฐ€ ๋˜์–ด web_accessible_resources ์„ ์–ธ์ด ํ•„์š”ํ•ด์ง€๋Š”๋ฐ, ์•„์ด์ฝ˜ ํ•˜๋‚˜ ๋•Œ๋ฌธ์— ํ™•์žฅ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ชจ๋“  ์‚ฌ์ดํŠธ์— ๋…ธ์ถœํ•  ์ด์œ ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์‚ฌ์ดํŠธ CSP๊ฐ€ data: ์ด๋ฏธ์ง€๋ฅผ ๋ง‰๋Š” ๊ฒฝ์šฐ์—๋Š” ๋กœ๊ณ ๋งŒ ์กฐ์šฉํžˆ ๋น ์ง‘๋‹ˆ๋‹ค.

๊ถŒํ•œ

๊ถŒํ•œ ์“ฐ์ž„
storage ์นดํƒˆ๋กœ๊ทธ ์บ์‹œ์™€ ์„ค์ •, ์ˆจ๊น€ ๊ธฐ๋ก์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
downloads ๋งŒ๋“ค์–ด ๋‚ธ .wsb๋ฅผ ์ €์žฅํ•˜๊ณ  ๋‹ค์šด๋กœ๋“œ ํด๋”์—์„œ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค.
alarms 12์‹œ๊ฐ„๋งˆ๋‹ค ์นดํƒˆ๋กœ๊ทธ๋ฅผ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.
scripting ์นดํƒˆ๋กœ๊ทธ์— ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ๋„๋ฉ”์ธ์— ์ฝ˜ํ…์ธ  ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋™์ ์œผ๋กœ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.
activeTab ํŒ์—…์—์„œ ํ˜„์žฌ ํƒญ์˜ ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
https://yourtablecloth.app/* ์นดํƒˆ๋กœ๊ทธ XML์„ ๋‚ด๋ ค๋ฐ›์Šต๋‹ˆ๋‹ค.
content_scripts.matches ์นดํƒˆ๋กœ๊ทธ์— ๋“ฑ๋ก๋œ ๋„๋ฉ”์ธ์—์„œ๋งŒ ์•ˆ๋‚ด ๋ง‰๋Œ€๋ฅผ ๋„์›๋‹ˆ๋‹ค.
optional_host_permissions ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ํ—ˆ์šฉํ•  ๋•Œ๋งŒ ์ƒˆ ๋„๋ฉ”์ธ์œผ๋กœ ๋ฒ”์œ„๋ฅผ ๋„“ํž™๋‹ˆ๋‹ค.

tabs ๊ถŒํ•œ์€ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐฐ์ง€๋Š” ์•ˆ๋‚ด ๋ง‰๋Œ€๊ฐ€ ์ž๊ธฐ ํƒญ์„ ์•Œ๋ ค ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์•Œ์•„๋‘˜ ์ 

  • Windows 10 ๋˜๋Š” 11์˜ Pro ์ด์ƒ ๋ฒ„์ „์—์„œ Windows Sandbox ๊ธฐ๋Šฅ์ด ์ผœ์ ธ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Windows๊ฐ€ ์•„๋‹Œ ํ™˜๊ฒฝ์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์•ˆ๋‚ด ๋ง‰๋Œ€๋ฅผ ๋„์šฐ์ง€ ์•Š์œผ๋ฉฐ, macOS์—์„œ MacSandbox๋ฅผ ์“ฐ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์„ค์ •์—์„œ ์ผœ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • ์ƒŒ๋“œ๋ฐ•์Šค์— ํ˜ธ์ŠคํŠธ ํด๋”๋ฅผ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํŒŒ์ผ ํ˜•ํƒœ์˜ ๊ณต๋™์ธ์ฆ์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ชจ๋ฐ”์ผ ์ธ์ฆ์„ ์“ฐ์‹ญ์‹œ์˜ค.
  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ .wsb ๋‹ค์šด๋กœ๋“œ๋ฅผ ๋‚ฏ์„  ํ˜•์‹์ด๋ผ๋ฉฐ ๊ฒฝ๊ณ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ™•์žฅ์ด ๋งŒ๋“œ๋Š” ํŒŒ์ผ์€ ๊ณต์‹ GitHub ๋ฆด๋ฆฌ์Šค๋งŒ ๊ฐ€๋ฆฌํ‚ค๊ณ  ๋‚ด์šฉ๋„ XML ํ‰๋ฌธ์ด๋ฏ€๋กœ, ์—ด์–ด์„œ ์ง์ ‘ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • chrome.downloads๊ฐ€ data: URL ์ €์žฅ์„ ๊ฑฐ๋ถ€ํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ๋Š” ์•ˆ๋‚ด ๋ง‰๋Œ€์™€ ํŒ์—…์ด ํŽ˜์ด์ง€ ์ปจํ…์ŠคํŠธ์—์„œ blob์œผ๋กœ ์ €์žฅํ•˜๋„๋ก ์ž๋™์œผ๋กœ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค.

๋‹ค์šด๋กœ๋“œ MIME ํƒ€์ž…์„ ์˜ฅํ…Ÿ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๊ณ ์ •ํ•œ ์ด์œ 

Chrome์€ ๋‹ค์šด๋กœ๋“œ ํŒŒ์ผ ์ด๋ฆ„์˜ ํ™•์žฅ์ž๋ฅผ MIME ํƒ€์ž…์˜ ๊ธฐ๋ณธ ํ™•์žฅ์ž๋กœ ๋ฎ์–ด์”๋‹ˆ๋‹ค. .wsb์—๋Š” ๋“ฑ๋ก๋œ MIME ํƒ€์ž…์ด ์—†์–ด์„œ, ๋‚ด์šฉ์— ๋งž๋Š” application/xml์„ ์“ฐ๋ฉด ์ง€์ •ํ•œ ์ด๋ฆ„์ด ๋ฌด์‹œ๋˜๊ณ  .xml๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋”๋ธ”ํด๋ฆญํ•ด๋„ Windows Sandbox๊ฐ€ ๋œจ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ Chrome for Testing 151์—์„œ ์‹ค์ œ๋กœ ์ธก์ •ํ•œ ๊ฒฐ๊ณผ์ด๋ฉฐ, ์š”์ฒญํ•œ ์ด๋ฆ„์€ ๋ชจ๋‘ *.wsb์˜€์Šต๋‹ˆ๋‹ค.

data: URL์˜ MIME ์‹ค์ œ ์ €์žฅ๋œ ์ด๋ฆ„
application/xml probe-A-xml.xml
text/plain probe-C-plain.txt
MIME์„ ์ง€์ •ํ•˜์ง€ ์•Š์Œ probe-D-nomime.txt
application/octet-stream probe-B-octet.wsb โœ…

๊ทธ๋ž˜์„œ WSB_MIME_TYPE์„ application/octet-stream์œผ๋กœ ๊ณ ์ •ํ–ˆ๊ณ , npm run verify๊ฐ€ ์ด๋ฅผ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ๋กœ ์ง€ํ‚ต๋‹ˆ๋‹ค. ๋ง๋ถ™์—ฌ ์„œ๋น„์Šค ์›Œ์ปค๋Š” ์ €์žฅ์ด ๋๋‚œ ๋’ค ์‹ค์ œ ํŒŒ์ผ ์ด๋ฆ„์„ ๋‹ค์‹œ ์กฐํšŒํ•ด์„œ, ๊ทธ๋ž˜๋„ ํ™•์žฅ์ž๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋‹ค๋ฉด ์•ˆ๋‚ด ๋ง‰๋Œ€์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ ค ์ค๋‹ˆ๋‹ค.

ํƒ์ƒ‰๊ธฐ์—์„œ "์•Œ๋ ค์ง„ ํŒŒ์ผ ํ˜•์‹์˜ ํ™•์žฅ๋ช… ์ˆจ๊ธฐ๊ธฐ"๊ฐ€ ์ผœ์ ธ ์žˆ์œผ๋ฉด ์ด๋ฆ„.wsb.xml์ด ์ด๋ฆ„.wsb๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— .wsb๋ฅผ ๋‹ค์‹œ ๋ถ™์—ฌ ์ด๋ฆ„์„ ๊ณ ์ณ๋„ ์‹ค์ œ ์ด๋ฆ„์€ ์ด๋ฆ„.wsb.xml ๊ทธ๋Œ€๋กœ์—ฌ์„œ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐฐํฌ

manifest.json์˜ ๋ฒ„์ „์„ ์˜ฌ๋ฆฌ๊ณ  ๊ฐ™์€ ๋ฒˆํ˜ธ๋กœ ํƒœ๊ทธ๋ฅผ ๋ถ™์—ฌ ์˜ฌ๋ฆฌ๋ฉด, GitHub Actions๊ฐ€ ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค์–ด ๋ฆด๋ฆฌ์Šค๋กœ ๋ฐœํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์Šคํ† ์–ด ์‹œํฌ๋ฆฟ์ด ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด Chrome ์›น ์Šคํ† ์–ด์™€ Microsoft Edge ์• ๋“œ์˜จ์—๋„ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์ ˆ์ฐจ์™€ ์‹œํฌ๋ฆฟ ์„ค์ • ๋ฐฉ๋ฒ•์€ docs/PUBLISHING.md์— ์žˆ์Šต๋‹ˆ๋‹ค.

git tag v0.2.0
git push origin main --tags

๋ผ์ด์„ ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” ์ƒ๋ฅ˜ ์‹ํƒ๋ณด ํ”„๋กœ์ ํŠธ์™€ ๊ฐ™์€ AGPL-3.0-or-later๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ์ „๋ฌธ์€ LICENSE ํŒŒ์ผ์— ์žˆ์Šต๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ € ํ™•์žฅ์— AGPL์„ ์ ์šฉํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ์—†๋Š”์ง€ ๊ฒ€ํ† ํ–ˆ๊ณ , ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ ๊ทธ๋Œ€๋กœ ๋‘๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • AGPL์„ GPL๊ณผ ๊ตฌ๋ถ„ ์ง“๋Š” ์ œ13์กฐ๋Š” ๋„คํŠธ์›Œํฌ ๋„ˆ๋จธ๋กœ ํ”„๋กœ๊ทธ๋žจ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•˜๋„๋ก ์š”๊ตฌํ•˜๋Š” ์กฐํ•ญ์ž…๋‹ˆ๋‹ค. ์ด ํ™•์žฅ์€ ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ € ์•ˆ์—์„œ๋งŒ ๋™์ž‘ํ•˜๊ณ  ์„œ๋ฒ„๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๊ทธ ์กฐํ•ญ์ด ์‹ค์ œ๋กœ ๋ฐœ๋™ํ•  ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ GPL-3.0๊ณผ ๊ฐ™๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • ์Šคํ† ์–ด ์•ฝ๊ด€๊ณผ์˜ ์ถฉ๋Œ์€ ์ €์ž‘๊ถŒ์„ ์ „๋ถ€ ๋ณด์œ ํ•œ ๊ฒฝ์šฐ์—๋Š” ์ƒ๊ธฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ณผ๊ฑฐ App Store์™€ GPL ์‚ฌ์ด์˜ ๋ถ„์Ÿ์€ ๋ฐฐํฌ์ž๊ฐ€ ๋ชจ๋“  ๊ธฐ์—ฌ๋ถ„์˜ ์ €์ž‘๊ถŒ์„ ๊ฐ–๊ณ  ์žˆ์ง€ ์•Š์•˜๊ณ  ์Šคํ† ์–ด๊ฐ€ ์ถ”๊ฐ€ ์ œ์•ฝ์„ ๊ฑธ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๊ธด ์ผ์ž…๋‹ˆ๋‹ค. Chrome ์›น ์Šคํ† ์–ด์—๋Š” GPL ๊ณ„์—ด ํ™•์žฅ์ด ์ด๋ฏธ ์—ฌ๋Ÿฟ ์˜ฌ๋ผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด ํ™•์žฅ์€ ๋นŒ๋“œ ๋‹จ๊ณ„๊ฐ€ ์—†์–ด์„œ ์Šคํ† ์–ด์— ์˜ฌ๋ฆฌ๋Š” ํŒจํ‚ค์ง€๊ฐ€ ๊ณง ์†Œ์Šค ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์†Œ์Šค ์ œ๊ณต ์˜๋ฌด๊ฐ€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ถฉ์กฑ๋˜๋ฉฐ, ํŒจํ‚ค์ง€์— LICENSE๋ฅผ ํ•จ๊ป˜ ๋„ฃ์–ด ์ œ4์กฐ ์š”๊ตฌ๋„ ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋งŒ AGPL์€ ๊ธฐ์—… ์ •์ฑ…์—์„œ ๋ฐฐ์ œ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ™•์žฅ์ด ์‚ฌ๋‚ด ๋ฐฐํฌ๋ฅผ ๊ฐ€๋กœ๋ง‰๋Š” ๊ฑธ๋ฆผ๋Œ์ด ๋œ๋‹ค๋ฉด ๋‹ค์Œ์„ ๋Œ€์•ˆ์œผ๋กœ ๊ฒ€ํ† ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GPL-3.0-or-later๋Š” ์‹ค์ œ๋กœ ๋ฐœ๋™ํ•˜์ง€ ์•Š๋Š” ์ œ13์กฐ๋ฅผ ๊ฑท์–ด๋‚ด๋ฉด์„œ ๊ฐ™์€ ์นดํ”ผ๋ ˆํ”„ํŠธ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. MPL-2.0์€ ํŒŒ์ผ ๋‹จ์œ„ ์นดํ”ผ๋ ˆํ”„ํŠธ์—ฌ์„œ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์— ํฌํ•จ๋˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. Apache-2.0์€ ์ฑ„ํƒ ์žฅ๋ฒฝ์ด ๊ฐ€์žฅ ๋‚ฎ์ง€๋งŒ ์ด์ค‘ ๋ผ์ด์„ ์Šค ์ „๋žต์˜ ์ง€๋ ›๋Œ€๋ฅผ ์žƒ์Šต๋‹ˆ๋‹ค.

About

TableCloth Extension for Chromium Browsers

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages