Skip to content
IT/Tech-Guide

๋‹ค์Œ(Daum) ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์ˆ˜์ง‘์ด ์•ˆ ๋œ๋‹ค๊ณ ?

๋‹ค์Œ(Daum) ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์ˆ˜์ง‘์ด ์•ˆ ๋œ๋‹ค๊ณ ?

์‹œ๋ถ€๋ ˆ... ์†Œ๋ฆฌ๊ฐ€ ์ž๋™์œผ๋กœ ๋‚˜์˜ค๋Š” ์ด์œ ์™€ ์ง„์งœ ๋Œ€์‘๋ฒ•

์˜ค๋Š˜์€ ๋‹ค์Œ(Daum) ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ํฌ๋กค๋งํ•˜๋‹ค๊ฐ€ ๋ฉ˜ํƒˆ์ด ๋จผ์ € ํฌ๋กค๋ง๋‹นํ•œ ๋ถ„๋“ค์„ ์œ„ํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆ F12 ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋กœ ๋ณด๋ฉด ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ๋–กํ•˜๋‹ˆ ๋ณด์ด๋Š”๋ฐ, ๋ง‰์ƒ ์ฝ”๋“œ๋กœ ๊ธ์œผ๋ฉด ๊ฒฐ๊ณผ๊ฐ€ 0๊ฐœ.

"๋‚ด ์ฝ”๋“œ๊ฐ€ ์ž˜๋ชป๋๋‚˜? ์…€๋ ‰ํ„ฐ๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋‚˜? ์•„๋‹ˆ ์ด๋Ÿฐ ์‹œ๋ถ€๋ ˆ...์—ฌ๊ธฐ ๋ถ„๋ช…ํžˆ ์žˆ์ž–์•„!"

์ด๋Ÿฐ ํ˜ผ์žฃ๋ง์ด ๋‚˜์™”๋‹ค๋ฉด ๋‹น์‹ ์€ ์ •์ƒ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ๋‹ค์Œ์˜ ์‹œ๋ถ€๋ ˆ.. ๊ฐ™์€ ์ตœ์‹  ๋ Œ๋”๋ง ๋ฐฉ์‹์— ์žˆ์Šต๋‹ˆ๋‹ค.


๋‹ค์Œ(Daum)์ด ์“ฐ๋Š” ์ด ๊ดด์ƒํ•œ ๋ฐฉ์‹์˜ ์ •์ฒด

์š”์ฆ˜ ๋‹ค์Œ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ HTML์„ ๋œฏ์–ด๋ณด๋ฉด ์ด๋Ÿฐ ํƒœ๊ทธ๋“ค์ด ๋ณด์ผ ๊ฒ๋‹ˆ๋‹ค.

c-container
 c-card class="_cubic hydrated"
 c-title.../c-title
 /c-card
/c-container

โ“ div๋Š” ์–ด๋”” ๊ฐ€๊ณ  c-card๋Š” ๋ญ๋ƒ?

์ด๊ฑด ์›น ์ปดํฌ๋„ŒํŠธ(Web Components) ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ: _cubic hydrated

์ด ํด๋ž˜์Šค ํ•˜๋‚˜์— ๋ชจ๋“  ์ง„์‹ค์ด ๋“ค์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

1. Web Components

  • HTML์„ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ์บก์Аํ™”
  • ๋‚ด๋ถ€ ๊ตฌ์กฐ๋Š” ์ˆจ๊ธฐ๊ณ , ์™ธ๋ถ€์—๋Š” ์ปค์Šคํ…€ ํƒœ๊ทธ๋งŒ ๋…ธ์ถœ
  • React, Vue ๊ฐ™์€ SPA ์ฒ ํ•™์„ ์ˆœ์ˆ˜ ์›น ํ‘œ์ค€์œผ๋กœ ๊ตฌํ˜„

2. Hydration(ํ•˜์ด๋“œ๋ ˆ์ด์…˜)

  • ์„œ๋ฒ„์—์„œ ๋นˆ ๋ผˆ๋Œ€ HTML๋งŒ ๋จผ์ € ๋‚ด๋ ค์คŒ
  • ์ดํ›„ JavaScript๊ฐ€ ์‹คํ–‰๋˜๋ฉด์„œ DOM์„ ๋‹ค์‹œ ์กฐ๋ฆฝ
  • ํ™”๋ฉด์€ ์ด๋ฏธ ๋–ด๋Š”๋ฐ, ๋‚ด์šฉ์€ ๋‚˜์ค‘์— ์ƒ๊น€

์ฆ‰, "ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์™„๋ฃŒ = ๋ฐ์ดํ„ฐ ์ค€๋น„ ์™„๋ฃŒ" ๊ณต์‹์ด ๊นจ์ง„ ๊ฒƒ์ด ๋ชจ๋“  ๋น„๊ทน์˜ ์‹œ์ž‘์ž…๋‹ˆ๋‹ค.


๋‹ค์Œ ๋ฐฉ์‹์˜ ์žฅ๋‹จ์  (์†”์งํ•˜๊ฒŒ ๊นŒ๋ณด์ž)

์žฅ์  (๋‹ค์Œ ์ž…์žฅ: ๊ฐœ์ด๋“)

  • ๋ฏธ์นœ ์ˆ˜์ค€์˜ ์ˆ˜์ง‘ ๋ฐฉ์ง€ (Anti-Scraping): ๊ธฐ์กด .class, div a ๋ฐฉ์‹ ์ „๋ถ€ ๋ฌด๋ ฅํ™”
  • PC๋ชจ๋ฐ”์ผ์•ฑ ํ†ตํ•ฉ ๊ด€๋ฆฌ: ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ชจ๋“  ํ”Œ๋žซํผ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ ์ž์œ : HTML ๊ตฌ์กฐ๋ฅผ ๊ฑฐ์˜ ์•ˆ ๋ฐ”๊พธ๊ณ ๋„ UI ์‹คํ—˜(A/B Test) ๊ฐ€๋Šฅ

๋‹จ์  (์ˆ˜์ง‘ํ•˜๋Š” ์šฐ๋ฆฌ ์ž…์žฅ: ์ง€์˜ฅ)

  • ๋ Œ๋”๋ง ๋Œ€๊ธฐ ์ง€์˜ฅ: document.readyState ๊ฐ€ ์™„๋ฃŒ๋˜์–ด๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์„ ์ˆ˜ ์žˆ์Œ
  • ๊ธฐ์กด ์…€๋ ‰ํ„ฐ ์ „๋ฉธ:document.querySelector('.wrap_cont') ๊ฐ™์€ ๋ฐฉ์‹์€ ๋” ์ด์ƒ ํ†ตํ•˜์ง€ ์•Š์Œ
  • Shadow DOM์˜ ๋ฒฝ: ์ผ๋ถ€ ์ปดํฌ๋„ŒํŠธ๋Š” ์™ธ๋ถ€ ์ ‘๊ทผ์„ ์ฐจ๋‹จํ•˜์—ฌ Selenium์œผ๋กœ๋„ ์•ˆ ์žกํž ์ˆ˜ ์žˆ์Œ

๋Œ€์‘ ์ „๋žต: ๋‹ค ๊ทธ๋ฆด ๋•Œ๊นŒ์ง€ ์ง€์ผœ๋ณธ๋‹ค

์ด๋Ÿฐ ๊ตฌ์กฐ์— ๋Œ€์‘ํ•˜๋ ค๋ฉด "๋‹ค ๊ทธ๋ฆด ๋•Œ๊นŒ์ง€ ์กด๋ฒ„ํ•œ๋‹ค"๋Š” ๋งˆ์ธ๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ •๋‹ต ์ ‘๊ทผ

  • ์š”์†Œ๊ฐ€ ์‹ค์ œ๋กœ ๋“ฑ์žฅํ–ˆ๋Š”์ง€ ๊ฐ์‹œ
  • ์งง์€ ์ฃผ๊ธฐ๋กœ ๋ฐ˜๋ณต ์ฒดํฌ
  • ๋“ฑ์žฅํ•˜๋Š” ์ˆœ๊ฐ„ ์ฆ‰์‹œ ์ฒ˜๋ฆฌ

์‹ค์ „ ๋Œ€์‘ ๋กœ์ง (Chrome Extension / ์ฝ˜์†” ๊ณต์šฉ)

ํ•ต์‹ฌ ํ•จ์ˆ˜: ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋†ˆ์ด ์ด๊ธด๋‹ค

// ์š”์†Œ๊ฐ€ ๋‚˜ํƒ€๋‚  ๋•Œ๊นŒ์ง€ ๊ฐ์‹œํ•˜๋Š” ๋…ํ•œ ํ•จ์ˆ˜
const waitForElements = async (selector) = {
 for (let i = 0; i 10; i++) { // ์ตœ๋Œ€ ์•ฝ 3์ดˆ ๋Œ€๊ธฐ
 const found = document.querySelectorAll(selector).length;
 if (found 0) return found; // ๋ฐœ๊ฒฌ ์ฆ‰์‹œ ํƒˆ์ถœ
 await new Promise(r = setTimeout(r, 300)); 
 }
 return 0; // ๋๊นŒ์ง€ ์•ˆ ๋‚˜์˜ค๋ฉด ์‹คํŒจ
};

๋‹ค์Œ(Daum) ์ „์šฉ ๋งž์ถค ์‚ฌ๊ฒฉ ํŒ

  • ๋ Œ๋”๋ง ์™„๋ฃŒ ํƒ€์ด๋ฐ์— ์ž๋™ ๋Œ€์‘
  • ๊ตฌ์กฐ๊ฐ€ ์กฐ๊ธˆ ๋ฐ”๋€Œ์–ด๋„ ์ƒ์กด ํ™•๋ฅ ์ด ๋†’์Œ
  • Selenium, Puppeteer, ๋ธŒ๋ผ์šฐ์ € ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ์–ด๋””๋“  ์‘์šฉ ๊ฐ€๋Šฅ

ํ•œ ๋‹จ๊ณ„ ๋” ๋‚˜์•„๊ฐ„ ํŒ (๊ณ ๊ธ‰์ž์šฉ)

  • MutationObserver๋กœ DOM ๋ณ€ํ™” ์‹ค์‹œ๊ฐ„ ๊ฐ์ง€
  • Network ํƒญ์—์„œ JSON API ์ง์ ‘ ์ถ”์ถœ
  • ๋ชจ๋ฐ”์ผ User-Agent(UA)๋กœ ์š”์ฒญํ•˜์—ฌ ๊ตฌ์กฐ ๋‹จ์ˆœํ™”

ํ•˜์ง€๋งŒ ์ผ๋‹จ ๋˜๊ฒŒ ๋งŒ๋“œ๋Š” ์šฉ๋„๋ผ๋ฉด, ์˜ค๋Š˜ ์†Œ๊ฐœํ•œ waitForElements๊ฐ€ ๊ฐ€์„ฑ๋น„ ์ตœ๊ฐ•์ž…๋‹ˆ๋‹ค.


๋‹ค์Œ์ด ์•„๋ฌด๋ฆฌ ์›น ์ปดํฌ๋„ŒํŠธ๋กœ ๊ฐ์‹ธ๊ณ  Shadow DOM์œผ๋กœ ์ž ๊ฐ€๋„, ๊ฒฐ๊ตญ ๋ธŒ๋ผ์šฐ์ €์— ๊ทธ๋ฆฌ๋Š” ์ด์ƒ ๋ฐฉ๋ฒ•์€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธ€์ด ๋‹ค์Œ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์ˆ˜์ง‘ ๋•Œ๋ฌธ์— ๋ชจ๋‹ˆํ„ฐ๋ฅผ ํ•œ ๋Œ€ ๋” ์‚ด ๋ป”ํ•œ ๊ฐœ๋ฐœ์ž๋ถ„๋“ค๊ป˜ ์ž‘์€ ์‚ฌ์ด๋‹ค๊ฐ€ ๋˜์—ˆ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

Latest in this category

    ์ฟ ํŒกํŒŒํŠธ๋„ˆ์Šค API V2 ๊ธฐ๋ฐ˜์œผ๋กœ ์ตœ์‹ ์ƒํ’ˆ ๋ฐ ์ธ๊ธฐ์ƒํ’ˆ์ด ์ž๋™ ๋…ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

    AI ์ฑ—๋ด‡์œผ๋กœ ๊ด€๋ จ ์ •๋ณด๋ฅผ ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉˆ์ถค
    ๋…ธ๋ž˜ ์žฌ์ƒ ๋ฉˆ์ถค