본문 바로가기
인공지능(AI)

무인화 시대: 파이썬 크롤링과 LLM을 결합한 100% 자동화 콘텐츠 파이프라인(ETL) 구축기

by triz-hong 2026. 3. 11.

무인화 시대: 파이썬 크롤링과 LLM을 결합한 100% 자동화 콘텐츠 파이프라인(ETL) 구축기

개발자로서 가질 수 있는 가장 강력한 무기 중 하나는 '나를 대신해 24시간 일하는 자동화 시스템'을 구축하는 것입니다. 해외의 최신 IT 트렌드 뉴스나 주식 시황을 파이썬(Python)으로 수집하고, LLM(대형 언어 모델)이 이를 완벽하게 번역 및 요약한 뒤, 내 티스토리 블로그나 뉴스레터로 자동 발행하는 시스템. 오늘은 이 환상적인 무인화 파이프라인을 데이터 엔지니어링의 ETL(Extract, Transform, Load) 아키텍처 관점에서 실무 수준으로 완벽하게 해부해 봅니다.

1. 데이터 파이프라인의 뼈대: ETL 아키텍처란?

빅데이터 및 백엔드 실무에서는 데이터를 다루는 일련의 과정을 ETL이라고 부릅니다. 우리의 콘텐츠 자동화 봇 역시 정확히 이 아키텍처를 따릅니다.

  • Extract (추출): 해커뉴스(HackerNews), 테크크런치(TechCrunch) 등 타겟 소스에서 최신 영문 아티클의 원문 텍스트를 긁어옵니다.
  • Transform (변환): 추출된 지저분한 HTML 텍스트를 OpenAI API(GPT-4o)에 넘겨, 마크다운(Markdown) 포맷으로 예쁘게 번역하고 3줄 요약을 추가합니다.
  • Load (적재/배포): 가공이 완료된 완성본 텍스트를 티스토리 Open API나 워드프레스 REST API를 호출하여 최종 퍼블리싱(발행)합니다.

2. Extract: Playwright와 공식 API를 활용한 무손실 데이터 수집

초보자들은 보통 BeautifulSoup(BS4)을 사용하지만, 현대의 웹사이트들은 React나 Vue로 만들어진 SPA(Single Page Application)가 많아 자바스크립트가 렌더링되기 전에는 텍스트를 긁어올 수 없습니다. 또한 Cloudflare 같은 봇 방어 시스템에 쉽게 차단당합니다.

이를 해결하기 위해 현업에서는 PlaywrightSelenium을 Headless 모드(화면 없는 브라우저)로 구동하여 실제 사람처럼 동적 데이터를 렌더링한 후 수집합니다. 하지만 가장 안전하고 유지보수가 쉬운 시니어의 방식은, 웹 스크래핑(DOM 파싱)을 최소화하고 해당 서비스의 공식 오픈 API(예: HackerNews API, Reddit API)를 호출하여 깨끗한 JSON 데이터를 바로 받아오는 것입니다.

3. Transform: LLM 프롬프트 엔지니어링으로 '기자 봇' 만들기

수집된 원문을 어떻게 '맛깔나는 콘텐츠'로 가공할지가 핵심입니다. LLM에게 단순히 "번역해 줘"라고 하면 블로그 글로 쓰기엔 포맷이 엉망입니다. 구조화된 출력(Structured Output)을 강제해야 합니다.


# OpenAI API를 활용한 Transform 단계의 실무 프롬프트 예시
import json
from openai import AsyncOpenAI

client = AsyncOpenAI()

async def transform_article_to_blog_post(raw_text: str):
    system_prompt = """
    당신은 IT 테크 전문 기자입니다. 주어진 영문 기사 원문을 분석하여 다음 JSON 포맷으로 정확히 출력하세요:
    {
        "title": "클릭을 유도하는 한국어 블로그 제목",
        "summary": "바쁜 독자를 위한 3줄 핵심 요약 (불릿 포인트 사용)",
        "content": "본문 전체를 한국어로 자연스럽게 번역하되, 전문적인 IT 용어를 유지할 것",
        "tags": ["AI", "테크트렌드", "파이썬"]
    }
    반드시 마크다운 백틱(```json) 없이 순수한 JSON 문자열만 반환해야 합니다.
    """
    
    response = await client.chat.completions.create(
        model="gpt-4-turbo",
        messages=[
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": raw_text}
        ],
        response_format={ "type": "json_object" } # JSON 출력을 시스템 단에서 강제
    )
    
    # AI가 가공한 데이터를 파이썬 딕셔너리로 변환하여 Load 단계로 전달
    return json.loads(response.choices[0].message.content)

4. Load & Scheduling: 무중단 스케줄링 시스템 구축

파이썬 스크립트가 완성되었다면, 이제 "매일 아침 8시마다 이 코드를 실행해라"라는 스케줄러가 필요합니다. 내 노트북을 24시간 켜둘 수는 없으니 서버 환경이 필요합니다.

  • GitHub Actions (가성비 최고): 서버를 빌릴 필요 없이 깃허브의 CI/CD 도구인 Actions의 cron 트리거를 사용하면, 매일 정해진 시간에 내 파이썬 코드를 깃허브 서버가 공짜로 실행해 줍니다. 초기 사이드 프로젝트에 완벽합니다.
  • Celery & Redis (백엔드 통합): 웹 서비스 백엔드(FastAPI) 내부에 자동화 로직을 녹여내야 한다면, 비동기 작업 큐인 Celery를 도입하여 메인 서버의 부하 없이 백그라운드에서 크롤링이 돌게 만들어야 합니다.
  • Apache Airflow (엔터프라이즈급): 데이터 파이프라인이 수십 개로 늘어나면 작업 간의 의존성(A가 끝나야 B를 실행)과 실패 시 재시도 로직 관리가 헬파티가 됩니다. 이때 복잡한 워크플로우를 DAG(Directed Acyclic Graph)로 관리하는 Airflow를 도입합니다.

5. 실무 고도화: HITL(Human-In-The-Loop)과 에러 핸들링

100% 무인 자동화의 가장 큰 리스크는 '대참사'가 일어났을 때 수습하기 어렵다는 점입니다. 타겟 사이트의 UI가 바뀌어 에러 로그가 블로그 본문에 그대로 포스팅되거나, AI가 심각한 환각(Hallucination) 오류를 뱉어낼 위험이 항상 존재합니다.

이를 방어하기 위해 시스템 사이에 인간의 승인 단계(HITL: Human-In-The-Loop)를 끼워 넣는 것이 핵심입니다. 파이썬이 블로그에 '발행(Publish)'을 하기 직전, 내 슬랙(Slack)이나 텔레그램(Telegram) 봇으로 요약본과 [승인/거절] 버튼을 먼저 전송하게 만듭니다. 내가 아침 출근길에 스마트폰으로 봇이 보낸 요약을 쓱 읽어보고 [승인] 버튼을 누를 때만 최종 티스토리 API가 호출되도록 아키텍처를 설계하면 완벽하게 안전한 자동화 공장이 완성됩니다.

6. 마무리

크롤링, LLM 데이터 가공, 외부 API 연동, 그리고 스케줄링. 이 네 가지 요소가 결합된 ETL 파이프라인 구축은 단순한 블로그 포스팅 자동화를 넘어, 세상의 모든 데이터 기반 B2B SaaS 서비스를 만들 수 있는 가장 강력한 기술적 기반입니다. 지금 바로 나만의 관심사를 주제로 정보 큐레이션 파이프라인의 첫 줄을 코딩해 보세요.