**확장성(scalability)**은 자원을 추가하여 늘어나는 부하(더 많은 사용자, 요청, 데이터)를 감당하는 시스템의 능력입니다. 이를 달성하려면 수직 확장(더 큰 머신)과 특히 수평 확장(더 많은 머신), 그리고 load balancing, 캐싱, 분산 같은 기법이 필요합니다.
확장성이란
확장성 = 자원을 추가하여 성장(더 많은 부하)을 감당하면서 성능을 유지하는 능력:
→ 확장 가능한 시스템은 용량을 추가하여 10배, 100배의 부하를 감당
→ 확장 불가능한 시스템은 부하가 늘면 성능 저하/실패 (병목)
→ 성공적인 시스템은 성장하므로 필수적임.
수직 확장 vs 수평 확장
수직 확장(SCALE UP) → 더 큰 머신 (더 많은 CPU, RAM):
✓ 단순함 (앱 변경 불필요) ✗ 한계 (머신 최대 크기); 비쌈; 단일 장애점;
업그레이드 시 다운타임
수평 확장(SCALE OUT) → 더 많은 머신 (서버 추가; 부하 분산):
✓ 거의 무제한 확장; 중복성/fault tolerance; 대규모를 위한 접근법
✗ 더 복잡함 (분산 시스템; load balancing, 무상태성, 데이터 분산 필요)
→ 수평 확장은 대규모 시스템의 핵심 (하나의 거대한 머신 대신 commodity 머신 추가).
