자동화 slecs

학습 사이트 콘텐츠 확장 시 CMS 메타정보 자동 동기화

목차

자동 학습 사이트의 콘텐츠를 확장하면서 동시에 CMS 페이지의 메타정보도 자동으로 업데이트하도록 만들었다. 수동으로 처리하던 부분을 스크립트화해서 일관성과 생산성 둘 다 확보한 작업이다.

자동화 이전의 문제점

내용이 계속 추가되는 학습 사이트의 경우, 보통 두 가지 작업이 동시에 일어난다. 하나는 실제 콘텐츠의 확장이고, 다른 하나는 SEO 및 소셜 공유를 위한 CMS 메타데이터(메타 디스크립션, 키워드, OG 태그 등) 관리다.

문제는 이 둘이 따로 관리되곤 한다는 것. 누군가는 learn-update 로직으로 콘텐츠를 갱신하고, 다른 누군가는 CMS 관리자 화면에서 메타정보를 수동으로 입력해야 했다. 규모가 작을 때는 괜찮지만, 학습 페이지가 증가하면서 다음 문제들이 생겼다:

  • 데이터 불일치: 메인 콘텐츠는 최신인데 메타는 구 버전 그대로
  • 운영 비용: 매번 새 항목을 추가할 때마다 메타정보 수작업이 필요
  • 일관성 부족: 담당자마다 다른 스타일로 메타를 작성할 가능성

팀 규모를 생각하면 이런 반복 작업은 누군가의 손을 거쳐야 하는데, 결국 프로덕션 버그나 다른 우선순위에 밀려 미뤄지기 쉬웠다.

자동화 설계와 구현

이 작업에서 핵심은 두 스크립트의 역할을 명확히 나누는 것이었다.

스크립트 역할 책임
scripts/learn-update.py 학습 콘텐츠 갱신 및 메타데이터 추출 실제 학습 페이지의 데이터 업데이트, 콘텐츠에서 메타 정보 추출
scripts/traffic-watcher.py 트래픽 분석 기반 콘텐츠 우선순위 결정 어떤 학습 항목을 먼저 확장할지 판단하고 신호 전송

learn-update.py는 단순히 콘텐츠를 갱신하는 것을 넘어, 동시에 cms_page 테이블의 메타 정보도 UPDATE하도록 설계했다. 예를 들어:

# 의사코드 형태
def update_learning_content(item_id, new_content):
    # 1. 학습 콘텐츠 갱신
    learning_db.update(item_id, new_content)

    # 2. 메타 정보 추출 및 CMS 동기화
    meta_title = extract_title(new_content)
    meta_desc = extract_description(new_content)

    cms_page.update(
        item_id=item_id,
        meta_title=meta_title,
        meta_description=meta_desc,
        og_image=generate_og_image(new_content),
        updated_at=now()
    )

traffic-watcher.py어떤 학습 항목을 다음에 확장할지를 트래픽 데이터 기반으로 결정한다. 사용자들이 자주 찾는 주제를 우선적으로 콘텐츠화함으로써 자동화된 확장도 실제 비즈니스 가치와 연결되도록 했다.

왜 이런 구조를 택했나

처음에는 하나의 거대한 스크립트로 "모든 것을 한 번에" 처리하는 것도 고려했다. 하지만 그렇게 하면:

  • 테스트 복잡도 증가: 콘텐츠 로직과 트래픽 분석이 섞여서 단위 테스트가 어려워짐
  • 재사용성 저하: 각 부분이 독립적으로 실행되거나 스케줄링될 수 없음
  • 배포 위험: 한쪽 로직 변경이 전체 자동화를 영향

따라서 책임을 분리했다. learn-update.py는 "콘텐츠 갱신이 있으면 메타도 자동 싱크"라는 단순한 책임을 가지고, traffic-watcher.py는 "어떤 항목을 갱신할지 판단"한다. 이렇게 하면 각 스크립트는 자신의 역할에만 집중하고, 변경이 필요할 때도 영향 범위를 좁힐 수 있다.

회고: 자동화의 두 가지 함정

이런 작업을 여러 번 하면서 배운 실전 팁이 두 가지다.

첫째, 메타 추출 로직이 항상 완벽할 수는 없다는 것. 자동으로 생성된 메타 디스크립션이 어색할 수도, 너무 길거나 짧을 수도 있다. 처음부터 "자동화 = 완벽함"이라고 기대하기보다, 수동 override 옵션을 항상 남겨두는 게 좋다. CMS에서 원하면 자동 값을 무시하고 커스텀 메타를 입력할 수 있도록 설계한다는 뜻.

둘째, 트래픽 기반 확장이 항상 올바른 우선순위는 아니다는 것. "많이 검색되는 주제 = 지금 추가해야 할 콘텐츠"가 반드시 성립하지 않는다. 사용자가 찾는 것이 없다고 해서 미래에도 필요 없는 건 아니니까. 따라서 traffic-watcher.py의 신호는 참고용이고, 최종 의사결정은 여전히 팀 차원에서 해야 한다.

이번 작업으로 정산(settle) 로직 같은 다른 자동 배치 작업들도 비슷한 방식으로 확장할 수 있을 것 같다. 콘텐츠 + 메타 자동화라는 패턴은 생각보다 광범위하게 쓸 수 있으니까.


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

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

댓글 0

첫 댓글 달아줘.