โ ๏ธ ํ๋ฆฌ๋ทฐ ๋ฒ์ ์ ๋๋ค. ์์ง 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ํํ๋ก ๋ฎ์ถฐ ๋ณด๋ ๋๋ค. ์์ธํ ๋ด์ฉ์ ์๋์์ ์ค๋ช ํฉ๋๋ค.
๋ฅ๋งํฌ๋ ๋ค์ ๋ ํํ๋ฅผ ์ง์ํ๋ฉฐ, ํ๋์ ๋ฅ๋งํฌ์ ๋์ ํจ๊ป ์ค์ ์๋ ์์ต๋๋ค.
| ํํ | ์ | ์ง์ ์ฃผ์ |
|---|---|---|
| ๋์ 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 ์ค์ ์ด ์ผ์ ธ์ ๋ค์๋ถํฐ๋ ๊ทธ ์ ํ์ด ๊ธฐ๋ณธ์ด ๋ฉ๋๋ค. ์ค์ ํ์ด์ง์์ ๋๋๋ฆด ์ ์์ต๋๋ค.
์น ์คํ ์ด์ ๋ฑ๋กํ๊ธฐ ์ ์ด๋ผ ์์ถ์ ํผ ์ํ๋ก ๋ถ๋ฌ์์ผ ํฉ๋๋ค. ๋ณ๋์ ๋น๋ ๋จ๊ณ๋ ์์ผ๋ฏ๋ก ๋ด๋ ค๋ฐ์ ํด๋๋ฅผ ๊ทธ๋๋ก ์ง์ ํ๋ฉด ๋ฉ๋๋ค.
git clone https://github.com/yourtablecloth/TableClothChrome.gitZIP ํ์ผ๋ก ๋ฐ์๋ค๋ฉด ์์ถ์ ํ์ด ๋์ญ์์ค. ํ์ฅ์ ์ฐ๋ ๋์ ์ด ํด๋๊ฐ ๊ทธ๋๋ก ๋จ์ ์์ด์ผ ํฉ๋๋ค. Chrome์ ํ์ผ์ ๋ณต์ฌํด ๋์ง ์๊ณ ์ด ๊ฒฝ๋ก๋ฅผ ๊ณ์ ์ฐธ์กฐํ๋ฏ๋ก, ํด๋๋ฅผ ์ฎ๊ธฐ๊ฑฐ๋ ์ง์ฐ๋ฉด ํ์ฅ๋ ์ฌ๋ผ์ง๋๋ค.
- ์ฃผ์์ฐฝ์
chrome://extensions๋ฅผ ์ ๋ ฅํด ํ์ฅ ํ๋ก๊ทธ๋จ ํ์ด์ง๋ฅผ ์ฝ๋๋ค. - ์ค๋ฅธ์ชฝ ์์ ์๋ ๊ฐ๋ฐ์ ๋ชจ๋ ํ ๊ธ์ ์ผญ๋๋ค.
- ์ผ์ชฝ ์์ ๋ํ๋๋ ์์ถํด์ ๋ ํ์ฅ ํ๋ก๊ทธ๋จ์ ๋ก๋๋ฅผ ๋๋ฆ ๋๋ค.
- 1๋จ๊ณ์์ ๋ฐ์ ํด๋๋ฅผ ์ ํํฉ๋๋ค.
manifest.json์ด ์ง์ ๋ค์ด ์๋ ํด๋์ฌ์ผ ํฉ๋๋ค.
src ํด๋๋ ๊ทธ ์์ ํด๋๊ฐ ์๋๋ผ manifest.json์ด ์๋ ํด๋๋ฅผ ๊ณจ๋ผ์ผ ํฉ๋๋ค.
์นดํ๋ก๊ทธ์ ์๋ ์ฌ์ดํธ์ ์ ์ํด ๋ด ๋๋ค. ์๋ฅผ ๋ค์ด https://www.wooribank.com/์ ์ ์ํ๋ฉด ํ์ด์ง ์๋จ์ ์๋ด ๋ง๋๊ฐ ๋น๋๋ค. ํด๋ฐ์ ์ํ๋ณด ์์ด์ฝ์ ๋๋ฅด๋ฉด ํ์ฌ ์ฌ์ดํธ์ ์ํ์ ์นดํ๋ก๊ทธ ๊ฒ์์ ๋ณผ ์ ์์ต๋๋ค.
์์ด์ฝ์ด ํด๋ฐ์ ๋ณด์ด์ง ์์ผ๋ฉด ํผ์ฆ ์กฐ๊ฐ ๋ชจ์์ ํ์ฅ ํ๋ก๊ทธ๋จ ๋ฒํผ์ ๋๋ฌ ๋ชฉ๋ก์์ ๊ณ ์ ํ์ญ์์ค.
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.wsbnpm 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์ผ๋ก ์ ์ฅํ๋๋ก ์๋์ผ๋ก ๋์ด๊ฐ๋๋ค.
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์ ์ฑํ ์ฅ๋ฒฝ์ด ๊ฐ์ฅ ๋ฎ์ง๋ง ์ด์ค ๋ผ์ด์ ์ค ์ ๋ต์ ์ง๋ ๋๋ฅผ ์์ต๋๋ค.