just-news
๋ด์ค ์ฌ์ดํธ ๊ธฐ์ฌ ํ์ด์ง์ ์ ์ํ๋ฉด ๋ด์ค ๋ณธ๋ฌธ์ธ์ ์ ๋ณด๋ฅผ ์ ๋ถ ์ ๊ฑฐํ ๋ค ํ์ด์ง๋ฅผ ์ฌ๊ตฌ์ฑํ๋ ์คํฌ๋ฆฝํธ์ ๋๋ค.
๋ชจ๋ ์ฃผ์ ์น๋ธ๋ผ์ฐ์ (์ธํฐ๋ท ์ต์คํ๋ก๋ฌ ์ ์ธ)์ ๋ํด ์ต์ ์์ ๋ฒ์ ์ผ๋ก๋ถํฐ ํ ๋ฒ์ ์ ๊น์ง๋ง ์ง์ํฉ๋๋ค.
์ค์นํ๊ธฐ
just-news๋ ๋ด์ค ๊ธฐ์ฌ ํ์ด์ง์์ ์๋๋๋ ์ ์ ์คํฌ๋ฆฝํธ์ด๋ฉฐ, ์๋์ผ๋ก ์คํ๋๊ธฐ ์ํด์๋ ์ ์ ์คํฌ๋ฆฝํธ ํ๋ฌ๊ทธ์ธ์ ๋์์ด ํ์ํฉ๋๋ค.
์ ์ ์คํฌ๋ฆฝํธ ํ๋ฌ๊ทธ์ธ ์ค์น
์ ์ ์คํฌ๋ฆฝํธ ํ๋ฌ๊ทธ์ธ์ ์ฌ๋ฌ ์ข ๋ฅ๊ฐ ์์ง๋ง just-news๋ Tampermonkey ์ฌ์ฉ์ ๊ถ์ฅํฉ๋๋ค. Tampermonkey๋ ํฌ๋กฌ, ํ์ด์ดํญ์ค, ์ฃ์ง, ์ฌํ๋ฆฌ, ์คํ๋ผ ๋ฑ์ ์น๋ธ๋ผ์ฐ์ ๋ฅผ ์ง์ํฉ๋๋ค.
Tampermonkey ์ธ์๋ Greasemonkey, Violentmonkey, NinjaKit ๋ฑ์ ์ ์ ์คํฌ๋ฆฝํธ ํ๋ฌ๊ทธ์ธ์ด ์์ต๋๋ค.
์คํฌ๋ฆฝํธ ์ค์น
์ ์ ์คํฌ๋ฆฝํธ ํ๋ฌ๊ทธ์ธ์ด ์ค์น๋๋ค๋ฉด ์ ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด ์๋์ผ๋ก just-news ์ค์น์ฐฝ์ด ๋น๋๋ค.
๊ธฐ์ฌํ๋ ๋ฒ
๋ฒ๊ทธ ์ ๋ณดํ๊ธฐ
just-news๋ GitHub issue tracker๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด์๋ https://github.com/disjukr/just-news/issues๋ก ์ ๋ณดํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
์์ค์ฝ๋๋ก ๊ธฐ์ฌํ๊ธฐ
- ๊ตฌํํ๊ณ ์ถ์ ๋ด์ค ์ฌ์ดํธ๋ฅผ ์ ํฉ๋๋ค.
- ๋ด์ค ์ฌ์ดํธ๊ฐ ํ๋จ์ ์ง์ ์ฌ์ดํธ ๋ชฉ๋ก์ ์ฒดํฌ๋์ด์์ง ์์์ง ํ์ธํฉ๋๋ค.
- ๋ชฉ๋ก์ ์ฌ์ดํธ๊ฐ ์์ผ๋ฉด ์ถ๊ฐํฉ๋๋ค.
- ๊ตฌํํฉ๋๋ค.
src/sites.ts
์ ๋ด์ค์ฌ ์ด๋ฆ์ ํค๋ก ๊ฐ๋, ์ฃผ์ ํจํด ๋ชฉ๋ก์ ์ถ๊ฐํฉ๋๋ค.src/impl
๊ฒฝ๋ก์article
๊ฐ์ฒด๋ฅผ ๋ฐํํ๋parse
ํจ์๋ฅผ ๋ด์ ๋ชจ๋์ ์์ฑํฉ๋๋ค.- ๋ชจ๋ ์ด๋ฆ์ ๋ด์ค์ฌ ์ด๋ฆ์ผ๋ก ํฉ๋๋ค.
- ๋น๋๊ธฐ๋ก ์๋ํด์ผํ ๊ฒฝ์ฐ
Promise
๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ฉด ๋ฉ๋๋ค. - ํน์ ๋ด์ค๊ธฐ์ฌ์์๋ง ์๋ํ๋ ์ฝ๋์ ๊ฒฝ์ฐ ํด๋น ๋ด์ค๊ธฐ์ฌ url์ ์ฃผ์์ผ๋ก ์ ์ด์ฃผ์ธ์.
- ์ง์ ์ฌ์ดํธ ๋ชฉ๋ก์ ๊ตฌํํ ํญ๋ชฉ์ ์ฒดํฌํ๊ณ Pull Request๋ฅผ ๋ณด๋ ๋๋ค.
์์ค์ฝ๋ ๋น๋ํ๊ธฐ
์ด ํ๋ก์ ํธ๋ webpack์ ์ฌ์ฉํ์ฌ just-news.user.js
ํ์ผ์ ๋น๋ํฉ๋๋ค.
๋น๋๋ฅผ ํ๊ธฐ ์ํด ๋ค์์ ์ ์ฐจ๋ฅผ ๋ฐ๋ผ์ผ ํฉ๋๋ค.
- nodejs๋ฅผ ์ค์นํฉ๋๋ค.
- pnpm์ ์ค์นํฉ๋๋ค.
pnpm install
๋ช ๋ น์ ์คํํฉ๋๋ค.pnpm build
๋ช ๋ น์ ์คํํฉ๋๋ค.pnpm build
๋ช ๋ น์ minify๋ ๊ฒฐ๊ณผ๋ฌผ์ ์ฃผ๊ธฐ ๋๋ฌธ์ ์ฒ๋ฆฌ๊ฐ ๋๋ฌด ์ค๋๊ฑธ๋ฆด ์ ์์ต๋๋ค. ๋น ๋ฅด๊ฒ ๊ฐ๋ฐ์ฉ ๋น๋๋ฅผ ์ป๊ณ ์ถ๋ค๋ฉดpnpm build:dev
๋ช ๋ น์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
- ์ ์ฅ์์
dist
ํด๋๋ก ๊ฐ๋ฉด ๋น๋๋just-news.user.js
ํ์ผ์ ํ์ธํ ์ ์์ต๋๋ค.
์ฝ๊ฒ ๊ฐ๋ฐ๋ฒ์ userscript๋ฅผ ํ ์คํธํ๋ ๋ฒ
Tampermonkey ๋ฑ์ ์ ์ ์คํฌ๋ฆฝํธ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ฉด
*.user.js
๊ผด์ ์ฃผ์๋ก ๋ค์ด๊ฐ ๋ ์๋์ผ๋ก ์ฌ์ค์น ํ๋ฉด์ ๋์์ค๋๋ค.
ํ๋ก์ ํธ๋ฅผ ๋น๋ํ ๋ค์ dist
ํด๋์ ๋ฒ๋ค ํ์ผ์ HTTP๋ก ์๋นํด์
๋ธ๋ผ์ฐ์ ํญ์ ์ด๊ณ http://localhost:<ํฌํธ>/just-news.user.js
์ฃผ์๋ก ๋ค์ด๊ฐ๋ฉด
๋ฐฉ๊ธ ๋น๋ํ just-news
๋ฅผ ์ฌ์ค์นํ๋ ํ๋ฉด์ด ๋น๋๋ค.
์
๊ทธ๋ ์ด๋
๋๋ ์ฌ์ค์น
๋ฒํผ์ ๋๋ฌ์ฃผ๋ฉด ๋ฉ๋๋ค.
๊ฐ๋ฐ์ฉ ์๋ฒ๋ ๋ค์๊ณผ ๊ฐ์ด ๋์ธ ์ ์์ต๋๋ค:
$ npm run dev
์ ์์ฌํญ
๋ฒ๊ทธ ์ ๋ณด ๊ด๋ จ
- ํน์ ํ๊ฒฝ์์๋ง ๋ฐ์ํ๋ ๋ฒ๊ทธ๋ ์ ๋ณด์์ ํน์ ํ๊ฒฝ(์น๋ธ๋ผ์ฐ์ /OS ๋ฑ)์ ๋ช ์ํด์ฃผ์ธ์.
- ํน์ ๋ด์ค์ฌ์ดํธ๋ ๊ธฐ์ฌ ํ์ด์ง์์๋ง ๋ฐ์ํ๋ ๋ฒ๊ทธ ์ญ์ ์ ๋ณด์์ ๋งํฌ๋ฅผ ๋ช ์ํด์ฃผ์ธ์.
๊ฐ๋ฐ ๊ด๋ จ
article
๊ฐ์ฒด๋src/index.ts
์ ์ ์๋Article
์ธํฐํ์ด์ค๋ฅผ ๋ฐ๋ฅด๋๋ก ํฉ๋๋ค.- ๋ด์ค ํ์ด์ง์์ ํด๋นํ๋ ์ ๋ณด๊ฐ ์์ ๊ฒฝ์ฐ
null
๊ฐ์ ์ฑ์ ๋ฃ์ต๋๋ค.
- ๋ด์ค ํ์ด์ง์์ ํด๋นํ๋ ์ ๋ณด๊ฐ ์์ ๊ฒฝ์ฐ
- ๋ฆด๋ฆฌ์ฆ๋ ์ฌ๋์ด ์ง์ ํ ํ์๊ฐ ์์ต๋๋ค. GitHub Actions๋ฅผ ํตํด
just-news-bot
์ด ์๋์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
ํธ์ด๋ด๊ธฐ
๋ช๋ช ๋ด์ค ์ฌ์ดํธ๋ค์ ์ฌ์ดํธ ์ฌ๊ตฌ์ฑ ๋ค์๋ ๊ด๊ณ ๊ฐ ๋จ์์์ ์ ์์ต๋๋ค.
์ฌ๊ตฌ์ฑ์ ํ๋๋ฐ๋ ๋จ๋ ๊ด๊ณ ๋ค์ cleanup
ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํธ์ด๋ด๋๋ก ํฉ์๋ค.
์์)
// ์ฃผ์: iframe์ ์์ ๋๊ฒ ๋๋ถ๋ถ์ ๊ด๊ณ ๋ฅผ ์ฝ๊ฒ ์์ ๋ฒ๋ฆด ์ ์๋ ๋ฐฉ๋ฒ์ด๊ธด ํ์ง๋ง
// ์ ํฌ๋ธ ์์๋ฑ์ ํฌํจํ ๋ด์ค๊ธฐ์ฌ์ ๊ฒฝ์ฐ, ๋จ์ํ iframe์ ์ก์์ ๋ ๋ฆฌ๋ฉด
// ์ค์ ๊ธฐ์ฌ ๋ด์ฉ์ด ์ฌ๋ผ์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
export const cleanup = () => $('#scrollDiv, iframe').remove();
cleanup
ํจ์๋ ์ฌ์ดํธ ์ฌ๊ตฌ์ฑ์ด ์ผ์ด๋ ๋ค, 1์ด ์ฃผ๊ธฐ๋ก ๋งค ๋ฒ ํธ์ถ๋ฉ๋๋ค.
๊ฐ์ํ๊ธฐ
just-news๋ ๊ธฐ์ฌ ๋ณธ๋ฌธ์ด ์ธ์ ์ ๋ถ ๋ก๋๋์๋์ง๋ฅผ ํน์ ํ ์ ์์ผ๋ฉด ์นํ์ด์ง๊ฐ ์ ๋ถ ๋ก๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค. ๋ก๋ํ ํ์๊ฐ ์๋ ๊ด๊ณ ๋ฑ์ด ์ ๋ถ ๋ก๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค๋ฉด ๋๋ก๋ ์ฌ์ฉ์๊ฐ ์ด๋ฏธ ๋ด์ค๋ฅผ ์ ๋ฐ์ ๋๋ ์ฝ์ ๋ค์์ ์ฌ์ดํธ ์ฌ๊ตฌ์ฑ์ด ์ด๋ค์ง๊ณค ํฉ๋๋ค.
์ด๋ฅผ ํผํ๊ธฐ ์ํด readyToParse
ํจ์๋ฅผ ๊ตฌํํ์ฌ just-news์๊ฒ ์ฌ์ดํธ ์ฌ๊ตฌ์ฑ์ ์์ํ ์์ ์ ์๋ ค์ค ์ ์์ต๋๋ค.
์์)
// ์๋ฅผ ๋ค์ด ๊ธฐ์ฌ ๋ณธ๋ฌธ์ด ์๋ `#article` ์๋ฆฌ๋จผํธ ๋ค์์
// ๋๊ธ์ด ๋ค์ด์๋ `#comments` ์๋ฆฌ๋จผํธ๊ฐ ์๋ค๊ณ ์นฉ์๋ค.
// `#comments`์๋ฆฌ๋จผํธ๊ฐ ๋ํ๋ฌ๋ค๋ ๊ฒ์ ๊ธฐ์ฌ ๋ณธ๋ฌธ์ ์ด๋ฏธ ๋ก๋๋ผ์๋ค๊ณ
// ๊ฐ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ํ์ฑ์ ์์ํ๋ฉด ๋ฉ๋๋ค.
export const readyToParse = () => waitElement('#comments');