[기타/블로그운영] Disqus API 403 대응: RSS 폴백 설계와 운영 포인트
업데이트:
문제/배경
Disqus 댓글 알림 자동화는 기본적으로 API(forums/listPosts)를 사용합니다.
하지만 GitHub Actions 러너 환경에서는 간헐적으로 HTTP 403 FORBIDDEN이 발생해 알림이 중단될 수 있었습니다.
원인
- 외부 러너 IP/환경에 따른 API 접근 차단 가능성
- API 단일 경로에만 의존한 구조
- 첫 실행 시 과거 댓글까지 한 번에 알림이 날아갈 위험
적용 코드/설정
1) 소스 모드: api, rss, auto
auto 모드에서 API 실패 시 RSS로 자동 전환되도록 구성했습니다.
parser.add_argument(
"--source",
choices=["auto", "api", "rss"],
default="auto",
help="Comment source mode: api, rss, or auto(api->rss fallback).",
)
2) API 실패 시 RSS 폴백
API 호출에서 예외가 나면 경고를 출력하고 latest.rss를 읽습니다.
except RuntimeError as exc:
if args.source == "api":
raise
print(f"Disqus API failed ({exc}). Falling back to RSS feed.", file=sys.stderr)
3) 상태 파일과 부트스트랩
첫 실행은 과거 댓글을 기준 상태로만 저장하고 메일 전송을 건너뜁니다.
bootstrap_run = len(known_comment_ids) == 0 and args.bootstrap_if_empty
if bootstrap_run:
write_state(state_path, next_known_ids)
검증 결과
- API 정상 시
source_used=api, 장애 시source_used=rss로 연속 운영 가능 - 최초 실행 대량 알림 폭주 없이 baseline 구축
- 이후 신규 댓글만 선별되어 메일 알림 전송
체크리스트
--source auto또는 환경변수 기본값이 auto로 설정되어 있는가- 상태 파일(
.cache/disqus-comment-alert/state.json)이 유지되는가 - 첫 실행 bootstrap 시 메일 미발송이 의도대로 동작하는가
- RSS 파싱 실패 시 로그로 원인 추적이 가능한가
- GitHub Actions 출력값(
source_used,new_comments_count)이 남는가
댓글남기기