본문 바로가기

Architecture

서버의 확장? Scale up과 Scale out이란?

웹 서버 애플리케이션을 개발하고 운영하다 보면 여러 가지 상황을 마주하게 됩니다.

그중 하나는 서버의 처리 능력보다 많은 양의 트래픽이 들어오는 상황입니다. 우리 서비스를 이용하고 싶어도 처리 능력의 한계 때문에 이용이 불편해지거나 심각하면 서버의 장애가 발생해 서비스 중단을 초래하고 회사의 매출, 수익 악화로 직결됩니다. 이럴 때는 서버의 처리 능력향상시키는 것이 좋습니다.

 

그럼 처리 능력은 어떻게 향상시키나요?

 

Scale upScale out 두 가지 방법이 있습니다.


Scale up

Scale up 확장

한 대의 서버를 구성하는 부품(CPU, RAM, DISK etc.)을 추가하거나 업그레이드해서 서버 자체의 처리 능력을 향상시키는 방법입니다.

 

한 대의 서버를 업그레이드하는 방식이라 관리 포인트가 추가적으로 늘어나지 않고 손쉽게 적용할 수 있다는 장점이 있습니다.

 

하지만 확장하는 동안 서버멈추기 때문에 서비스 제공불가능하고 부품이 가지는 처리 능력 향상의 한계가 있습니다. 또 한 대의 서버로 운영하기 때문에 서버에 장애가 발생하면 서비스에 끼치는 영향이 무척이나 크다는 단점이 존재합니다.

 

 

 

Scale out

Scale out 확장

서버의 절대적인 수를 늘려 많은 트래픽을 여러 서버가 나눠서 처리하는 방법입니다.

 

이 방법은 운영 중인 서버에 영향을 끼치지 않으면서 서버의 중단 없이 처리 능력을 향상시킬 수 있고,

여러 대의 서버를 동시에 운영하는 구조이기 때문에 하나의 서버에 문제가 발생해 장애가 나더라도 다른 서버에서 트래픽처리하면 돼서 서비스에 끼치는 영향이 작아집니다. 또 Scale up이 가지는 부품에 의한 능력 향상의 한계가 사라진다는 장점이 있습니다.

 

단,  여러 대의 서버를 관리해야 하기 때문에 관리 포인트가 늘어나는 단점이 있고 각 애플리케이션 서버가 가지는 데이터에 대한 정합성 보장이 필요합니다. 클라이언트의 요청 또한 어떤 서버에서 처리할 것인지와 한 서버에 트래픽이 몰리는 것을 방지하기 위해 로드 밸런싱으로 트래픽조절해주어야 합니다.

Scale out 확장 시 고려해야 할 점들

 

 

정리

  Scale up Scale out
장점
  • 서버 관리 측면에서 용이
  • 데이터 정합성 처리 불필요
  • 손쉽게 처리 능력 향상 가능
  • 서버의 중단 없이 확장 가능
  • 가용성 증가
  • 부품에 의한 능력 향상의 한계가 없음
단점
  • 유연한 확장 불가능(확장 시 서버의 중단 필요)
  • 부품 업그레이드의 한계가 존재
  • 단일 장애점(서버 장애 발생 시 영향이 큼)
  • 관리 포인트 증가
  • 데이터 정합성 처리 필요
  • 트래픽 조정을 위한 로드 밸런싱 필요

어떤 방법을 적용시키는 것이 좋을까요?

 

어떤 것을 선택하는지에 대한 정답은 없습니다. 다만 자신의 상황에 맞춰 선택하고 그 선택에 대해 합리적이고 분명한 근거를 제시할 수 있어야 한다고 생각합니다. 저는 아래와 같은 이유로 Scale out을 선택했습니다.

  • 진행 중인 프로젝트가 서비스 형태이다.
  • 서비스 성장에 한계가 있으면 수익에도 한계가 생기기 때문에 확장에 한계가 없어야 한다.
  • 서버 장애 발생 시에도 손해를 최소화할 수 있다.
  • 쿠폰 이벤트 같은 특수한 상황에 급증하는 트래픽에도 확장을 통한 유연한 대응이 가능하다.

 

Scale out은 여러 가지 큰 장점이 있지만 이 장점들을 제대로 누리려면 데이터 정합성 문제를 반드시 해결해야 합니다. 다음 글에서 데이터 정합성 문제가 실제 프로젝트에 어떻게 발생했고 어떠한 해결 방법이 있는알아보겠습니다.