팬텀 할당량: 최고 소프트웨어 개발자 효율성을 위한 GitHub Actions 스토리지 회수
Source: Dev.to
죄송합니다만, 번역하려는 본문 텍스트를 제공해 주시면 해당 내용을 한국어로 번역해 드리겠습니다. 현재는 링크만 제공되어 있어 실제 기사 내용을 확인할 수 없습니다. 텍스트를 복사해서 붙여 주시면 바로 번역해 드리겠습니다.
문제
- Warning email: 조직에 Actions 저장소 할당량이 거의 다 찼다는 알림 이메일이 도착했습니다.
- Usage report: 단일 리포지토리에서 하루에 약 45 GB‑시간이 사용된 것으로 나타났습니다.
- No recent runs: 해당 리포지토리는 10개월 이상 워크플로를 실행한 적이 없습니다.
- Expiration set: 몇 개의 오래된 워크플로 실행에 대해 아티팩트가 하루 후 만료되도록 설정되어 있었으며, UI에서는 이를 만료됨으로 표시했습니다.
Expectation: 저장소에 전혀 영향을 주지 않을 것이라 기대했습니다.
Reality: 청구 미터는 계속해서 증가했습니다.
Source: …
커뮤니티가 발견한 내용
1. 지연된 정리 프로세스
GitHub은 만료된 아티팩트를 삭제하기 위해 백그라운드 작업에 의존합니다. 아티팩트가 만료된 시점과 실제로 삭제되는 시점 사이에 상당한 지연이 발생할 수 있습니다. 이 중간 기간 동안 데이터는 여전히 디스크 공간을 차지하며 할당량에 포함됩니다.
2. “유령 파일” 오류
“Expired” ≠ “Deleted.”
BryanBradfo가 지적한 알려진 백엔드 이슈로, UI에서는 아티팩트가 만료된 것으로 표시되지만 실제 파일은 서버에 남아 있습니다. 이러한 “유령 파일”은 계속해서 청구됩니다.
3. 스토리지는 아티팩트만이 아니다
워크플로우 로그, 캐시 및 기타 메타데이터도 공간을 차지합니다. 이들은 아티팩트가 사라지거나 만료된 후에도 남아 전체 사용량을 증가시킬 수 있습니다.
4. 시간 가중 청구
ash‑iiiiish가 설명한 바와 같이, 스토리지 청구는 시간 가중 방식입니다. 아티팩트를 삭제하면 미래의 청구는 중단되지만, 그 시점까지 이미 사용된 스토리지는 소급해서 삭제되지 않습니다. 따라서 적시 정리가 필수적입니다.
즉각적인 (반응형) 해결책
오래된 워크플로 실행 수동 삭제
| 방법 | 단계 |
|---|---|
| GitHub UI | 1. 해당 저장소의 Actions 탭으로 이동합니다. 2. 각 오래된 워크플로 실행을 엽니다. 3. Delete를 클릭하여 실행, 해당 아티팩트 및 로그를 삭제합니다. |
| GitHub CLI | 대량 삭제를 위해 CLI를 사용합니다. 예시 (필요에 따라 날짜를 조정하세요): |
gh run list --status completed --json databaseId,createdAt,url \
| jq '.[] | select(.createdAt
참고: 삭제 후, GitHub의 스토리지 재계산을 위해 6–24 시간 정도 기다립니다. 시스템이 삭제를 인식하면 사용량이 감소할 것입니다.
선제적(예방) 전략
-
조직 수준의 적극적인 보존 정책
- 워크플로별 설정에만 의존하지 마세요.
- Organization Settings → Actions → General 로 이동합니다.
- Artifact and log retention 을 가능한 가장 짧은 기간(예: 7–14 일)으로 설정합니다. 이렇게 하면 모든 리포지토리에서 일관성을 유지할 수 있습니다.
-
정기적인 캐시 정리
- 오래된 캐시를 주기적으로 검토하고 삭제합니다.
- 캐시는 “스토리지” 요금으로 청구되지 않지만, 큰 캐시는 전체 데이터 용량을 늘리고 성능에 영향을 줄 수 있습니다.
-
대용량 출력물에 대한 대체 스토리지
- 장기 보관이 필요하거나 비정상적으로 큰 바이너리·아티팩트는 비용 효율이 높은 옵션을 고려하세요:
- GitHub Releases – 프로덕션 바이너리와 릴리즈 자산에 이상적입니다.
- 클라우드 스토리지 – AWS S3, Google Cloud Storage, Azure Blob 등, 비용 최적화된 장기 저장소.
- 장기 보관이 필요하거나 비정상적으로 큰 바이너리·아티팩트는 비용 효율이 높은 옵션을 고려하세요:
-
지속적인 모니터링
- 이메일 경고를 기다리지 마세요.
- 조직 수준에서 GitHub Actions 사용 보고서 를 정기적으로 검토합니다.
- 예상치 못한 높은 스토리지 사용량을 조기에 파악해 불필요한 비용 발생을 방지합니다.
TL;DR 엔지니어링 리더를 위한
- Expired ≠ Deleted – 고스트 파일이 청구를 지속시킬 수 있습니다.
- Cleanup isn’t instantaneous – 스토리지 메트릭이 삭제를 반영하기까지 지연이 발생합니다.
- Time‑weighted billing 은 과거 사용량이 청구서에 남는다는 의미입니다.
- Act now: UI 또는 CLI를 통해 오래된 실행을 대량 삭제하세요.
- Prevent future surprises: 조직 전체 보존 정책을 적용하고, 캐시를 정리하며, 대용량 아티팩트를 오프로드하고, 사용량을 지속적으로 모니터링하세요.
즉각적인 복구와 사전 예방 정책을 결합함으로써 팀은 GitHub Actions 스토리지를 제어하고 예산을 보호하며 개발자가 훌륭한 소프트웨어를 만드는 데 집중하도록 할 수 있습니다. GitHub Actions 스토리지에 대한 견고한 정책을 구현하는 것은 단순히 비용을 절감하는 것이 아니라, 자원 인식 문화를 조성하고 개발자를 핵심 업무에서 벗어나게 하는 방해 요소를 방지하는 것입니다.