Skip to content

feat: backend-native timeout 계약 도입 - #8

Merged
emfpdlzj merged 1 commit into
mainfrom
feat/timeout-contract
Jul 27, 2026
Merged

feat: backend-native timeout 계약 도입#8
emfpdlzj merged 1 commit into
mainfrom
feat/timeout-contract

Conversation

@emfpdlzj

Copy link
Copy Markdown
Owner

요약

사용되지 않던 전역 TIMEOUT 설정을 제거하고, 각 backend가 실제로 강제할 수 있는 timeout만 지원하도록 동작 계약을 명확히 했습니다. timeout으로 판별된 실패는 안전한 상세 응답에서 reason="timeout"으로 구분됩니다.

변경 배경

기존 전역 DEPLOY_PROBES["TIMEOUT"]은 정의만 되어 있고 실행에 적용되지 않았습니다. Celery result backend 검사도 timeout 인자를 받았지만 실제 backend 호출에는 전달할 수 없어 오해를 만들었습니다. DB, storage, migration, custom check는 공통 방식으로 안전하게 중단할 수 없으므로 가짜 범용 timeout을 제공하지 않고 실제 client/backend 설정을 계약으로 삼습니다.

변경 내용

  • 사용되지 않는 최상위 TIMEOUT 설정을 제거하고 설정 시 deploy_probes.E019 오류 제공
  • Redis의 TIMEOUT을 연결 및 소켓 timeout으로 명시
  • Celery의 TIMEOUT을 broker 연결 및 worker ping timeout으로 명시
  • Celery result backend의 사용되지 않는 timeout 인자 제거
  • DB·migration·storage·custom check는 Django backend 또는 내부 client의 timeout 설정을 사용하도록 문서화
  • timeout 예외와 원인 체인을 판별해 안전한 상세 응답에 reason="timeout" 제공
  • Redis/Celery timeout 값 검증을 위한 E020~E022 시스템 검사 추가
  • check는 기존처럼 순차 실행하며 전체 probe 상한은 Kubernetes timeoutSeconds 등 외부 호출자가 관리하도록 문서화
  • 패키지 버전을 v0.5.0으로 갱신하고 변경 기록·지원 정책·다국어 문서 동기화

영향 범위

  • 최상위 DEPLOY_PROBES["TIMEOUT"]을 사용하던 설정은 제거해야 합니다.
  • 정상 응답 구조와 기본 상세 수준의 실패 응답은 유지됩니다.
  • DETAIL_LEVEL="safe"에서 timeout 실패 사유가 명확해집니다.
  • 병렬 실행과 결과 캐시는 이번 변경에 포함하지 않습니다.

검증

  • 전체 테스트 127개 통과, 커버리지 93%
  • Python 3.10/3.14 + Django 5.2, Python 3.12/3.14 + Django 6.0 조합 통과
  • Ruff 검사 및 포맷 검사 통과
  • MkDocs strict 빌드 통과
  • sdist/wheel 빌드, 메타데이터 검사, 격리 설치 smoke test 통과

리뷰 포인트

  • 전역 timeout 제거와 backend-native 계약이 운영 환경에서 예측 가능한지
  • timeout 예외 판별 범위가 주요 backend/client 예외를 충분히 포괄하는지
  • 순차 실행과 외부 전체 예산의 책임 경계가 문서에 명확한지

@emfpdlzj
emfpdlzj merged commit a8cf080 into main Jul 27, 2026
13 checks passed
@codecov-commenter

Copy link
Copy Markdown

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

❌ Patch coverage is 88.17204% with 11 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
django_deploy_probes/checks/celery.py 76.47% 3 Missing and 1 partial ⚠️
django_deploy_probes/checks/storage.py 66.66% 3 Missing ⚠️
django_deploy_probes/django_checks.py 88.00% 1 Missing and 2 partials ⚠️
django_deploy_probes/checks/redis.py 80.00% 1 Missing ⚠️

📢 Thoughts on this report? Let us know!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants