Pinterest는 어떻게 소수의 엔지니어 팀으로 1,100만 명의 사용자 기반을 확장할 수 있었을까요? 그 답은 네 단계에 걸친 확장 과정에 숨어 있습니다. 이번 글에서는 Pinterest의 확장 여정을 살펴보고, 어떻게 그들이 복잡한 문제를 해결하며 성장할 수 있었는지 알아보겠습니다. 이 과정을 통해 확장성 있는 아키텍처 설계와 성장 전략에 대해 새로운 인사이트를 얻을 수 있을 것입니다.
소규모 팀의 시작
Pinterest의 확장은 소수의 엔지니어 팀으로 시작되었습니다. 이들은 제품의 프로토타입을 신속하게 제작하며 사용자의 요구에 빠르게 대응했습니다. 그 당시 Pinterest는 유연한 구조와 빠른 대응이 중요한 시점이었으며, 이를 통해 사용자의 피드백을 실시간으로 반영할 수 있었습니다.
급격한 사용자 증가에 따른 도전
Pinterest가 급속도로 성장하면서 사용자 수가 급증했습니다. 이로 인해 복잡하고 취약한 시스템이 문제로 대두되었죠. 그들은 시스템의 한계를 인지하고, 보다 확장 가능한 아키텍처로 전환할 필요성을 느꼈습니다. 이때의 도전은 모든 스타트업이 직면하는 문제와도 밀접하게 연관되어 있습니다. 빠른 성장은 언제나 시스템의 복잡성과 기술적 부채를 동반하기 마련입니다.
안정적인 아키텍처의 도입
성숙한 시기에 들어서면서 Pinterest는 MySQL, Memcache, Redis와 같은 확장 가능한 기술을 채택했습니다. MySQL은 안정성과 유지보수의 용이성 덕분에 선택되었으며, Memcache는 자주 액세스되는 데이터를 메모리에 캐싱하여 데이터베이스의 부담을 덜어주었습니다. 또한, Redis는 다양한 데이터 구조를 처리할 수 있는 유연성을 제공해줬습니다.
Pinterest는 이 시기에 단순하지만 확장성 있는 기술 아키텍처를 구축함으로써 성장을 이어갈 수 있었습니다. 이 시점에서의 선택은 기술적으로나 비즈니스적으로 매우 중요한 전환점이었습니다.
안정된 시스템에서의 수평적 확장
Pinterest는 성숙한 아키텍처를 기반으로, 이제는 사용자 기반이 증가할 때마다 리소스를 추가하는 수평적 확장에 집중했습니다. 이를 통해 추가적인 복잡성 없이 지속적인 성장을 이어갈 수 있었습니다. 수평적 확장은 오늘날 많은 대형 플랫폼이 선택하는 전략 중 하나입니다.
데이터베이스 확장: 클러스터링 vs 샤딩
Pinterest가 선택한 또 다른 중요한 전략은 데이터베이스 확장 방식이었습니다. 클러스터링과 샤딩 중에서 샤딩을 선택했는데, 클러스터링의 복잡성과 성숙도의 부족으로 인해 발생하는 문제를 해결하고자 했기 때문입니다.
샤딩은 데이터를 작은 청크로 나누어 각 청크를 독립된 서버에 배치하는 방식입니다. 이는 단순한 아키텍처와 독립적인 확장을 가능하게 하지만, 데이터베이스 수준의 조인과 트랜잭션 처리가 어려워 애플리케이션의 복잡성이 증가하는 단점도 있었습니다.
단계적 접근
Pinterest는 기존 아키텍처에서 샤딩 아키텍처로 전환하는 데 있어 매우 신중하게 접근했습니다. 이 과정에서 몇 가지 주요 단계를 거쳤는데요:
- MySQL 조인을 모두 제거하고 데이터 비정규화 및 캐싱을 적극 활용했습니다.
- 64비트 ID 기반 샤딩을 통해 데이터 라우팅을 단순화했습니다.
이러한 변화는 단계적으로 진행되었으며, 기능 동결 기간 동안 이루어졌습니다. 이를 통해 데이터 마이그레이션과 애플리케이션 로직의 변화를 성공적으로 관리할 수 있었습니다.
샤딩의 도전과 해결책
샤딩을 도입하면서도 Pinterest는 몇 가지 도전 과제에 직면했습니다. 마이그레이션 스크립트는 시간이 많이 소요되었고, 데이터 일관성을 유지하는 데에도 어려움이 있었습니다. 또한, 스키마 변경을 모든 샤드에 대해 적용해야 했고, 이를 통합하여 보고서를 생성하는 과정에서도 어려움이 따랐습니다.
그러나 Pinterest는 이러한 도전 과제들을 신중한 계획과 점진적인 변화를 통해 해결하며, 안정적인 확장성을 유지했습니다.
결론: 단순함이 곧 확장성이다
Pinterest의 확장 여정에서 가장 중요한 교훈은 단순함이 확장성의 열쇠라는 점입니다. 이해하기 쉬운 기술과 아키텍처는 문제 해결을 용이하게 하고, 급속한 성장 환경에서도 안정성을 유지할 수 있는 기반이 되었습니다.
성장하는 비즈니스를 운영하는 모든 기업에게 단순하지만 확장 가능한 시스템을 선택하는 것은 필수적인 전략일 것입니다. 이를 통해 확장성과 안정성을 동시에 확보할 수 있으며, 지속 가능한 성장을 이루는 데 중요한 역할을 할 것입니다.
참고 자료: Devansh, “How Pinterest Scaled to 11 Million Users With Only 6 Engineers”