수직 확장(스케일 업)(Vertical Scaling, Scale Up)은 서버 한 대에 더 좋은 CPU·메모리를 붙이는 것이고, 수평 확장(스케일 아웃)(Horizontal Scaling, Scale Out)은 서버 대수를 늘리는 것이다.
| 수직 확장 | 수평 확장 | |
|---|---|---|
| 방법 | 장비 사양을 올림 | 장비를 더함 |
| 장점 | 단순하다. 코드 변경이 거의 없다 | 한계가 거의 없고 장애에 강하다 |
| 단점 | 사양에 상한이 있고 비싸다. 한 대가 죽으면 끝 | 부하 분산·상태 공유를 설계해야 한다 |
- 트래픽이 적을 때는 수직 확장이 단순하고 좋다
- 수직 확장만 하면 그 서버가 단일 장애 지점(Single Point of Failure, SPOF)이 된다. 자동 복구도 다중화도 없다
- 수평 확장의 전제는 로드 밸런서(Load Balancer)와 무상태 웹 계층(Stateless Web Tier)이다. 사용자는 로드 밸런서의 공개 주소로 접속하고, 로드 밸런서가 사설 네트워크로 웹 서버들에 요청을 나눈다
- 웹 서버가 세션을 들고 있으면 같은 사용자를 같은 서버로 보내야 해서(고정 세션, Sticky Session) 서버를 넣고 빼기 어려워진다. 상태는 공유 저장소로 뺀다(Redis (인메모리 저장소), JWT)
- 트래픽에 따라 서버를 자동으로 늘리고 줄이는 오토스케일링(Autoscaling)도 무상태여야 가능하다(쿠버네티스 핵심 개념)
데이터베이스도 같은 선택을 한다. DB의 수평 확장은 샤딩, 읽기 확장은 데이터베이스 다중화이다. 전체 흐름은 사용자 수에 따른 규모 확장.
출처: 『가상 면접 사례로 배우는 대규모 시스템 설계 기초』 알렉스 쉬 (원서 System Design Interview – An Insider's Guide) 1장