트래픽 증가에도 끄떡없는 시스템 설계, 핵심은 시니어 엔지니어의 사고방식!
단일 서버(Single Server)에서 시작하여 수직적/수평적 확장(Vertical/Horizontal Scaling)을 고려하는 단계적 접근 방식을 제시함
데이터베이스(Database)는 병목 현상의 주요 원인이며, 읽기/쓰기 부하(Read/Write Loads)에 따른 전략적 접근이 필요함을 강조함
로드 밸런서(Load Balancer)의 알고리즘 선택과 단일 실패 지점(Single Point of Failure) 제거의 중요성을 설명함
시스템 설계 인터뷰(System Design Interviews) 준비를 위한 ByteByteGo 플랫폼 추천 및 시니어 엔지니어의 사고방식 학습을 권장함
수직적/수평적 확장(Vertical/Horizontal Scaling)의 트레이드오프
게시물에서는 수직적 확장(Vertical Scaling)과 수평적 확장(Horizontal Scaling)의 장단점을 비교하며, 상황에 맞는 전략 선택의 중요성을 강조한다. 수직적 확장은 서버의 성능을 향상시키는 방법으로, 간단하지만 하드웨어 한계에 직면할 수 있다. 반면, 수평적 확장은 여러 서버를 사용하여 부하를 분산시키지만, 시스템 복잡도를 증가시키고, 로드 밸런싱(Load Balancing)과 같은 추가적인 기술적 고려 사항을 필요로 한다. 따라서, 트래픽 패턴과 예산에 따라 적절한 선택을 해야 한다.
데이터베이스(Database) 성능 최적화 전략
게시물은 데이터베이스가 시스템의 병목 지점이 될 수 있음을 지적하며, 읽기 부하(Read-heavy loads)와 쓰기 부하(Write-heavy loads)에 따라 다른 전략을 적용해야 한다고 강조한다. 읽기 레플리카(Read Replicas), 커넥션 풀링(Connection Pooling), 데이터베이스 샤딩(Database Sharding)과 같은 기술을 적절히 활용하여 데이터베이스 성능을 향상시킬 수 있다. 특히, 쿼리 최적화(Query Optimization)는 데이터베이스 성능 향상의 핵심 요소이다.
로드 밸런서(Load Balancer) 설정 및 관리
게시물은 로드 밸런서(Load Balancer)의 중요성을 강조하며, 다양한 알고리즘(Round-robin, Least connections, IP hash)의 선택과 그 이유에 대한 이해를 요구한다. 또한, Layer 4 vs Layer 7 로드 밸런싱과 같은 고급 설정을 통해 시스템의 성능과 안정성을 더욱 향상시킬 수 있다. 헬스 체크(Health Check), 장애 조치(Failover), 커넥션 드레이닝(Connection Draining)과 같은 기능을 적절히 설정하여 시스템의 가용성을 높여야 한다.
단일 실패 지점(Single Point of Failure) 제거
게시물은 시스템 설계 시 단일 실패 지점(Single Point of Failure)을 식별하고 제거하는 것이 중요하다고 강조한다. 로드 밸런서(Load Balancer), 데이터베이스 마스터(Database Master), 클라우드 제공업체(Cloud Provider)의 가용성 영역(Availability Zone) 등, 시스템의 모든 구성 요소에서 잠재적인 실패 지점을 파악하고, 이중화(Redundancy)를 통해 이를 해결해야 한다. 시스템 아키텍처 다이어그램을 통해 잠재적 문제를 미리 파악하는 것이 중요하다.