수직 확장
수직 확장은 서버 한 대의 성능을 올려 더 많은 일을 받는 것입니다. 기계 대수를 늘리는 대신 지금 쓰는 그 한 대를 더 센 기계로 바꿉니다. 그래서 대수를 늘리지 않고도 한 대가 감당하는 양을 키울 수 있습니다.
쉽고 빠른 이해
수직 확장은 지금 쓰는 서버 한 대를 더 센 기계로 바꾸는 것입니다. 웹 서버 한 대의 코어 수를 4개에서 16개로 늘리는 것이 그 예입니다.
이게 없으면 서버 한 대가 받을 수 있는 요청 양이 처음 산 사양에 묶입니다. 트래픽이 늘어도 처리량을 올릴 방법이 없습니다.
어떻게 도나:
- 지금 기계의 코어 수·메모리·디스크 중 부족한 것을 찾습니다
- 그 부품을 더 큰 것으로 바꾸거나, 통째로 더 큰 기계로 옮겨 갑니다
- 애플리케이션은 손대지 않고 그대로 다시 띄웁니다
대가도 있습니다. 그 시장에서 살 수 있는 가장 큰 기계에 닿으면 더는 늘릴 수 없습니다. 기계를 바꾸는 동안 서비스가 멈추기 쉽고, 그 한 대가 죽으면 서비스 전체가 같이 멈춥니다.
상세
수직 확장(vertical scaling)은 기계 한 대의 성능을 올려 처리할 수 있는 일의 양을 늘리는 것입니다. 스케일 업이라고도 부릅니다. 웹 서버 한 대의 CPU(Central Processing Unit, 중앙 처리 장치)를 4코어에서 16코어로 올리거나, 메모리를 8GB에서 64GB로 늘리는 것이 그것입니다.
늘리는 방법은 둘입니다. 지금 켜 둔 기계에 부품을 더 꽂는 방법과, 기계 자체를 더 큰 사양으로 바꾸는 방법입니다. 물리 서버는 대개 CPU나 메모리 슬롯을 추가로 꽂아 늘립니다. 가상 서버는 부품을 갈아 끼우는 대신 더 큰 사양의 가상 서버로 옮겨 갑니다.
이 절은 무엇을 늘릴 수 있는지, 늘리기가 어디서 끝나는지, 그리고 늘리는 동안 무엇을 대가로 치르는지를 차례로 봅니다.
늘릴 수 있는 것 세 가지
기계 한 대의 성능은 세 부품이 정합니다. CPU는 동시에 처리하는 계산의 양을, 메모리는 한 번에 올려 둘 수 있는 데이터의 양을, 디스크는 오래 담아 둘 수 있는 데이터의 양을 정합니다.
| 부품 | 늘리면 좋아지는 것 | 부족하면 나타나는 증상 |
|---|---|---|
| CPU | 동시에 처리하는 요청 수 | 응답이 느려지고 대기열이 쌓인다 |
| 메모리 | 캐시에 담아 두는 데이터 양 | 디스크를 자주 읽어 느려진다 |
| 디스크 | 담아 두는 데이터 총량 | 저장 공간이 가득 차 쓰기가 실패한다 |
부족한 부품을 먼저 찾아 그것만 늘리는 편이 낫습니다. 셋을 다 늘리면 안 쓰는 부분에도 비용을 치릅니다.
한 대 안에서 커지는 사양
지금 쓰는 서버 한 대가 더 큰 사양으로 바뀌는 것을 그림으로 보면 이렇습니다.
flowchart TD
A["지금 서버 · CPU 4코어 · 메모리 8GB"] --> B["더 큰 서버 · CPU 16코어 · 메모리 64GB"]
그림에서 화살표 앞뒤 모두 서버는 한 대입니다. 커진 것은 그 한 대의 사양뿐입니다. 기계 대수를 늘리는 방식인 수평 확장처럼 앞단에서 요청을 나눠 줄 장치가 필요 없고, 애플리케이션이 여러 대에 걸쳐 상태를 나누는 방법을 새로 짜지 않아도 됩니다. 지금 짜인 코드가 큰 기계 위에서 그대로 돕니다.
늘리기가 끝나는 지점
수직 확장은 한 대를 계속 키우는 것이라 끝이 있습니다. 그 시점에 시장에서 살 수 있는 가장 큰 사양이 그 끝입니다. 그 사양에 닿으면 수평 확장 밖에 남지 않습니다.
바꾸는 동안의 정지
사양을 바꾸는 동안 그 기계는 대개 멈춥니다. 부품을 갈아 끼우려면 전원을 내려야 합니다. 가상 서버도 더 큰 사양으로 옮겨 가는 동안 재시작을 거칩니다. 그래서 수직 확장은 미리 정해 둔 점검 시간에 하는 일이 됩니다.
한 대에 걸리는 위험
기계가 한 대뿐이므로 그 한 대가 멈추면 서비스 전체가 함께 멈춥니다. 이렇게 하나가 죽으면 전체가 멈추는 한 대를 단일 장애점이라고 부릅니다. 여러 대로 나눠 둔 수평 확장 구성은 한 대가 죽어도 남은 대가 받지만, 수직 확장 구성은 그 한 대가 전부입니다.
알맞은 상황
새로 만든 서비스나 사용자가 적은 서비스는 수직 확장으로 충분한 경우가 많습니다. 애플리케이션을 여러 대에 나눠 돌게 고치는 일보다 사양 하나를 올리는 일이 훨씬 간단합니다.
여러 서버가 같은 값을 동시에 봐야 하는 데이터베이스도 수직 확장을 먼저 씁니다. 데이터를 여러 대로 나누면 어느 대가 최신 값을 들고 있는지 맞추는 일이 새로 생기기 때문입니다. 그 일이 부담스러우면 한 대를 키우는 쪽이 단순합니다.
트래픽이 시장에서 살 수 있는 가장 큰 기계로도 못 버틸 만큼 커지거나, 한 대가 멈춰도 서비스가 계속 돌아야 한다면 그때는 수평 확장으로 넘어갑니다.
관련 항목
수직 확장과 맞세워지는 다른 확장 방식
수직 확장이 늘리는 자원
수직 확장이 못 넘는 한계와 위험
수직 확장을 먼저 쓰는 시스템
수직 확장과 함께 보는 지표
다른 이름: vertical scaling · 스케일 업 · scale-up