Instagram이 수십억 사용자를 위한 태깅을 어떻게 확장하는가

발행: (2026년 1월 17일 오후 03:40 GMT+9)
3 min read
원문: Dev.to

Source: Dev.to

소개

사진을 “공유” 버튼을 누른 순간부터 친구에게 태그 알림이 도착하기까지 몇 밀리초 사이에 무슨 일이 일어나는지 궁금해 본 적 있나요? 겉으로 보기엔 태그 기능은 단순합니다. 하지만 Instagram 규모에서는 분산 시스템 설계의 교과서라 할 수 있습니다.

핵심 아키텍처: 네 기둥 접근법

1. 진실의 원천: 샤드된 PostgreSQL

  • How it works: 데이터가 하나의 거대한 테이블에 저장되는 것이 아니라 User_ID를 기준으로 수백 개의 데이터베이스에 분산됩니다.
  • Benefit: 게시물을 볼 때 시스템은 정확히 어느 샤드를 조회해야 하는지 알고 있어, 태그 좌표와 사용자명을 가져오는 작업이 번개처럼 빠르고 일관됩니다.

2. 속도 악마: Redis 캐싱

  • Role of Redis: 메인 데이터베이스를 두드려 “게시물 수”를 업데이트하는 대신, Instagram은 인‑메모리 데이터 저장소인 Redis를 사용합니다.
  • Benefit: 고속 점수판 역할을 하여 해시태그 카운트를 증가시키고 “핫 포스트” 목록을 저장함으로써 Explore 페이지가 즉시 로드됩니다.

3. 검색 엔진: Elasticsearch

  • Solution: Instagram은 캡션 데이터를 Elasticsearch에 파이프합니다.
  • Benefit: 단어를 Post ID에 매핑하는 역인덱스를 구축해 퍼지 매칭과 트렌딩 주제의 거의 즉각적인 탐색을 가능하게 합니다.

4. 신뢰할 수 있는 메신저: Apache Kafka

  • Role of Kafka: 메시지 큐 역할을 합니다. 메인 앱은 Kafka에 “메모를 남기고” 바로 다음 작업으로 넘어갑니다.
  • Benefit: 이 비동기 처리 덕분에 알림 서비스가 바쁘더라도 사진 업로드가 지연되지 않으며, 작업은 백그라운드에서 안정적으로 수행됩니다.

개발자를 위한 핵심 정리

  • Pick the right DB: 일관성을 위해 SQL을 사용하고, 탐색을 위해 NoSQL 또는 검색 엔진(예: Elasticsearch)을 활용하세요.
  • Shard early: 수평 확장은 “Instagram 수준” 트래픽을 견디는 유일한 방법입니다.
Back to Blog

관련 글

더 보기 »