TL;DR

  • System Design in Depth는 확장 가능하고 분산된 시스템의 엔지니어링 원리를 배우려는 개발자를 위한 무료 오픈소스 학습 플랫폼임.
  • 커리큘럼은 6개 트랙, 18개 모듈, 200개 학습 단위로 구성되며 32개 시뮬레이터, 15개 직접 구현 과제, 영상 470개, 자기 점검 질문 600개를 포함함.
  • 일관성 해싱, B-Tree와 LSM-Tree, 쓰기 선행 로그(WAL), Raft 리더 선출, 부분 장애와 시스템 성장에 따른 절충점을 다룸.
  • 각 학습 단위는 직관 설명, 영상, 다이어그램과 노트, 음성 해설, 점검 질문, 실행 가능한 코드로 구성되며 권위 있는 출처를 인용함.
  • 아키텍처 개념을 시뮬레이터와 직접 구현으로 살펴보며 장애 처리, 일관성, 동시성, 운영상 절충점을 학습하는 방식임.

이 플랫폼을 만든 이유

  • 많은 시스템 설계 자료가 어떤 구성 요소를 사용할지는 설명하지만, 구성 요소가 내부에서 어떻게 작동하는지는 설명하지 않음.
  • 로드 밸런서, 캐시, 메시지 큐가 그려진 다이어그램만으로는 다음 내용을 파악하기 어려움.
  • 일관성 해싱(consistent hashing)이 데이터를 분산하는 방식
  • 데이터베이스가 B-Tree 또는 LSM-Tree를 사용하는 이유
  • 쓰기 선행 로그(write-ahead log)가 내구성을 제공하는 방식
  • Raft 리더 선출 과정에서 발생하는 일
  • 분산 시스템이 부분 장애를 처리하는 방식
  • 시스템이 성장할 때 나타나는 절충점
  • System Design in Depth는 상위 수준의 아키텍처 결정과 그 결정이 작동하도록 하는 하위 수준의 메커니즘을 연결하는 학습 플랫폼임.
  • 플랫폼 주소: https://system-design-in-depth.pages.dev/

플랫폼 구성

  • 커리큘럼은 6개 트랙, 18개 모듈, 200개 학습 단위로 구성됨.
  • 학습 자료에는 대화형 시뮬레이터 32개, 처음부터 구현하는 실습 15개, 엄선한 영상 470개, 자기 점검 질문 600개가 포함됨.
  • 모든 학습 단위는 직관을 먼저 설명한 다음 영상, 다이어그램과 노트, 음성 해설, 이해도 점검 질문, 실행 가능한 코드 순으로 구성됨.
  • 콘텐츠는 신뢰할 수 있는 출처 인용으로 뒷받침됨.

6개 트랙

  • 아키텍처 기초와 워크로드 모델링: 시스템 불변 조건, 요구사항 구체화, 워크로드 추론 방법.
  • 데이터 아키텍처, 스토리지 엔진과 상태 영속성: 관계형 모델링과 쿼리 실행, NoSQL 아키텍처, 파티셔닝과 ID, 스토리지 엔진 내부, 블롭 시스템.
  • 분산 시스템, 합의와 조정: 네트워크 프로토콜, 서비스 통신, 분산 조정, 합의, 리스.
  • 비동기 실행, 큐와 실시간 처리: 캐싱 전략, 비동기 워크플로와 파티션 로그, 확률적 스케치와 스트림 분석, 실시간 메시징과 피드.
  • 프로덕션 운영, 복원력과 시스템 강화: 신뢰성과 SLO, 미디어 처리와 CDN, 지리 공간 인덱싱, 정보 검색과 검색 엔진.
  • 시스템 설계 실습과 아키텍처 진화: URL 단축기, 분산 속도 제한기, 협업 편집기, 결제 처리, 차량 호출 매칭, 영상 트랜스코딩 파이프라인 등의 전체 설계 문제.
  • 트랙 후반에는 실제 아키텍처 진화와 장애 사례를 다룸: Instagram 초기 아키텍처, Stripe의 멱등성 키, Discord의 메시지 저장소 마이그레이션, Amazon Dynamo 논문, GitLab 데이터베이스 장애.

정적 콘텐츠를 넘어

아키텍처 다이어그램

  • CQRS 파이프라인, Redis Cluster 토폴로지, LSM-Tree 쓰기 경로, Raft 선출 순서, 복제, 메시징 워크플로, 장애 복구를 다루는 Mermaid 다이어그램을 관련 설명과 함께 제공함.
  • 다이어그램은 이동 및 확대·축소가 가능함.

대화형 시뮬레이터

  • 쿼럼, 로드 밸런싱, Raft, 캐시 스탬피드, MVCC, 일관성 해싱, 토큰 버킷 속도 제한, 캐시 제거 정책 등을 포함한 시뮬레이터 32개를 제공함.
  • 입력값을 바꾸고 알고리즘의 동작을 관찰할 수 있음.

영상, 오디오와 자기 점검

  • 각 학습 단위에 엄선한 설명 영상이 포함되며, 전체 커리큘럼의 영상 수는 470개임.
  • 음성 해설과 전체 600개의 질문으로 학습한 개념을 점검할 수 있음.
  • 내장 용어집과 ⌘K 키보드 우선 검색으로 200개 학습 주제를 빠르게 찾을 수 있음.

처음부터 구현하는 실습

  • 레이어 7 로드 밸런서
  • 가상 노드를 사용하는 일관성 해싱 링
  • 슬라이딩 윈도 속도 제한기
  • LRU 캐시
  • Redis 스타일 적응형 정리기를 사용하는 TTL 캐시
  • 블룸 필터 멤버십 테스트
  • Snowflake 64비트 ID 생성기
  • 키셋(커서) 페이지네이션과 SQL OFFSET 비교
  • 쓰기 선행 로그와 충돌 복구
  • LSM-Tree 키/값 저장소
  • 펜싱 토큰을 사용하는 리스 기반 리더 선출
  • 가십 프로토콜: 푸시-풀 안티엔트로피와 SWIM 장애 감지
  • 머클 트리 안티엔트로피 복구
  • HyperLogLog 카디널리티 스케치
  • 소형 검색 엔진

대상

  • 분산 시스템을 배우는 백엔드 개발자
  • 시스템 설계 면접을 준비하는 엔지니어
  • 시니어 역할로 이동하려는 개발자
  • 기초를 강화하려는 시니어 엔지니어
  • 소프트웨어 아키텍처를 탐구하는 학생
  • 교육용 오픈소스 도구에 관심 있는 기여자

구축 과정에서 얻은 핵심 교훈

  • 좋은 다이어그램만으로는 충분하지 않음. 실제 복잡성은 깔끔한 아키텍처 상자보다 장애 처리, 일관성, 동시성, 운영상 절충점에 있음.
  • 모든 설계 결정에는 비용이 따름. 캐싱은 무효화 문제를 더하고, 복제는 일관성 문제를 만들며, 파티셔닝은 쿼리를 복잡하게 함. 비동기 시스템은 순서 지정, 중복, 관측 가능성 문제를 일으킴.
  • 올바른 아키텍처를 암기하는 것보다 절충점을 이해하는 일이 중요함.
  • 간소화한 블룸 필터나 일관성 해싱 링을 직접 구현하면 정의만 읽는 것보다 개념을 오래 기억하고 설명하기 쉬움.
  • 교육 프로젝트에도 제품 관점이 필요함. 탐색, 검색, 커리큘럼 순서, 진행 상황 추적, 시각적 계층 구조가 학습자가 콘텐츠를 효과적으로 사용하는 데 영향을 줌.

사용해 보기

  • 무료 오픈소스 플랫폼이며, 다음 주소에서 학습을 시작할 수 있음: https://system-design-in-depth.pages.dev/
  • 오류를 발견하거나 주제를 추가하고 싶다면 GitHub에서 이슈 또는 PR을 열 수 있음.
  • 프로젝트에 별표를 표시하면 다른 사람이 플랫폼을 찾는 데 도움이 됨.