야간에 잠자는 개발 환경: Scale-to-Zero 도입과 시행착오 극복기

2026/08/12클라우드 인프라 구축·전환Kubernetes · Traefik · Sablier · ArgoCD

개발 및 스테이징 환경은 퇴근 이후나 주말 등 하루의 절반 이상 트래픽이 전혀 없습니다. 그럼에도 수십 개의 파드가 계속 떠서 유휴 리소스를 점유하고 클라우드 비용을 발생시킵니다.

이를 해결하기 위해 요청이 들어올 때 파드를 깨우고(Scale up), 일정 시간 유휴 상태가 지속되면 파드를 0개로 재우는(Scale-to-Zero) 메커니즘을 도입했습니다.

첫 번째 실패와 교훈: 준비 상태(Ready)의 불일치

라우팅 계층(Traefik) 미들웨어에서 요청을 가로채 파드를 깨우고, 파드가 준비되면 요청을 백엔드로 전달하도록 구성했습니다.

하지만 초기 구성에서 일부 요청이 비정상 응답을 반환하는 문제가 발생했습니다. 원인은 미들웨어가 판단하는 '파드 기동 완료' 시점과 인그레스가 실제 트래픽을 보낼 수 있는 '엔드포인트 등록' 시점 사이에 수 초간의 시간차(Race Condition)가 존재했기 때문입니다.

파드가 Ready 상태가 되었더라도 서비스 엔드포인트 목록에 IP가 등록되기 전까지는 트래픽을 보낼 수 없습니다. 이 미세한 간극을 해결하기 위해 엔드포인트 헬스체크 재시도 루프를 적용하여 완벽한 무손실 요청 처리를 구현했습니다.

두 번째 튜닝: 기본 폴링 주기 최적화로 지연 시간 단축

안정화 이후에도 파드가 이미 깨어있는 상태에서 첫 진입 시 5초 이상의 불필요한 대기 시간이 발생하는 현상을 발견했습니다.

원인은 미들웨어의 파드 상태 폴링 주기 기본값(5초)에 있었습니다. 세션이 맺어지지 않은 첫 요청은 파드가 멀쩡히 살아있어도 다음 5초 주기 타이머가 돌 때까지 대기 화면에 갇혀 있었던 것입니다. 폴링 주기를 밀리초 단위로 단축하여 실측 응답 시간을 0.09초로 정상화했습니다.

결과 및 효과

  • 비업무 시간 및 주말 동안 개발 클러스터 워크로드가 자동으로 절전 모드에 진입하여 컴퓨팅 리소스 비용을 크게 절감했습니다.
  • 업무 시간 중 첫 호출 시에만 약 5~10초의 초기 콜드스타트를 거치며, 이후에는 세션 유지를 통해 실시간으로 쾌적하게 개발할 수 있는 최적의 밸런스를 달성했습니다.

요약

Scale-to-Zero의 핵심은 절전 기술 자체가 아니라, 사용자 체감 지연 시간을 최소화하고 컴포넌트 간의 상태 불일치를 꼼꼼히 조율하는 세밀한 튜닝에 있습니다.