이용자가 증가하거나 서비스를 확장시키는 등 다양한 이유로 서버를 확장해야 될 때가 있다.
서버를 확장 시키는데에는 크게 두 가지의 방법이 있다.
- 수평적 확장(Scale-Out)
- 수직적 확장(Scale-Up)
클라우드 서비스에서는 수직적 확장(Scale-Up)보다는 수평적 확장(Scale-Out)을 자주한다. 이것을 위해 Stateless하게 설계를 하라~~ 등등 많이 듣게 될 것인데 이 두가지 방법에 대해 간단히 정리해보겠다.
수평적 확장(다른 말로, Scale-Out)
수평적 확장은 아래의 그림과 같이 서버를 여러대를 추가해서 옆으로 확장시킨다고 생각하면 된다.
서버의 자체적인 스펙을 업그레이드 시키는 것이 아니라 여러대의 서버 갯수를 늘리는 방법이다.
이렇게 똑같은 역할을 인스턴스를 늘리면 기존에 잘 작동되는 것을 건드릴 필요가 없어서 무중단 배포가 가능해진다.
요즘은 Autoscaling과 같은 기능을 쓰면 이 모든 것을 자동화해준다. CPU 사용률, 상태, 네트워크 트래픽 양 등을 보면서 자동으로 Scale-Out을 해주고 다시 사용자 수가 적어지면 잉여 서버 인스턴스를 없애준다.
수직적 확장(다른 말로, Scale-Up)
수직적 확장은 서버의 스펙(CPU, RAM, 등)을 업그레이드한다는 것이다. 더 좋은 성능을 내는 컴퓨터로 업그레이드 시키는 것이다.
수직적 확장을 하면 재부팅을 해야 한다. 새로 교체된 고성능의 부품(CPU, RAM, 등)을 운영체제가 인식할 수 있다.
이렇게 변화가 생길 때마다 재부팅하고 재부팅할 때마다 서비스가 일시적으로 DOWN되면 별로 UX적인 측면에서 별로라서 많이 사용하지 않는다고 한다.
소프트웨어의 라이센스가 서버에 한대 당 하나를 사야하면 어쩔 수 없이 Scale-Up을 하는 경우도 있다고 한다.