Skip to content

관측 기반 실패 code 의 일시 전환 - #126

Merged
m-a-king merged 2 commits into
mainfrom
fix/124-transient-observed-codes
Oct 19, 2026
Merged

m-a-king merged 2 commits into
mainfrom
fix/124-transient-observed-codes

Conversation

@m-a-king

@m-a-king m-a-king commented Oct 18, 2026 •

Copy link
Copy Markdown
Collaborator

한눈에

추출 실패 가운데 확정으로 응답하는 범위 축소

  • 이전: 추출 서비스가 받은 페이지에 상품이 없거나 읽을 수 없으면 확정 실패(422)로 응답
    • 호출 서비스가 재시도 없이 그 항목을 실패로 닫음
    • 원인: 봇 방어·앱 오류·빈 페이지로 받은 페이지 자체가 가짜일 수 있음
  • 받은 페이지를 보고 내린 판정은 전부 일시 실패(502)로 응답
    • 호출 서비스가 한 번 더 시도한 뒤 닫음
  • 확정 실패는 링크 형식 위반·내부망 차단·이미지 형식 셋만 남음
  • 머지하면 추출 서비스가 자동 배포됨

Situation

추가

  • 관측 기반 실패 code 의 일시 전환 #124
  • Gemini 쪽 재시도(같은 요청 즉시 재호출)와 모델 프로브의 일시 판정도 permanent 플래그를 읽고 있었음
    • 결과: 플래그만 바꾸면 깨진 LLM 응답에 즉시 재호출이 붙고, 프로브가 없는 모델을 일시 실패로 보고함
  • 응답 핸들러가 permanent 로 로그 레벨·스택 유무를 가름
    • 결과: 플래그만 바꾸면 상품 아님 같은 흔한 결과가 전부 warn+스택으로 바뀜

Task

분류 플래그 전환

Action

관측 기반 팩토리 9개의 permanent 전환

  • 상품 아님·값 불신·읽을 내용 없음(스냅샷 예외 3개)
  • 4xx·확정 취급 5xx·빈 셸·redirect 상한·깨진 redirect(fetch 예외 5개)
  • LLM 응답 불량(Gemini 예외)
  • 에스컬레이션 축(정적 fetch 에서 브라우저 렌더로)은 변경 없음

Gemini 예외에 즉시 재호출 축 분리

  • 재호출 여부는 code 가 LLM_UPSTREAM 인지로 판정하는 retryable()
  • Gemini 재시도 루프와 모델 프로브가 permanent 대신 이 축을 읽음
선택지 효과 비용
retryable 축 분리 (채택) Gemini 호출 수 이전과 동일 축 하나 추가
permanent 그대로 읽음 변경 없음 깨진 응답에도 즉시 재호출, 프로브가 없는 모델을 일시 실패로 보고

일시 실패 로그의 스택을 cause 있을 때로 한정

  • 일시 실패는 warn 유지
  • cause 없는 예외(상품 아님·읽을 내용 없음·redirect 상한)는 스택 없이 한 줄
    • 원인: 스택이 던진 자리만 가리켜 정보 0

확정 실패를 전제한 주석 정정

  • 폴백 추출기·게이트·스냅샷 등 11곳

Result

검증

  • 로컬 계약 사본을 관측 기반 실패 code 의 일시 전환 infra#146 의 proto 로 바꿔 실행
    • 계약 대조 테스트가 팩토리 플래그와 proto 옵션을 전수 비교함. 플래그를 되돌리면 이 테스트가 깨짐
  • 통합 테스트 4건의 기대 status 를 422 에서 502 로 바꿈

비용

  • 진짜 상품 아닌 링크(블로그 등)도 호출 서비스가 한 번 더 시도
    • fetch·LLM 호출(불완전이면 브라우저 승격까지) 건당 최대 2배
    • 사용자에게 실패가 보이기까지의 지연 2배
  • 위험: 호출 서비스 집계에서 이 9개가 retry_exhausted 로 모임. code 별 관측은 extractor 메트릭에서

후속


연관 이슈

@m-a-king m-a-king added the fix 외부 가시적 결함 수정 label Oct 18, 2026
@m-a-king m-a-king linked an issue Oct 18, 2026 that may be closed by this pull request
@m-a-king m-a-king self-assigned this Oct 18, 2026
@github-actions

Copy link
Copy Markdown

Discord 스레드 연동용 메타데이터입니다. discord-pr-bot 워크플로가 자동 생성하며, 수정·삭제하면 PR 과 Discord 알림 연동이 끊깁니다.

@coderabbitai

coderabbitai Bot commented Oct 18, 2026 •

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: c23656d2-9410-407d-a03d-5534ba5dfa56
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

- 팩토리 9개의 permanent 플래그를 false 로 전환, 응답 422 에서 502 로
  - 원인: 받은 페이지를 보고 내린 판정은 봇 방어·앱 크래시·빈 셸로 재료가 가짜일 수 있음
  - 결과: 호출자가 재시도 뒤 attempt 소진으로 닫음
  - 참조: TeamPiKi/infra#145
- Gemini 예외에 retryable 축 추가, GeminiRetry·모델 프로브가 permanent 대신 그것을 봄
  - 원인: LLM_INVALID_RESPONSE 가 일시가 되면 같은 요청의 즉시 재호출이 늘어남
  - 결과: Gemini 호출 수 이전과 동일
- 에스컬레이션 축은 변경 없음
- 확정 유지는 INVALID_URL·BLOCKED_HOST·IMAGE_UNSUPPORTED·MODEL_*
- 확정 실패를 전제한 주석 정정
- 핸들러가 cause 없는 일시 실패는 스택 없이 warn
  - 원인: 받은 페이지 기반 판정(상품 아님 등)이 일시로 바뀌며 전부 warn+스택이 됨
  - 원인: cause 없는 예외의 스택은 던진 자리만 가리켜 정보 0
- 프로브 테스트의 permanent 단언을 retryable 로 교체
  - 원인: Gemini 예외는 전부 permanent=false 라 단언이 공허함
- 카탈로그 테스트 주석의 422 전제 정정
@m-a-king
m-a-king force-pushed the fix/124-transient-observed-codes branch from c9389a7 to 10f5eea Compare October 19, 2026 11:16
@m-a-king
m-a-king merged commit 19147e0 into main Oct 19, 2026
2 checks passed
@m-a-king
m-a-king deleted the fix/124-transient-observed-codes branch October 19, 2026 11:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fix 외부 가시적 결함 수정

Projects

None yet

Development

Successfully merging this pull request may close these issues.

관측 기반 실패 code 의 일시 전환

1 participant