#scalability
노트 15개
Backend › Architecture
대규모 웹 크롤러 설계하루 10억 페이지 규모로 웹을 크롤링하는 시스템의 설계 원칙. 예의(robots.txt, 도메인당 지연)를 첫 제약으로 두고, 기능별 머신 풀 대신 도메인 샤드마다 모든 기능을 담은 독립 노드로 나누며, 프런티어·준비 큐·블룸 필터를 인메모리 저장소에 둔다. I/O에 묶인 페처는 비동기로, CPU에 묶인 파서는 프로세스로 늘리고, 요청당 과금되는 객체 스토리지보다 로컬 스토리지를 검토한다. 병목은 네트워크·DNS가 아니라 커진 페이지의 파싱과 TLS 핸드셰이크(CPU)이고, 메모리는 인기 도메인의 프런티어라는 꼬리에서 터진다.
Backend › Architecture
동영상 스트리밍 서비스 설계: Netflix·YouTubeNetflix·YouTube 같은 주문형 동영상 서비스의 설계다. 요구 사항과 규모 추정(하루 500TB 업로드), 데이터 모델과 API, 업로드 뒤 큐로 도는 처리 파이프라인(장면 단위 청크, 콘텐츠 검사, 트랜스코딩, 화질 변환), CDN과 ISP 안에 서버를 두는 Open Connect, 적응형 비트레이트와 이어 보기, 검색·트렌드·공유, 지역 차단과 추천을 정리했다.
Backend › Architecture
로드 밸런서여러 서버 앞에서 트래픽을 나눠 주는 로드 밸런서. 하는 일(분산, 헬스 체크와 장애 우회, TLS 종료, 세션 고정, 수평 확장, 플랫폼·경로별 라우팅, 영역 간 분산), L4와 L7의 차이, 하드웨어·소프트웨어·클라우드·GSLB 같은 형태, 분산 알고리즘을 정리했다.
Backend › Architecture
마이크로서비스 아키텍처큰 시스템을 비즈니스 기능 단위의 작은 서비스로 나누고, 서비스마다 데이터와 배포를 따로 갖게 하는 구조다. 운영에는 API 게이트웨이, 서비스 레지스트리, 인증 서버, 비동기 메시징, 메트릭·로그 수집이 따라붙는다. 서비스 협업은 오케스트레이션과 코레오그래피 두 방식이 있고, 지연에 민감하거나 상태를 메모리에 둬야 하는 시스템에는 모놀리스가 낫다.
Backend › Architecture
사진 공유 서비스 설계: 메타데이터, 저장, 샤딩Instagram 같은 사진 공유 서비스의 설계다. 요구 사항과 규모 추정(하루 사진 200만 장, 10년 저장량), 미디어 파일과 메타데이터를 나눠 저장하는 구조, 테이블별 크기 계산, 느린 업로드가 읽기를 막지 않게 읽기·쓰기 서버를 나누는 이유, 복제로 파일을 잃지 않는 법, PhotoID 기반 샤딩과 홀짝 티켓 서버로 ID 만들기, CDN 배포를 다룬다.
Backend › Architecture
시스템 설계의 선택지와 흔한 문제의 해법수직·수평 확장, SQL·NoSQL, 배치·스트림, 정규화·비정규화, 강한·최종 일관성, REST·GraphQL, 상태 유지·무상태, 동기·비동기처럼 설계에서 반복되는 양자택일을 비교하고, 읽기 폭주·쓰기 폭주·단일 장애 지점·지연·대용량 파일·느린 쿼리 같은 흔한 문제를 해법과 짝지었다.
Backend › Architecture
시스템 설계의 품질 속성과 트레이드오프확장성·가용성·신뢰성·성능이라는 네 가지 품질 속성의 뜻과 달성 수단, 설계에서 늘 부딪치는 다섯 가지 트레이드오프, 시스템 설계를 이루는 빌딩 블록, 목표·범위·규모에서 상위 설계·병목까지의 설계 진행 순서와 지연 시간 숫자로 하는 어림셈, 요구 사항에서 이전 계획까지 설계 논의의 체크리스트, 그리고 CAP·BASE·KISS 같은 약어를 한 곳에 정리했다.
Backend › Architecture
실시간 웹소켓 서버 설계수만 개의 연결을 붙잡고 메시지를 밀어 주는 웹소켓 서버를 설계·검증하는 방법이다. 연결 하나에 여러 메시지 타입을 싣는 법, 방(그룹) 단위 분할과 Pub/Sub로 서버 간 전파하기, 액터 모델로 상태 관리하기, 팬아웃 폭증을 묶음 전송으로 막기, 파일 디스크립터·포트·로드밸런서 한계, 연결 수명 주기를 검증하는 부하 테스트까지 정리했다.
Backend › Architecture
웹 확장성의 구성 요소: 한 장으로 보는 웹 아키텍처확장 가능한 웹 애플리케이션을 이루는 구성 요소(DNS, 로드 밸런서, CDN, 프론트 웹 서버, 웹 서비스, 캐시, 메시지 큐와 워커, 데이터 저장소, 검색엔진)를 한 장의 지도로 정리했다. 3-Tier와 MSA의 데이터 흐름, 확장의 세 축(복제, 기능 분할, 데이터 분할), HTTP 캐시와 객체 캐시, 비동기 처리와 이벤트 기반 구조, 구간별 보안, 그리고 사람과 팀을 확장하는 법까지 다룬다.
Backend › Architecture
위치 기반 서비스 설계: 지오해시, 쿼드트리, 지도'내 주변 식당'은 모든 점과의 거리를 계산하면 느리므로 지도를 격자로 나눠 색인한다. 지오해시는 위경도를 접두사가 같으면 가까운 문자열로 바꿔 DB 색인으로 찾고, 쿼드트리는 밀도에 따라 칸을 쪼갠 메모리 트리로 찾는다. 지도 서비스는 위치 수집, 미리 잘라 둔 타일의 CDN 서빙, 지오코딩과 경로 계산으로 나뉜다.
Backend › Architecture
채팅 시스템 설계: 연결, 접속 상태, 메시지 전달채팅 서버는 클라이언트와 WebSocket을 유지하고, 메시지는 순서를 매겨 저장한 뒤 받는 사람이 붙어 있는 서버로 전달한다. 서버가 여러 대이면 Redis pub/sub·메시지 큐로 서버 간에 메시지를 넘기고, 접속 상태 서비스가 온라인이면 소켓으로, 오프라인이면 푸시 알림으로 보낸다.
Backend › Architecture
URL 단축기 설계긴 URL을 짧은 코드로 바꿔 주고 그 코드로 원래 주소에 리다이렉트하는 서비스(Bitly 같은)의 설계다. 요구 사항과 규모 추정, 301과 302 리다이렉트의 차이, 해시·고유 ID+Base62·무작위 코드 생성 방식 비교, 데이터 모델과 저장소, 캐시 중심의 읽기 경로, 사용자 지정 별칭·만료·클릭 분석·악용 방지를 다룬다.
Backend › Database
데이터베이스 확장과 성능 최적화DB가 느려지거나 한계에 닿을 때 싼 것부터 쓰는 수단을 순서대로 정리했다. 인덱스·쿼리 튜닝·커넥션 풀·캐시·구체화된 뷰(갱신 방식)·반정규화·수직 확장·읽기 복제본·파티셔닝(프루닝, 분할 방식, 로컬·글로벌 인덱스)·샤딩의 효과와 대가, 복제 구조(단일 리더·다중 리더·리더 없음)와 동기화 방식, 읽기 복제본 패턴의 복제 지연과 라우팅(애플리케이션 vs 미들웨어)을 다룬다.
Algorithm
현실 시스템을 움직이는 알고리즘과 자료구조일상 소프트웨어에서 자료구조가 쓰이는 곳(피드의 리스트, 실행 취소의 스택, 캐시의 해시 테이블, DOM의 트리, 지도 검색의 R-트리), 대규모 시스템 설계에 자주 나오는 알고리즘(일관된 해싱, 지오해시·쿼드트리, 블룸 필터, HyperLogLog, 토큰 버킷, 머클 트리, 합의 알고리즘), 세상을 움직이는 아홉 가지 알고리즘을 정리한다. 블룸 필터는 중복 URL 크롤링 방지 예로 자세히 본다.
DevOps
쿠버네티스 스케줄링과 자원 관리, 오토스케일링파드를 어느 노드에 둘지 정하는 nodeSelector·노드 어피니티·파드 (안티)어피니티·토폴로지 분산·테인트와 톨러레이션, CPU·메모리 requests와 limits의 의미와 초과 시 동작, QoS 클래스, LimitRange·ResourceQuota·PriorityClass, 그리고 HPA·VPA·Cluster Autoscaler의 동작 원리와 함께 쓸 때의 주의점을 정리한다.