Heroku에서 단일 PostgreSQL을 사용하는 Rails 모놀리스의 스케일링 교훈

Serious growth. Serious business. Powered by a monolithic Rails application - Tomasz Stachewicz [EN]

작성자
Visuality.pl
발행일
2025년 09월 02일

핵심 요약

  • 1 초기 스타트업은 불필요한 성능 최적화 대신 기능 개발에 집중해야 하며, 최적화는 실제 데이터 기반으로 진행해야 합니다.
  • 2 웹 애플리케이션 스케일링의 주요 병목은 데이터베이스이며, Heroku와 Rails 모놀리스는 높은 성장률에도 효과적으로 확장 가능합니다.
  • 3 PostgreSQL 성능 관리는 EXPLAIN ANALYZE 이해, 인덱스 및 캐싱 전략, 쿼리 플래너의 특성 파악을 통해 이루어져야 합니다.

도입

Tomas는 Ruby 개발자로서 Heroku 플랫폼에서 단일 PostgreSQL 데이터베이스를 사용하는 Ruby on Rails 모놀리스 서비스의 스케일링 경험을 공유했습니다. 월 10-20% 성장하는 AI 기반 대화 서비스 'Candy AI'를 사례로, 1.2TB 데이터베이스, 매일 100만 건의 메시지, 300GB 인덱스 등 엄청난 트래픽을 다루며 얻은 교훈과 접근 방식을 발표했습니다. Heroku와 모놀리스 아키텍처의 한계에 대한 일반적인 통념과 달리, 이 발표는 고성장 서비스에서도 해당 스택이 효과적일 수 있음을 보여주며 새로운 관점을 제시합니다.

본 발표는 고성장 서비스의 스케일링 과정에서 데이터베이스 관리와 성능 최적화의 실제적 도전 과제와 해결책을 다룹니다.

초기 스타트업의 성능 최적화 관점

  • 초기에는 시장 반응 확인을 위한 기능 개발 및 출시에 집중하며, 불필요한 성능 최적화는 사용 패턴 예측 불가로 낭비될 수 있습니다. 최적화는 실제 수치 기반으로, 경제적 기회비용을 고려해야 합니다.

Heroku의 Zero-Ops와 스케일링 병목

  • Heroku는 12 Factor App 원칙과 무상태(share nothing) 원칙으로 애플리케이션의 수평적 확장을 용이하게 합니다. 스케일링의 핵심 병목은 ‘공유 가능한 변경 가능한 상태’를 관리하는 데이터베이스(PostgreSQL)입니다.

PostgreSQL 성능 최적화 전략

  • EXPLAIN ANALYZE 마스터는 쿼리 실행 계획 이해와 비효율적 동작 식별에 필수적입니다.
  • 프레임워크와 DB 기본 설정을 신뢰하고, 외래 키 등 제약 조건에 인덱스를 반드시 활용해야 합니다.
  • P50, P90, P95, P99, P100 등 쿼리 성능 지표를 추적하되, P100(이상치)은 맥락을 이해하며 분석해야 합니다.
  • PostgreSQL의 데이터 캐싱을 활용하고, 인덱스 크기 및 성장률을 모니터링하여 RAM 부족으로 인한 성능 저하를 방지해야 합니다.
  • 쿼리 플래너의 통계 불일치나 특정 쿼리 패턴에서의 비효율성을 이해하고, VACUUM ANALYZE 및 쿼리 힌트 사용을 고려합니다.
  • 인덱스 크기가 사용 가능한 RAM을 초과할 때 데이터베이스 샤딩이나 파티셔닝을 고려할 수 있습니다.

현대적 관측 가능성을 통한 문제 해결

별도의 성능 테스트보다 프로덕션 환경에서 발생하는 성능 문제를 실시간으로 감지하고, 상세 데이터로 원인을 파악하여 신속하게 해결하는 반응적 접근 방식이 효과적입니다.

결론

본 발표는 Ruby on Rails 모놀리스가 Heroku와 단일 PostgreSQL 데이터베이스 환경에서도 고성장 서비스를 효과적으로 지원할 수 있음을 입증했습니다. 초기 스타트업은 불필요한 성능 최적화 대신 기능 개발에 집중하고, 최적화는 실제 데이터 기반으로 접근해야 합니다. 스케일링의 병목은 데이터베이스에 있으며, PostgreSQL의 EXPLAIN ANALYZE 이해, 인덱스 및 캐싱 전략, 쿼리 플래너 특성 파악이 필수적입니다. 별도의 성능 테스트보다 프로덕션 환경에서의 강력한 '관측 가능성'을 통한 반응적 문제 해결이 현대적 접근 방식임을 시사합니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!