# 인스타그램이 오직 3명의 엔지니어로 1400만 사용자를 확보한 방법

> Clean Markdown view of GeekNews topic #10916. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=10916](https://news.hada.io/topic?id=10916)
- GeekNews Markdown: [https://news.hada.io/topic/10916.md](https://news.hada.io/topic/10916.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2023-09-18T10:02:45+09:00
- Updated: 2023-09-18T10:02:45+09:00
- Original source: [engineercodex.substack.com](https://engineercodex.substack.com/p/how-instagram-scaled-to-14-million)
- Points: 47
- Comments: 3

## Topic Body

- 2010/10 부터 2011/11 까지 약 1년간 0명에서 1400만명 사용자에 도달. 엔지니어는 단 3명   
- 3가지 원칙을 따랐음   
  - 간단하게 유지할 것 (Keep things very simple.)  
  - 바퀴를 재발명하지 말 것 (Don’t re-invent the wheel.)  
  - 가능하면 입증된 견고한 기술을 사용할 것 (Use proven, solid technologies when possible.)  
### 사용자 관점에서 간단하게 스택 살펴보기   
- 초기 인프라는 AWS EC2에서 Ubuntu Linux  
- 인스타그램 앱은 iOS만 먼저 나왔고, Swift 발표 전이라 Objective-C + UIKit 일 가능성이 높음  
- 로드 밸런싱을 위해 Amazon의 Elastic Load Balancer와 3개의 NGINX 인스턴스를 사용하  
- 백엔드   
  - 어플리케이션 서버는 파이썬으로 개발되어서 Django 와 WSGI 서버로 Gunicorn  
  - Fabric 을 이용해서 여러 인스턴스에서 같은 명령을 동시 실행. 이를 통해 코드를 몇 초 안에 배포  
  - 25대의 고성능 CPU Extra-Large 머신을 구동. 모두 Stateless라서 필요하면 쉽게 더 추가 가능   
- 일반 데이터 저장소   
  - 관련된 포토 ID, 해당 ID의 실제 사진, 사진에 대한 사용자 데이터   
  - 어플리케이션 서버가 PostgreSQL로 부터 데이터 가져오기   
  - Django 와 PostgreSQL 간에 pgbouncer로 풀링   
  - 인스타그램은 시간으로 정렬가능한 ID를 이용함 : 41비트 밀리초 + 13비트 샤드ID + 10비트 자동 증가 시퀀스   
- 사진 저장소 : S3와 Cloudfront   
- 캐싱: Redis 와 Memcached   
  - 스마트한 해싱을 통해서 3억개의 키 매핑을 5GB 이하의 공간에 저장   
  - 그리고 2년후에 페이스북은 Memcached를 스케일해서 초당 수십억건의 요청을 확장한 방법에 대한 논문을 발표   
- Postgres와 Redis 모두 Master-Replica 모드로 실행. Amazon EBS 스냅샷으로 계속 백업   
- Push Notification 과 Async Task : 노티는 pyapns. Gearman 태스크 큐   
- 오류를 실시간으로 모니터링하기 위해 오픈 소스 Django 앱인 Sentry를 사용하였으며, 시스템 전체 메트릭스를 위해 Munin을 사용하였고, 외부 서비스 모니터링을 위해 Pingdom 과 PagerDuty를 사용

## Comments



### Comment 19319

- Author: botplaysdice
- Created: 2023-09-19T06:50:59+09:00
- Points: 2

인스타그램이 초창기에는 (고집스럽게 아이폰만 지원하던 시절) 팬시한 이미지 필터앱 정도의 느낌이었는데 말이죠. 이렇게 대박이 날줄은 상상도 못했습니다. (저의 상상력이 그정도였어요;;;)

### Comment 19301

- Author: princox
- Created: 2023-09-18T14:10:46+09:00
- Points: 1

Exit까지 경험한 제품들 비교 중에서 인스타그램이 1인당 엑싯 금액이 상당히 높은 상태였던 것을 본 기억이 있네요. 배울 점이 많다고 생각합니다.

### Comment 19278

- Author: neo
- Created: 2023-09-18T10:02:45+09:00
- Points: 2

###### [Hacker News 의견](https://news.ycombinator.com/item?id=37532355) 
- Instagram이 단 세 명의 엔지니어로 1400만 사용자를 확보하는 방법에 대한 기사
- Instagram이 Objective-C와 UIKit으로 작성되었다고 가정하는 언어에 대한 논쟁
- Instagram의 기술 스택의 단순성을 칭찬하는 일부 댓글, 많은 회사들이 비슷한 접근법으로 이익을 볼 수 있음을 제안
- "적절한 사람들을 선택하면 몇 명만 필요합니다. 그렇지 않으면 모두 필요하게 됩니다."라는 한 댓글에서 강조하는 팀원 선택의 중요성
- Instagram이 수백만 사용자의 피드를 즉시 업데이트하는 방법에 대한 호기심, 분산 시스템에서 읽기를 확장하는 것보다 더 도전적인 작업으로 간주
- Django, Postgres, Redis, 하드웨어 속도의 발전을 고려할 때 Instagram이 현대 기술로 얼마나 확장할 수 있었을지에 대한 추측
- 엔지니어링 팀의 크기에 대한 논의를 촉발하는 기사, 기본 CRUD 앱을 가진 일부 조직이 왜 수천 명의 엔지니어를 필요로 하는지 이해하기 어려워하는 일부 사람들
- Instagram의 자신만의 버전을 만들고 싶다는 욕구를 표현하는 일부 독자들 사이에서 영감의 감각
- Instagram의 초기 날에는 iOS 앱이라는 하나의 프론트엔드만 있었으며, 현대의 소셜 미디어 플랫폼보다 기능이 적었다는 점이 언급
- Instagram의 인프라 위에 Meta의 Threads 앱을 개발하는 최근의 내부자 경험 공유, 앱의 성공과 관련 팀의 크기 강조
