다이어트·장례·반려동물 봇 SEO 생성 실패에 폴백 추가
목차
diet, funeral, pet 봇 세 서비스의 SEO 생성 로직에 fallback 을 추가했다. 한 번의 API 호출 실패가 전체 서비스 영향으로 이어질 수 있다는 판단 때문이었다.
SEO 생성, 왜 실패에 대비해야 할까
봇 서비스들이 제공하는 콘텐츠의 검색 노출성은 순수 기능 동작만큼 중요하다. 특히 다이어트, 장례, 반려동물 정보처럼 사용자가 검색으로 찾아오는 서비스라면 더욱 그렇다. 이 서비스들의 seo_generate 함수는 자동으로 검색 엔진 친화적인 메타 정보나 설명을 생성하는 역할을 한다.
문제는 이 생성 로직 자체가 외부 API 호출이거나 복잡한 처리 파이프라인이라는 것. 네트워크 장애, API 서버 응답 지연, 타임아웃 등이 언제든 일어날 수 있다. 그런데 SEO 생성 실패가 발생했을 때 기존 코드가 어떻게 대응했는지 확인하니 명확한 계획이 없었다. 즉, 전체 요청이 실패하거나 부분적으로 broken state 에 빠질 위험이 있었다.
견고함의 패턴: fallback 추가
따라서 세 봇 모두에 동일한 fallback 패턴을 적용했다. SEO 생성에 실패하면:
- 기본값(default SEO 정보)으로 대체하거나
- 부분적으로라도 기존 데이터를 활용하거나
- 재시도 로직을 거쳐 나중에 비동기로 처리하거나
이런 식으로 서비스 전체가 중단되지 않도록 보장하는 것. "SEO가 완벽하지 않더라도 서비스는 계속 돈다"는 원칙이다.
| 처리 시점 | 전략 | 장점 | 단점 |
|---|---|---|---|
| 동기 fallback | 실패 → 기본값 반환 | 즉시 처리, 간단함 | SEO 품질 저하 가능 |
| 비동기 재시도 | 실패 → 큐에 저장 → 나중 처리 | 나중 재시도로 정합성 개선 | 구현 복잡도 증가 |
| 부분 활용 | 이전 캐시 데이터 재사용 | 낮지 않은 품질 유지 | 오래된 정보 노출 |
이번에는 동기 fallback + 로깅을 선택했다. 실패했을 때 충분한 로그를 남겨서 나중에 패턴을 분석하고, 진짜 문제가 반복된다면 그때 비동기 재시도로 업그레이드할 수 있도록.
세 파일, 같은 패턴: 코드 일관성의 중요성
diet, funeral, pet 세 파일에 거의 같은 change 를 적용한 것 자체가 중요한 신호다. 각 봇이 독립적으로 개발되다 보니 SEO 생성 로직도 조금씩 다를 수 있었는데, 이번 기회에 세 곳 모두 같은 resilience pattern 을 적용해서 일관성을 맞췄다.
처음엔 "3개 파일을 왜 일일이 수정했나, 공용 모듈로 빼지?"라는 생각도 들 수 있다. 하지만 현실적으로:
- 각 봇의
generate.py는 도메인별 비즈니스 로직이 섞여 있어서 쉽게 분리할 수 없음 - 지금 당장 공용화하는 것보다 현 상태에서 패턴 일관성을 확보하는 게 우선
- 나중에 진짜 중복이 명확해지면 그때 리팩토링하는 게 YAGNI 원칙에 부합
팀 코드리뷰 때도 이 점을 강조했다. "같은 패턴 3곳에 적용했으니, 테스트도 3곳 모두 돌려보고, 로그 포맷도 일관되게 봤으니까 모두 확인해 달라"는 식으로. 중복 적용이지만 일관성이 보장되는 거라는 뉘앙스.
회고: 점진적 개선과 팀 신호
이 작업에서 배운 점:
-
작은 기능 개선도 타이밍이 중요하다. 여러 봇이 비슷한 문제를 가지고 있다는 걸 인지했을 때, 일일이 처리하기보다 한 번에 정리하는 게 효율적.
-
fallback 은 "나중에" 가 아니라 처음부터 설계에 포함해야 한다. 처음 SEO 생성 로직을 만들 때 이미 fallback 을 고려했으면, 나중에 수정할 필요가 없었을 텐데. 신입이나 새로운 팀원에게 "외부 API 호출하는 건 항상 실패 시나리오를 먼저 그려" 라는 걸 자주 강조하는 이유.
-
로그/모니터링과 함께 가야 한다. fallback 이 작동하면 알아야 한다. 조용히 기본값으로 돌아가기만 하면 나중에 "왜 요즘 검색 노출이 떨어졌지?" 할 때 원인 파악이 힘들다.
다음은 이 fallback 이 실제로 얼마나 자주 발동하는지, 그리고 정말 전체 요청 실패가 줄었는지를 대시보드에서 추적하는 것.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.