목차7개 항목
출처와 참고
Donne Martin의 「The System Design Primer」에 제시된 개념과 사례를 주제별로 재구성한 노트다. 원본 라이선스는 CC BY 4.0이다.
객체지향 설계 문제와 접근법
객체지향 설계(OOD)는 한 서비스의 네트워크 아키텍처보다 도메인 객체가 어떤 책임과 협력을 갖는지에 초점을 둔다. 기본 자료구조와 상태·이벤트 흐름을 인터페이스로 분리한다.
| 객체 설계 과제 | 설계 초점 | 원본 실습 |
|---|---|---|
| 해시맵 | 키·버킷·충돌을 숨기는 자료구조 인터페이스 | Jupyter notebook |
| LRU 캐시 | 캐시 조회와 최근 접근 순서를 일관되게 유지 | Jupyter notebook |
| 콜센터 | 직원 등급·대기열·상담 요청의 책임 분리 | Jupyter notebook |
| 카드 덱 | 카드·덱·게임 규칙의 객체 분리 | Jupyter notebook |
| 주차장 | 차량·구역·주차 슬롯의 제약 모델링 | Jupyter notebook |
| 온라인 채팅 | 사용자·대화방·메시지·상태 관리 | Jupyter notebook |
원본의 OOD 항목은 Under development로 표시돼 있다. Circular array는 해답이 아니라 기여 요청만 있다.
부록의 계산 기준
| 지표 | 참고할 값 |
|---|---|
| 이진 단위 | 2^10 = 1,024; 2^20 = 1,048,576; 2^30 ≈ 10억 |
| ns / μs / ms | 1 μs = 1,000 ns; 1 ms = 1,000 μs |
| 부하 분석 | 메모리·디스크·네트워크·프로세싱 시간을 각각 측정 |
원문의 "Latency Numbers Every Programmer Should Know"는 장치 성능을 비교해 보는 과거의 교육용 지연 시간 표다. 최신 SSD·네트워크·CPU의 실제 레이턴시와 동일하다고 가정하지 않는다. 원표와 근거 보기.
추가 시스템 설계 질문 목록
- Design a file sync service like Dropbox: youtube.com
- Design a search engine like Google: queue.acm.org; stackexchange.com; ardendertat.com; stanford.edu
- Design a scalable web crawler like Google: quora.com
- Design Google docs: code.google.com; neil.fraser.name
- Design a key-value store like Redis: codecapsule.com; allthingsdistributed.com
- Design a cache system like Memcached: slideshare.net
- Design a recommendation system like Amazon's: hulu.com; ijcai13.org
- Design a tinyurl system like Bitly: n00tc0d3r.blogspot.com
- Design a chat app like WhatsApp: highscalability.com
- Design a picture sharing system like Instagram: highscalability.com; highscalability.com
- Design the Facebook news feed function: quora.com; quora.com; slideshare.net
- Design the Facebook timeline function: facebook.com; highscalability.com
- Design the Facebook chat function: erlang-factory.com; facebook.com
- Design a graph search function like Facebook's: facebook.com; facebook.com; facebook.com
- Design a content delivery network like CloudFlare: figshare.com
- Design a trending topic system like Twitter's: michael-noll.com; snikolov .wordpress.com
- Design a random ID generation system: blog.twitter.com; github.com
- Design a system that serves data from multiple data centers: highscalability.com
- Design an online multiplayer card game: indieflashblog.com; buildnewgames.com
- Design a garbage collection system: stuffwithstuff.com; washington.edu
- Design an API rate limiter: https://stripe.com/blog/
- Design a Stock Exchange (like NASDAQ or Binance): Jane Street; Golang Implementation; Go Implementation
실전 아키텍처 자료
- MapReduce - Distributed data processing from Google: research.google.com
- Spark - Distributed data processing from Databricks: slideshare.net
- Storm - Distributed data processing from Twitter: slideshare.net
- Bigtable - Distributed column-oriented database from Google: harvard.edu
- HBase - Open source implementation of Bigtable: slideshare.net
- Cassandra - Distributed column-oriented database from Facebook: slideshare.net
- DynamoDB - Document-oriented database from Amazon: harvard.edu
- MongoDB - Document-oriented database: slideshare.net
- Spanner - Globally-distributed database from Google: research.google.com
- Memcached - Distributed memory caching system: slideshare.net
- Redis - Distributed memory caching system with persistence and value types: slideshare.net
기업별 아키텍처 사례
- Amazon: Amazon architecture
- Cinchcast: Producing 1,500 hours of audio every day
- DataSift: Realtime datamining At 120,000 tweets per second
- Dropbox: How we've scaled Dropbox
- ESPN: Operating At 100,000 duh nuh nuhs per second
- Google: Google architecture
- Instagram: 14 million users, terabytes of photos; What powers Instagram
- Justin.tv: Justin.Tv's live video broadcasting architecture
- Facebook: Scaling memcached at Facebook; TAO: Facebook’s distributed data store for the social graph; Facebook’s photo storage; How Facebook Live Streams To 800,000 Simultaneous Viewers
- Flickr: Flickr architecture
- Mailbox: From 0 to one million users in 6 weeks
- Netflix: A 360 Degree View Of The Entire Netflix Stack; Netflix: What Happens When You Press Play?
- Pinterest: From 0 To 10s of billions of page views a month; 18 million visitors, 10x growth, 12 employees
- Playfish: 50 million monthly users and growing
- PlentyOfFish: PlentyOfFish architecture
- Salesforce: How they handle 1.3 billion transactions a day
- Stack Overflow: Stack Overflow architecture
- TripAdvisor: 40M visitors, 200M dynamic page views, 30TB data
- Tumblr: 15 billion page views a month
- Twitter: Making Twitter 10000 percent faster; Storing 250 million tweets a day using MySQL; 150M active users, 300K QPS, a 22 MB/S firehose; Timelines at scale; Big and small data at Twitter; Operations at Twitter: scaling beyond 100 million users; How Twitter Handles 3,000 Images Per Second
- Uber: How Uber scales their real-time market platform; Lessons Learned From Scaling Uber To 2000 Engineers, 1000 Services, And 8000 Git Repositories
- WhatsApp: The WhatsApp architecture Facebook bought for $19 billion
- YouTube: YouTube scalability; YouTube architecture
엔지니어링 블로그 참고 목록
- Airbnb Engineering
- Atlassian Developers
- AWS Blog
- Bitly Engineering Blog
- Box Blogs
- Cloudera Developer Blog
- Dropbox Tech Blog
- Engineering at Quora
- Ebay Tech Blog
- Evernote Tech Blog
- Etsy Code as Craft
- Facebook Engineering
- Flickr Code
- Foursquare Engineering Blog
- GitHub Engineering Blog
- Google Research Blog
- Groupon Engineering Blog
- Heroku Engineering Blog
- Hubspot Engineering Blog
- High Scalability
- Instagram Engineering
- Intel Software Blog
- Jane Street Tech Blog
- LinkedIn Engineering
- Microsoft Engineering
- Microsoft Python Engineering
- Netflix Tech Blog
- Paypal Developer Blog
- Pinterest Engineering Blog
- Reddit Blog
- Salesforce Engineering Blog
- Slack Engineering Blog
- Spotify Labs
- Stripe Engineering Blog
- Twilio Engineering Blog
- Twitter Engineering
- Uber Engineering Blog
- Yahoo Engineering Blog
- Yelp Engineering Blog
- Zynga Engineering Blog
- kilimchoi/engineering-blogs
학습 보조자료와 작성 중인 항목
- Anki 카드와 인터랙티브 연습은 기억 및 반복 문제 풀이에 활용한다.
- 설계 문제를 모두 암기하기보다, 여러 실제 아키텍처에서 공통되는 병목·트레이드오프를 비교한다.
- 원본에서 작성 중으로 표시한 MapReduce 분산 계산, Consistent hashing, Scatter gather 설명은 완성된 해설로 간주하지 않는다.
- 오래된 기업 사례·외부 사이트 URL은 역사적인 학습 레퍼런스다. 현행 제품 기능·최신 엔지니어링 환경의 증거로 사용하지 않는다.
원본 기록3
- GitHub 원문 (새 창) github.com/donnemartin/system-design-primer
- GitHub 원문 (새 창) github.com/donnemartin/system-design-primer/blob/ae9bbd7b02d90b9866215de185217d33f39ab733/README.md
- GitHub 원문 (새 창) github.com/donnemartin/system-design-primer/blob/ae9bbd7b02d90b9866215de185217d33f39ab733/solutions/system_design/pastebin/README.md