노트

수직 확장과 수평 확장

Vertical Scaling vs Horizontal Scaling

인프라#architecture · 연결된 개념 11개

쉽게 말하면

마트 계산 줄이 밀릴 때 계산원 한 명을 더 빠른 사람으로 바꾸는 게 수직 확장, 계산대를 여러 개 여는 게 수평 확장이에요. 계산대가 여럿이면 한 곳이 멈춰도 줄은 계속 줄어들죠.

비유가 깨지는 곳 계산대를 늘리려면 손님을 나눠 보내는 로드 밸런서가 필요하고, 계산원이 손님 정보를 각자 쥐고 있으면 안 돼요. 세션 같은 상태를 공유 저장소로 빼야 서버를 자유롭게 넣고 뺄 수 있어요.

수직 확장(스케일 업)(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장

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 반응형 웹 디자인

    하나의 페이지가 화면 크기와 기기에 맞춰 레이아웃·이미지·글자 크기를 바꾸도록 만드는 접근. 미디어 쿼리(Media Query), 유연한 레이아웃(Flexible Layout), 반응형 미디어(Responsive Media)가 세 축이다.

  • 병렬 수정 (팽창-수축)

    호환되지 않는 변경을 한 번에 하지 않고, 새 것을 추가하고(팽창, Expand) 옛 것과 함께 쓰다가 옛 것을 걷어 내는(수축, Contract) 단계로 나눠 하는 방법. 각 단계가 배포 가능한 상태라 중간에 멈춰도 안전하다.

  • 최종 일관성

    최종 일관성(eventual consistency)은 "지금 당장은 저장소마다 값이 다를 수 있지만, 새 변경이 멈추면 결국 같아진다"는 보장이다. 원본 DB와 검색 색인·캐시·다른 서비스처럼 물리적으로 분리된 저장소를 한 트랜잭션으로 묶을 수 없을 때 받아들이는 일관성 모델(consistency model)이다.

  • 읽기 캐시 전략

    값비싼 연산 결과나 자주 읽는 데이터를 DB보다 빠른 메모리 저장소에 두고, 읽을 때 캐시를 먼저 보는 전략. 응답 속도를 높이고 DB 부하를 줄이며, 캐시 계층만 따로 확장할 수도 있다.

  • DB 인덱스와 트레이드오프

    DB 인덱스는 특정 컬럼 값으로 행을 빨리 찾도록 테이블 옆에 따로 유지하는 보조 자료구조(auxiliary data structure)다. 관계형 DB의 기본 인덱스는 정렬된 균형 트리(B-tree 계열)라서, 전체를 훑지 않고 트리를 따라 내려가 원하는 행에 닿는다.

보기 옵션