Skip to content

[ refactor ] 요청 만료 삭제 시 Pod 삭제 추가 + 실패 시 redis 큐로 스케줄링 + slack 전달 #229

Description

@dongmin0204

🛠️ 계획된 리팩토링할 기능

RequestExpiryService.deleteExpiredRequest() — 만료된 Request의 인프라 리소스 정리 로직

🛠 사유

현재 운영 코드에서 만료 삭제 시 Pod 삭제를 아예 수행하지 않고 Account/PVC만 삭제한다.
그 결과 K8s에 좀비 Pod가 남아 GPU/CPU 리소스를 계속 점유하며, 운영자가 수동으로 정리해야 한다.

또한 Pod 삭제를 추가하더라도 실패 시 예외를 swallow하면 DB가 DELETED로 바뀌어 스케줄러 재시도 경로가 사라진다.

개선 방향:

  • Pod 삭제 로직 추가
  • Pod 삭제 실패 시 Slack 알림(1순위 안전망) + Redis Queue(best-effort 자동 재시도)
  • Slack이 primary, Redis는 보조 buffer (현재 Redis가 emptyDir 기반이라 유실 가능)
  • 별도 @Scheduled 스케줄러가 Redis Queue에서 RPOP → 재시도, max_retries 초과 시 Slack "수동 개입 필요" 발송

📝 check-lists

  • RequestExpiryServicePodService.deletePod() 호출 추가
  • Pod 삭제 실패 시 CleanupFailedEvent 발행
  • @TransactionalEventListener(AFTER_COMMIT)으로 Slack 알림 → Redis LPUSH 순서 처리
  • CleanupScheduler 구현 (10분 간격, RPOP → 재시도 → 실패 시 LPUSH/Slack)
  • PodService.deletePod()에서 @Transactional(propagation = MANDATORY) 제거
  • 테스트 코드 작성

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions