Uber의 Zero Growth Stack 전략이란
Uber는 "Zero Growth Stack"이라는 인프라 전략을 통해 비즈니스 수요 증가와 하드웨어 용량 증가를 의도적으로 분리하는 접근 방식을 채택했다. 일반적으로 트래픽이 늘어나면 서버를 증설하는 방식이 자연스럽게 여겨지지만, Uber는 이 공식을 깨는 것을 목표로 한다. 즉, 서비스 규모가 커지더라도 인프라 비용이 비례해서 증가하지 않도록 시스템 효율을 극대화하는 것이 핵심이다.
이 전략은 단순한 비용 절감을 넘어, 운영 규모를 조정하는 구조적 접근이다. 수요 급증 상황에서도 하드웨어를 추가하지 않고 소프트웨어 레벨에서 처리 효율을 높임으로써 확장성을 확보한다. 백엔드 엔지니어 입장에서 이 전략은 단순히 "더 좋은 서버를 쓰자"가 아닌, "지금 서버를 더 잘 쓰자"는 관점의 전환을 의미한다.
가비지 컬렉션 최적화가 핵심인 이유
Zero Growth Stack의 기술적 핵심 중 하나로 가비지 컬렉션(GC) 최적화가 명시적으로 언급된다. Java 기반 백엔드 서비스에서 GC는 레이턴시와 처리량 양쪽에 직접적인 영향을 미치는 요소다. GC 튜닝이 잘못되면 Stop-the-World 이벤트로 인해 응답 지연이 발생하고, 이를 커버하기 위해 불필요하게 서버를 더 투입하게 되는 악순환이 생긴다.
예를 들어 ZGC나 G1GC를 적절히 선택하고, 힙 크기와 GC 스레드 수를 서비스 특성에 맞게 조정하는 것만으로도 인프라 효율을 크게 개선할 수 있다.
# G1GC 기반 JVM 옵션 예시
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:G1HeapRegionSize=16m
-Xms4g -Xmx4g
실무에서는 GC 로그를 분석하지 않고 단순히 힙을 늘리는 대응을 취하는 경우가 많다. 하지만 Uber의 접근처럼 GC 동작을 정밀하게 이해하고 튜닝하는 것이 장기적으로는 훨씬 낮은 인프라 비용과 안정적인 성능을 가져온다.
비용 관리 체계와 실무적 시사점
Zero Growth Stack은 기술 최적화와 함께 비용 관리 체계를 병행 도입한다는 점도 주목할 만하다. 단순히 개발자가 코드를 잘 짜는 것을 넘어, 인프라 사용량과 비용을 가시화하고 팀 단위로 책임지는 구조를 갖춘다. 이는 FinOps 관점에서 엔지니어링 조직이 비용 효율에 직접 기여하는 문화를 만든다는 의미이기도 하다.
4년차 이상 백엔드 개발자라면 이 전략에서 두 가지 실천 포인트를 가져갈 수 있다.
- 프로파일링 습관화: CPU, 메모리, GC 지표를 주기적으로 측정하고, 병목이 생기기 전에 튜닝 기준을 마련한다.
- 용량 계획의 재정의: 트래픽 증가 = 서버 증설이라는 등식을 깨고, 코드 레벨 최적화로 해결 가능한 범위를 먼저 탐색한다.
- 비용 가시화: 서비스별 인프라 비용을 트래킹하고, 팀 내 리소스 사용에 대한 오너십을 갖는다.
정리
- Uber의 Zero Growth Stack은 하드웨어 증설 없이 소프트웨어 효율로 확장성을 확보하는 인프라 전략이다.
- GC 최적화는 Java 백엔드에서 레이턴시 개선과 인프라 비용 절감을 동시에 달성할 수 있는 핵심 수단이다.
- 기술 최적화와 비용 관리 체계를 병행함으로써, 엔지니어링 조직이 경제적 효율성에 직접 기여하는 구조를 만든다.