ํ† ์Šคํ„ฐ - ๋ชจ๋“  ๊ฒƒ์ด ํ‡ด๋น„ํ†ต์œผ๋กœ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. ํ•„ํ„ฐ๋งํ•˜๊ณ  ์ฆ๊ธฐ์„ธ์š”

IT ์ฃผ์ œ์— ๋Œ€ํ•œ ๋Ÿฌ์‹œ์•„ Q&A ๋ฆฌ์†Œ์Šค๊ฐ€ CIS์—์„œ ๊ฝค ์ธ๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์€ ์šฐ์—ฐํ•œ ์ผ์ž…๋‹ˆ๋‹ค. ํ† ์Šคํ„ฐ๊ธฐ. ๊ทธ๋Ÿฌ๋‚˜ ๋‚ด๊ฐ€ ๊ทธ๋ฅผ ์ž์„ธํžˆ ์•Œ์•„๊ฐ€๊ธฐ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ ๊ทธ๋Š” ๋ญ”๊ฐ€๋ฅผ ๋†“์น˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋ธŒ๋ผ์šฐ์ € ํ™•์žฅ ํ˜•ํƒœ๊ฐ€ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋งŒ๋‚˜์š”.

ะšะปัŽั‡ะตะฒั‹ะต ะพัะพะฑะตะฝะฝะพัั‚ะธ :

  • ์ œ๋ชฉ : ํ† ์Šคํ„ฐ ์ปดํฌํŠธ.
  • ์‚ฌ์šฉ์ž ํ†ต๊ณ„: ์†”๋ฃจ์…˜์ด ํฌํ•จ๋œ ์งˆ๋ฌธ์˜ ๋น„์œจ Habr์˜ ์นด๋ฅด๋งˆ; ํ”„๋กœํ•„ ์š”์•ฝ - ์ด ๋ชจ๋“  ๋‚ด์šฉ์€ Toaster์˜ ์งˆ๋ฌธ ๋ชฉ๋ก์— ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ณ ์‹œ: ์‚ฌ์ดํŠธ์—์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์•„์ด์ฝ˜, ํ‘ธ์‹œ ์•Œ๋ฆผ, ๋งŽ์€ ์„ค์ •์—์„œ ์‚ฌ์ดํŠธ๊ฐ€ ์—ด๋ ค ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์œ„ํ‚ค).
  • ํ•„ํ„ฐ: ์ˆ˜์‹ ๊ธฐ๋ฐ˜ ์กฐ๊ฑด: ์งˆ๋ฌธ์„ ์ˆจ๊ธฐ๊ณ  ์ƒ‰์ƒ์„ ์ง€์ •ํ•˜๊ณ  ์•Œ๋ฆผ์„ ํ‘œ์‹œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ์€ ๋…ผ๋ฆฌ์  ์กฐ๊ฑด ํ˜•์‹์œผ๋กœ ์œ ์—ฐํ•˜๊ฒŒ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค(์œ„ํ‚ค).
  • ์ธํ„ฐํŽ˜์ด์Šค : ์ •ํ™•ํ•œ ๋‚ ์งœ๋ฅผ ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜ ์งˆ๋ฌธ ๋ชฉ๋ก์— ๊ตฌ๋… ์ƒํƒœ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋“ฑ ์‚ฌ์†Œํ•œ ๊ฐœ์„ ์ด ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค.
  • Habr ์ธํ„ฐํŽ˜์ด์Šค: ์‚ฌ์†Œํ•œ ๊ฐœ์„ (์„ ํƒ ์‚ฌํ•ญ)(์˜ˆ: ์ฃผ์„์˜ ๋“ค์—ฌ์“ฐ๊ธฐ ๋ผ์ธ)
  • ์˜คํ”ˆ ์†Œ์Šค : ์ •๋ง๋กœ ์›ํ•œ๋‹ค๋ฉด ์ง์ ‘ ๋ฆฌ๋ฉ”์ดํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ถœ์ฒ˜).
  • ๋น„์–ด ์žˆ๋Š”: MIT ๋ผ์ด์„ผ์Šค.
  • ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„: 30-50MB, ํ† ์Šคํ„ฐ์˜ ์˜ต์…˜๊ณผ ์‚ฌ์šฉ ๊ฐ•๋„์— ๋”ฐ๋ผ ๋‹ค๋ฆ„
  • ํฌ๊ธฐ : v93์˜ ๊ฒฝ์šฐ 0.8.1KB(์••์ถ• ํ•ด์ œ, ์ถ•์†Œ๋˜์ง€ ์•Š์€ ์ฝ”๋“œ).
  • ๋ผˆ๋Œ€: ๋ˆ„๋ฝ๋˜๊ณ  ๊นจ๋—ํ•œ JS(๋ฏธ๋‹ˆ๋ฉ€๋ฆฌ์ฆ˜).
  • ์ฝ”๋“œ ํ’ˆ์งˆ: ํ‰๊ท , ์Šคํƒ€์ผ ํ˜ผํ•ฉ, ํฐ ๊ธฐ๋Šฅ, ์ง€์ €๋ถ„ํ•œ ํŠธ๋ฆญ, ์†Œ์ˆ˜์˜ ๋Œ“๊ธ€.
  • ๊ถŒํ•œ : toster.ru, habr.com, notifications, storage, unlimitedStorage

์ฒ˜์Œ์— ์ €๋Š” ๋‹จ ํ•˜๋‚˜์˜ ๋ชฉ์ ์œผ๋กœ ์ง์ ‘ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ "ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ํ‘œ์‹œ" ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ ค๊ณ  ํ–ˆ๋˜ ์งˆ๋ฌธ์˜ ๋น„์œจ์„ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋„๊ตฌ๊ฐ€ XNUMXKB์˜ ๊ดด๋ฌผ๋กœ ์„ฑ์žฅํ•  ๋•Œ๊นŒ์ง€ ์กฐ๊ธˆ์”ฉ ์ฒ˜์Œ์— ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  '๋ถˆํ•„์š”ํ•œ ๊ฒƒ์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค'๋Š” ์›์น™์„ ๋๊นŒ์ง€ ์ง€์ผฐ๋‹ค.

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

ํŠน์ • ์ฃผ์ œ์— ๋Œ€ํ•œ ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐํ•œ ๊ทœ์น™์˜ ์˜ˆ:

!tag("ะ‘ะปะพะบะธั€ะพะฒะฐะฝะธะต ั€ะตะบะปะฐะผั‹") && !contains(t,"ั€ะตะบะปะฐะผ") && contains(t,"ะฑะปะพะบะธั€ะพะฒ") && !tag("HTACCESS") || containsWord(t,"ั€ะบะฝ") || contains(t,"ั€ะพัะบะพะผะฝะฐะดะทะพั€") || contains(t,"ั€ะพัะบะพะผะฟะพะทะพั€") || contains(t,"ะณะพััƒะดะฐั€ัั‚ะฒ") || contains(t,"ะทะฐะฟั€ะตั‰ะตะฝ") || contains(t,"ะทะฐะฟั€ะตั‰ั‘ะฝ") || contains(t,"ะฟะธั€ะฐั‚ัะบ") || containsWord(t,"ะพะฑั…ะพะด") || containsWord(t,"ั€ะพัั‚ะตะปะตะบะพะผ") || containsWord(t,"ัั€ะพะฒะพะน") || containsWord(t,"ั€ั„") && tag("ะšะพะผะฟัŒัŽั‚ะตั€ะฝั‹ะต ัะตั‚ะธ") = notify

eval() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ๋ฐ”๋กœ ๋ง์”€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹น์‹ ์€๋ณ„๋กœ ์žฌ๋ฏธ๊ฐ€ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‚˜๋Š” ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ 5KB์˜ ์ฝ”๋“œ๋กœ ๋‚˜๋งŒ์˜ ๋ฒ„ํŒ€๋ชฉ์„ ์ž‘์„ฑํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ญ ํด๋ž€๋“œ ํ‘œ๊ธฐ๋ฒ•. ์ด๊ฒƒ์€ ๊ธฐ๋Šฅ๊ณผ ๊ตฌ๋ฌธ ์ธก๋ฉด์—์„œ ๊ณ ๋„๋กœ ์ค‘์„ฑํ™”๋œ JS๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ๊ทผ์— ๊ด€ํ•œ ๊ฒŒ์‹œ๋ฌผ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ† ์Šคํ„ฐ ํ™•์žฅ. ์ด์— ๋น„ํ•ด TE๋Š” ๋” ๋ฉ‹์ง„ ์ธํ„ฐํŽ˜์ด์Šค์™€ Toster Comfort์— ์—†๋Š” ์ผ๋ถ€ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ”๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚ด ํ™•์žฅ ๊ธฐ๋Šฅ์€ ๋ฆฌ์†Œ์Šค ์†Œ๋น„๋ฅผ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‘ ํ™•์žฅ ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋„๋ก ๊ท€์ฐฎ๊ฒŒ ํ•˜๋Š” ์‚ฌ๋žŒ์€ ์—†์œผ๋ฏ€๋กœ ์ถฉ๋Œํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

์ข‹์€ ์˜๋ฏธ์—์„œ TC๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด localStorage ๋ฐ JSON.stringify()๋ฅผ ํฌ๊ธฐํ•˜๊ณ  ์ผ๋ถ€ ์•„ํ‚คํ…์ฒ˜ ์†”๋ฃจ์…˜์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์ž‘์—…์ด ์ตœ์†Œํ•œ ๋‘ ๋ฒˆ ๊ฐ€์†ํ™”๋˜๊ณ  ์บ์‹œ ์ž‘์—…์ด 10๋ฒˆ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ์œ„์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์‚ฌ๋žŒ์€ ๋‚ด๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ €๋Š” "ํšจ๊ณผ๊ฐ€ ์žˆ์œผ๋ฉด ๊ฑด๋“œ๋ฆฌ์ง€ ๋งˆ์„ธ์š”"๋ผ๋Š” ์›์น™์„ ์ง€์ง€ํ•ฉ๋‹ˆ๋‹ค. ํœด๊ฐ€ ์ค‘์—๋„ ์ ๊ทน์ ์œผ๋กœ ์ด์Šˆ์™€ PR์— ์ฐธ์—ฌํ•˜์ง€๋งŒ ๋ฏธ๋‹ˆ๋ฉ€๋ฆฌ์ฆ˜์„ ํฌ์ƒํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๊ด€์‹ฌ์„ ๊ฐ€์ ธ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ถœ์ฒ˜: www.habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€