자동화 slecs

위키 데이터 자동 추출·정제·저장 파이프라인 구축

목차

최근에 위키 같은 외부 소스에서 데이터를 수동으로 추출하고 정제해서 DB에 넣던 작업을 자동화했다. 위키에서 Claude Sonnet으로 콘텐츠를 처리하고, 출처를 함께 기록한 상태로 upsert하는 봇을 3회차에 걸쳐 다듬었다.

왜 자동화가 필요했나

처음엔 팀이 주기적으로 위키 페이지를 열어서 필요한 항목들을 읽고, 손으로 정제한 뒤 DB에 입력하는 방식이었다. 몇 십 개 항목이면 수시간이 걸리고, 위키 쪽이 업데이트될 때마다 다시 하는 수밖에 없었다. 특히 같은 작업을 반복하는데 휴먼 에러가 섞이고, 일관성도 떨어졌다. 이런 상황에선 자동화가 투명한 선택이었다.

데이터 시딩(seeding) 자체는 어렵지 않은 작업이지만, 반복되는 일일수록 봇에 맡기는 게 팀의 집중력을 아끼는 방법이다. 특히 정제 단계에서 일정한 규칙을 적용해야 하는데, 그걸 코드로 명확히 하면 휴먼 에러를 원천 차단할 수 있다.

위키→추출→정제→upsert 파이프라인

구축한 파이프라인의 흐름은 다음과 같다:

단계 역할 상세
위키 수집 외부 위키에서 raw 데이터 가져오기 크롤링 또는 API 호출
Sonnet 추출 Claude Sonnet으로 필드 정제/구조화 텍스트→구조화 JSON
출처 기록 각 데이터에 원본 위키 URL/버전 메타 감사·추적·신뢰도
Upsert DB 기존 데이터 업데이트 또는 신규 추가 멱등성 보장

seed_groups.py 가 핵심이다. 이 모듈은 위키 페이지를 순회하면서 Sonnet API를 호출해 각 항목을 정제하고, 출처 정보(URL, 추출 시각, 버전)를 메타데이터로 담아 DB에 upsert한다. 3회차 반복 과정에서 봇의 프롬프트를 개선했고, 에러 처리와 재시도 로직도 강화했다.

# seed_groups.py 의 개념적 흐름
for wiki_page in fetch_wiki_pages():
    raw_content = parse_wiki_page(wiki_page)

    # Claude Sonnet으로 정제
    structured_data = call_sonnet_api(
        prompt=f"이 위키 콘텐츠를 구조화해줘: {raw_content}"
    )

    # 출처 메타 포함
    record_with_source = {
        **structured_data,
        'source_url': wiki_page.url,
        'source_timestamp': now(),
        'source_version': wiki_page.version,
    }

    # DB upsert
    upsert_to_database(record_with_source)

출처 추적이 단순 사치가 아닌 이유

upsert할 때 출처를 함께 기록하는 게 코드 라인상으로는 몇 줄일 뿐이지만, 운영 관점에선 상당히 중요하다. 나중에 데이터가 정확하지 않다는 피드백이 오면, 어느 위키 버전에서 온 데이터인지 추적할 수 있다. 위키가 자주 수정되는 환경이라면 특히 그렇다.

또한 감사(audit) 목적으로도 쓸 수 있다. "지난달에는 몇 개 항목이 변경됐나" "이 항목의 최신 버전은 언제 추출했나" 같은 질문에 바로 답할 수 있다. 출처 없이 데이터만 저장했다면 위키와 DB의 동기화 상태를 알기 어렵다.

무엇보다 신뢰도다. 자동 봇이 뽑아낸 데이터라고 해도, 언제·어디서·뭘 바탕으로 생겼는지 투명하게 기록해두면 팀이 그 데이터를 쓸 때 더 안심한다. "이건 3일 전 공식 위키 v2.1에서 온 거야" 하면 신뢰가 생긴다.

반복 개선과 학습

"3번"이라고 명시한 이유는 처음 버전 만들고, 실제 데이터를 먹여봤을 때의 엣지 케이스들을 잡고, 그다음 Sonnet 프롬프트를 다듬었기 때문이다. 첫 번째 실행에선 특수 문자나 형식 오류가 있었고, 두 번째에는 정제 규칙을 더 명확히 했고, 세 번째에 위키의 다양한 레이아웃까지 처리하도록 개선했다.

이런 식의 점진적 개선은 자동화 봇을 다룰 때 피할 수 없다. 처음부터 완벽하게 설계할 순 없고, 실제 데이터를 만나봐야 문제들이 드러난다. 그래서 README.md도 계속 업데이트해서, 팀이 이 봇을 쓸 때 주의할 점들(Sonnet 호출 제한, 위키 접근 권한, upsert 멱등성)을 명시했다.

외부 소스에서 데이터를 긁어 쓰는 작업은 대부분 이런 구조를 따른다. 소스→추출→정제→저장. 거기에 출처 추적만 덧붙이면 운영 안정성이 확 달라진다. 이걸 한 번 잘 만들어두면, 다른 위키나 외부 데이터 소스가 생길 때도 같은 패턴으로 확장하기 쉽다.


🛒 이 글과 어울리는 추천 상품

*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.

댓글 0

첫 댓글 달아줘.