개발 slecs

여러 봇의 SEO 생성 실패 시 서비스 중단 방지 처리 추가

목차

SEO 메타 생성이 실패해도 서비스가 중단되지 않도록 fallback 로직을 여러 봇 모듈에 추가했다.

SEO 생성, 외부 의존성의 맞은편에서

SEO 메타 정보—페이지 제목, 설명, 키워드 같은 것들—를 자동으로 생성하는 로직은 보통 외부 API나 생성 서비스에 의존한다. 우리의 경우 다양한 도메인의 봇들(로또, 금융, 보험, 폼팩)이 각각 콘텐츠를 생성할 때 이 SEO 생성 기능을 호출하고 있었다. 문제는 명확했다: 외부 의존성이 일시적으로 실패하면, 그 봇 전체의 생성 흐름이 중단된다는 뜻이었다.

네트워크 지연, API 레이트 제한, 또는 생성 서비스의 일시적 장애—이런 상황은 피할 수 없다. 그리고 결국 SEO 메타 정보는 "있으면 좋고, 없어도 기본 기능은 작동하는" 성격의 기능이다. 핵심 로직을 SEO 생성의 성패에 맞추는 건 아키텍처 설계 관점에서 나쁜 결정이다.

네 봇 모듈에 동일하게 fallback 추가

이번 작업에서 변경한 파일들을 정리하면 이렇다:

모듈 파일명 용도
Lotto lotto/generate.py 로또 번호 생성 및 메타 작성
Money money/generate.py 금융 상품 정보 생성
Insurance insurance/generate.py 보험 상품 정보 생성
Formpack formpack/generate.py 폼 팩 생성 로직

각 모듈의 generate.py에서 SEO 메타 생성을 호출하는 부분을 찾아, 실패했을 때 기본값이나 단순한 대체 메타를 반환하도록 수정했다.

구체적인 패턴은 대략 이렇다:

def generate_seo_metadata(content):
    try:
        return seo_generate(content)
    except (TimeoutError, APIError, Exception) as e:
        logger.warning(f"SEO generation failed: {e}")
        # Fallback: 기본 메타 정보 반환
        return {
            "title": content[:50],
            "description": content[:160],
            "keywords": []
        }

이렇게 하면 SEO 생성이 실패해도 생성 프로세스 자체는 계속 진행된다. 메타 정보가 최적화되지 않겠지만, 서비스는 살아있다.

일관성 추구와 패턴화의 중요성

네 개의 봇 모듈에 거의 동일한 변경을 했다는 게 흥미로운 지점이다. 처음에는 각 모듈마다 다르게 처리할 수도 있었다—로또 봇은 더 관대한 fallback, 보험 봇은 더 엄격하게, 같은 식으로. 하지만 그렇게 되면 몇 가지 문제가 생긴다:

  • 유지보수 비용 증가: 나중에 fallback 로직을 개선할 때 네 곳을 모두 수정해야 함
  • 버그의 불일치: 한 모듈에서만 발견된 edge case가 다른 모듈에는 방치될 가능성
  • 신입 온보딩 혼란: 왜 봇마다 처리 방식이 다른가 설명하기 어려움

그래서 일관된 패턴을 유지하기로 결정했다. 이것이 초반에는 좀 더 시간이 걸리지만, 장기적으로 팀이 코드를 읽고 유지하는 비용을 크게 줄인다.

방어 로직의 계층화

생각해볼 점은, 이 fallback이 유일한 방어선이 아니라는 것이다:

  • 첫 번째 계층: 각 봇의 generate.py에서 SEO 생성 실패 처리
  • 두 번째 계층: 호출자 쪽에서 SEO 메타 부재에 대비 (클라이언트는 SEO 없이도 동작해야 함)
  • 세 번째 계층: 모니터링/로깅 (왜 실패했는지 추적)

이번 commit은 첫 번째 계층을 강화한 것이고, 자체로는 작은 변경이지만 시스템 복원력(resilience)을 한 단계 높인다는 의미를 가진다.

회고: 작은 변경이 주는 신뢰도

외부 의존성에 대한 fallback 추가는 자체로는 화려한 기능도, 고민이 많은 리팩토링도 아니다. 하지만 운영 관점에서는 생각보다 큰 안정성 향상을 가져온다. 특히 여러 모듈에 동시에 적용할 때, 일관성 있게 처리하면 미래의 유지보수와 확장이 훨씬 수월해진다.

이런 류의 방어 로직은 초기 개발 때보다는 서비스가 실제로 운영되면서 장애 사례를 마주칠 때 진가가 드러난다. "아, 여기서 SEO 생성이 실패했을 때를 처리하지 않았네"라는 발견이 생기는 순간, 이미 사용자에게 미치는 영향이 있다. 미리 대비해두는 게 값이다.


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

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

댓글 0

첫 댓글 달아줘.