매일 아침 경쟁사 홈페이지 변동 사항을 AI가 요약해 준다면? 플레이라이트(Playwright)와 LLM을 결합한 트렌드 모니터링 구축법

매일 아침 출근하자마자 하는 일이 경쟁사 홈페이지들을 일일이 방문해 “뭐가 바뀌었지?” 눈동자를 굴리는 것이라면, 이제는 그 비효율에서 벗어날 때입니다.

비즈니스의 생존은 속도에 달려 있습니다. 경쟁사가 신제품을 출시했는지, 요금제를 개편했는지, 혹은 어떤 프로모션 배너를 새로 걸었는지 실시간으로 파악하는 것은 시장의 주도권을 잡는 데 매우 중요합니다. 하지만 수많은 경쟁 업체의 웹사이트를 매일 사람이 직접 손으로 들어가 분석하는 방식은 리소스 낭비일 뿐만 아니라 놓치는 정보가 생기기 마련입니다.

이 글에서는 모던 웹 브라우저 자동화 도구인 **플레이라이트(Playwright)**와 최근 눈부시게 발전한 **대형 언어 모델(LLM)**을 결합하여, 경쟁사 웹사이트 모니터링 자동화 파이프라인을 구축하는 구체적인 방법론을 다룹니다. 개발 지식이 아주 깊지 않더라도 시스템의 흐름을 이해하고 실제 업무에 적용할 수 있도록 설계 구조와 핵심 코드, 발생할 수 있는 문제점까지 깊이 있게 짚어봅니다.


기존 스크래핑 방식의 한계와 AI 모니터링의 등장

과거의 경쟁사 웹사이트 모니터링은 주로 BeautifulSoup이나 Selenium을 활용하여 특정 HTML 태그의 텍스트나 이미지 URL을 수집하는 방식이었습니다. 하지만 이 고전적인 방식은 두 가지 큰 한계에 부딪힙니다.

  1. SPA(Single Page Application)와 동적 렌더링의 증가: 리액트(React)나 뷰(Vue)로 구축된 최신 웹사이트들은 단순히 HTML 소스만 긁어와서는 내용을 읽을 수 없습니다. 브라우저 엔진이 자바스크립트를 실행하고 화면을 완전히 그린 뒤에야 데이터가 나타나기 때문입니다.
  2. 사소한 마크업 변경에도 무너지는 정규식/선택자: 개발자가 클래스(Class) 이름 하나만 바꾸거나 레이아웃을 조금만 수정해도, 수집 프로그램은 에러를 내뿜거나 엉뚱한 데이터를 가져옵니다.

이를 해결하기 위해 등장한 조합이 바로 **‘Playwright(헤드리스 브라우저)’**와 **‘LLM(비정형 데이터 분석)’**입니다.

크롤링 도구 및 변동 감지 방식 비교

구분 기존 방식 (Selenium + Rule-base) 모던 방식 (Playwright + LLM)
렌더링 지원 무겁고 느린 브라우저 제어 가볍고 빠른 비동기 제어 (크롬, 파이어폭스, 사파리 모두 지원)
데이터 추출 방식 특정 CSS 선택자(Selector)에 의존 화면 전체 텍스트 및 레이아웃을 통째로 파싱
변동 사항 판단 바이트(Byte) 단위 단순 비교 (줄바꿈 하나만 바뀌어도 알림) 맥락적 파악 (실질적인 가격 변동, 신규 기능 배너 추가 등만 필터링)
유지 보수 비용 웹사이트 UI 변경 시마다 스크립트 수정 필요 UI가 크게 바뀌어도 LLM이 알아서 구조적 정보 추출 가능

Playwright + LLM 모니터링 시스템 아키텍처

이 시스템의 최종 목표는 **“매일 아침 8시, 슬랙(Slack) 메시지로 ’경쟁사 A가 어제 요금제를 월 9,900원에서 14,900원으로 인상하고, 무료 체험 기간을 7일로 단축했습니다’라는 자연어 요약을 받는 것”**입니다. 전체적인 파이프라인은 다음과 같이 구성됩니다.

[스케줄러 (Github Actions / Cron)]


[Playwright 스크립터] ───► 웹사이트 접속 및 동적 렌더링 대기 ───► 스크린샷 및 텍스트 추출


[데이터 전처리] ───► HTML 태그 제거, 텍스트 정규화 (Token 절약)


[변동 사항 비교] ───► 어제의 데이터 vs 오늘의 데이터 Diff 수행


[LLM (GPT-5.1 등)] ───► 프롬프트를 통해 "비즈니스 관점의 핵심 변화" 요약 생성


[알림 채널 (Slack/Email)] ───► 마케터 및 기획자에게 요약 전송

1단계: Playwright로 동적 웹사이트 안정적으로 수집하기

Playwright는 마이크로소프트에서 개발한 브라우저 자동화 라이브러리로, 매우 빠르고 API가 직관적입니다. 특히 page.wait_for_selectorpage.wait_for_load_state 같은 기능을 지원해, 자바스크립트로 화면이 다 그려질 때까지 안전하게 대기한 후 데이터를 가져올 수 있습니다.

다음은 경쟁사 홈페이지의 랜딩 페이지 텍스트를 수집하는 핵심 파이썬(Python) 예시 코드입니다.

import asyncio
from playwright.async_api import async_playwright

async def capture_competitor_site(url):
    async with async_playwright() as p:
        # 브라우저 실행 (headless=True로 설정하여 백그라운드에서 실행)
        browser = await p.chromium.launch(headless=True)

        # 봇 탐지 우회를 위한 User-Agent 설정은 반드시 컨텍스트 단계에서 주입해야 한다.
        # page.set_extra_http_headers()는 HTTP 헤더만 바꿀 뿐 브라우저 내부의
        # navigator.userAgent 값은 그대로 남기 때문에, Cloudflare 등 최신 봇 탐지
        # 솔루션이 헤더와 navigator 값의 불일치를 감지해 차단할 수 있다.
        context = await browser.new_context(
            user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
        )
        page = await context.new_page()
        
        # 네트워크 연결이 안정화될 때까지 대기 (최대 30초)
        await page.goto(url, wait_until="networkidle")
        
        # 페이지 전체 스크린샷 저장 (시각적 검증용)
        await page.screenshot(path="competitor_today.png", full_page=True)
        
        # 본문 영역의 핵심 텍스트만 추출
        # 불필요한 script, style 태그를 제외한 눈에 보이는 텍스트를 가져옴
        raw_text = await page.inner_text("body")
        
        await browser.close()
        return raw_text

# 실행 테스트
# text_data = asyncio.run(capture_competitor_site("https://competitor.com"))

💡 실전 팁: 무한 스크롤 및 지연 로딩(Lazy Loading) 극복법

경쟁사 쇼핑몰이나 피드 형태의 웹사이트를 모니터링할 때는 스크롤을 끝까지 내려야 상품 정보가 다 노출됩니다. 이 경우 페이지를 여는 것뿐만 아니라 아래와 같은 “자동 스크롤 다운” 루틴을 플레이라이트 코드 내에 내장해야 모든 콘텐트를 온전히 수집할 수 있습니다.

async def scroll_to_bottom(page):
    current_scroll = 0
    while True:
        # 1000 픽셀씩 아래로 스크롤
        await page.evaluate("window.scrollBy(0, 1000)")
        await page.wait_for_timeout(1000) # 1초 대기
        
        new_scroll = await page.evaluate("window.pageYOffset")
        if new_scroll == current_scroll:
            break # 더 이상 스크롤이 내려가지 않으면 중단
        current_scroll = new_scroll

2단계: LLM 비용을 절약하는 데이터 정제 및 비교

수집한 웹사이트 데이터를 그대로 OpenAI나 Anthropic의 API에 던지면 엄청난 토큰(Token) 비용 폭탄을 맞게 됩니다. 수만 줄에 달하는 HTML 태그, 인라인 CSS 스타일 스타일, 무의미한 자바스크립트 코드 등이 포함되어 있기 때문입니다.

따라서 LLM에 데이터를 보내기 전에 다음과 같은 전처리 가공이 필수적입니다.

  1. 마크업 제거: HTML 태그를 모두 걷어내고 순수 텍스트만 추출하거나, 마크다운(Markdown) 형태로 변환하여 구조(Header, List 등)만 남깁니다.
  2. Diff 검사: 어제의 텍스트 파일과 오늘의 텍스트 파일을 단순 문자열 비교(difflib 등 사용)하여 변경된 부분이 전혀 없다면, LLM API를 호출하지 않고 종료합니다. 모니터링 대상 사이트가 자주 갱신되지 않는다면 이 사전 필터링만으로도 불필요한 LLM 호출 상당수를 걸러낼 수 있습니다.

정확한 절감 비율은 모니터링 대상 사이트의 갱신 빈도와 페이지 분량에 따라 달라지므로, 이 글에서 특정 수치를 단정하기보다는 자신의 모니터링 대상으로 며칠간 로그를 쌓아 직접 측정해 보는 것을 권장합니다.


3단계: 변동 사항 분석을 위한 프롬프트 엔지니어링

이제 어제 데이터와 오늘 데이터를 함께 LLM에 전달하며, “비즈니스 분석가”의 관점에서 해석해 달라고 지시할 차례입니다. 단순한 텍스트 줄바꿈 변경이나 날짜 업데이트(예: “Copyright 2023” -> “Copyright 2024”) 같은 잡음(Noise)은 걸러내고, 유의미한 변동만 요약하도록 가이드라인을 명확히 주어야 합니다.

권장 프롬프트 템플릿

귀하는 국내 최고의 IT 비즈니스 분석가이자 마케터입니다.
아래 제공된 두 개의 텍스트 데이터는 [경쟁사 웹사이트]의 어제 상태와 오늘 상태를 크롤링한 결과물입니다.

두 데이터를 꼼꼼히 비교하여 비즈니스 관점에서 의미 있는 "변동 사항"이 있는지 분석해 주세요.

[어제의 웹사이트 텍스트]
{yesterday_text}

[오늘의 웹사이트 텍스트]
{today_text}

---

[작성 규칙]
1. 사소한 날짜 변경, 기술적 스크립트 변경, 단순 오탈자 수정 등은 무시하세요.
2. 요금제 개편, 신규 기능/상품 출시, 프로모션 팝업 등록, 주요 문구(카피라이팅) 변경 사항을 집중적으로 찾아내세요.
3. 변동 사항이 있다면 다음 포맷으로 작성해 주세요:
   - 📢 핵심 변동 요약 (한 줄):
   - 🔍 상세 변경 내용 (비교식으로 기술, 예: 변경 전 -> 변경 후):
   - 💡 마케터로서의 시사점 분석:
4. 변동 사항이 없다면 단 한 줄로 "중요한 변동 사항이 발견되지 않았습니다."라고만 답변해 주세요.

이렇게 정밀하게 튜닝된 프롬프트를 통과하면, 복잡한 코드 비교 없이도 아주 깔끔한 한글 분석 리포트가 완성됩니다.


구축 시 마주할 수 있는 실전 장애물과 해결 전략

단순히 로컬 컴퓨터에서 크롤러를 한두 번 돌릴 때는 잘 작동하던 것들이, 매일 작동하는 자동화 서버에 올리면 다양한 이유로 실패하곤 합니다. 실제 구축 단계에서 반드시 염두에 두어야 할 핵심적인 예외 상황 대처법을 공유합니다.

1. 봇 탐지 솔루션 (Cloudflare, Akamai) 우회

규모가 있는 경쟁사들은 무분별한 크롤링을 막기 위해 봇 차단 솔루션을 적용합니다. 이 경우 일반적인 Playwright 요청은 403 Forbidden 에러를 마주하게 됩니다.

2. 다이내믹 광고 팝업 처리

웹사이트에 접속하자마자 뜨는 ‘오늘 하루 보지 않기’ 레이어 팝업이나 쿠키 동의 배너가 화면 전체를 가려 본문 텍스트 수집을 방해할 수 있습니다.

3. 무의미한 날짜 정보 필터링

“오늘의 날씨”, “남은 시간 00:23:45”, “실시간 리뷰 수: 12,402개” 같이 사이트가 로딩될 때마다 계속 변하는 데이터가 있으면 시스템은 매일 ’변동이 감지되었다’고 판단하게 됩니다.


도입 전 자가 점검 체크리스트

모니터링 자동화를 당장 시도하기 전에 아래 체크리스트를 확인해 보시기 바랍니다. 우리 비즈니스 상황에 이 기술이 얼마나 적합한지 가늠해 볼 수 있습니다.


마치며: 정보 전쟁에서의 자동화 우위

정보가 넘쳐나는 시대에 남들보다 반걸음 앞서 움직이는 원동력은 **‘의미 있는 정보의 정제 속도’**에서 나옵니다. 매일 반복되는 리서치 업무를 자동화 시스템에 맡기면, 실무자는 단순 수집과 캡처 작업에서 해방되어 **“경쟁사의 대응에 우리가 어떻게 반격할 것인가”**라는 본질적인 전략 기획에 더 많은 에너지를 쏟을 수 있습니다.

Playwright를 통한 신뢰성 높은 수집 인프라와 LLM의 똑똑한 해석 능력을 융합한 경쟁사 웹사이트 모니터링 자동화는 이제 마케팅팀과 기획팀에게 있어 선택이 아닌 필수 도구입니다. 작은 규모의 경쟁사 하나부터 시작해 이 파이프라인을 점진적으로 적용해 보시길 권합니다. 정보 비대칭성을 해소하는 순간, 비즈니스의 의사 결정 속도는 눈에 띄게 빨라질 것입니다.