본 발표는 고성장 서비스의 스케일링 과정에서 데이터베이스 관리와 성능 최적화의 실제적 도전 과제와 해결책을 다룹니다.
초기 스타트업의 성능 최적화 관점
- 초기에는 시장 반응 확인을 위한 기능 개발 및 출시에 집중하며, 불필요한 성능 최적화는 사용 패턴 예측 불가로 낭비될 수 있습니다. 최적화는 실제 수치 기반으로, 경제적 기회비용을 고려해야 합니다.
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을 초과할 때 데이터베이스 샤딩이나 파티셔닝을 고려할 수 있습니다.
현대적 관측 가능성을 통한 문제 해결
별도의 성능 테스트보다 프로덕션 환경에서 발생하는 성능 문제를 실시간으로 감지하고, 상세 데이터로 원인을 파악하여 신속하게 해결하는 반응적 접근 방식이 효과적입니다.