수평 확장과 수직 확장: API에 가장 적합한 것은?

수평 확장은 시스템에 더 많은 머신을 추가해 부하를 분산시킵니다. 수직 확장은 단일 머신의 CPU, RAM, 스토리지를 업그레이드합니다. 선택은 시스템 아키텍처와 애플리케이션 요구사항에 따라 달라집니다.

API(애플리케이션 프로그래밍 인터페이스)에 대한 수요는 정적이지 않은 경우가 많습니다. 시간이 지나면서 증가하고 감소합니다. 연말연시의 트래픽 급증과 같은 특정한 경우에는 API가 다른 때보다 훨씬 많은 양의 요청을 처리해야 할 수 있습니다. 이러한 트래픽 증가에 대응하려면 API 사용량을 늘려야 합니다. 시스템 관리자는 API 확장과 관련해 두 가지 옵션을 선택할 수 있습니다. 선택지로는 클러스터에 더 많은 API 인스턴스를 추가하는 수평 확장 또는 API를 지원하는 머신의 컴퓨팅 용량을 추가하는 수직 확장이 있습니다. 이 문서에서는 둘 사이의 차이점과 어떤 것이 API 확장성 면에서 최적인지를 살펴봅니다.

수평 확장

수평 확장(Horizontal Scaling 또는 Scaling Out)은 증가된 부하를 처리할 수 있도록 API 용량을 늘리기 위해 VM(가상 머신)을 추가로 배포하는 프로세스입니다. (용량 축소는 “수평 축소(Scaling In)”라고 함) 용량이 더 많이 필요해지면 시스템 관리자가 클러스터에 VM을 더 추가할 수 있습니다. 그러나 API 호출의 부하를 관리하고 이를 클러스터의 올바른 VM 인스턴스로 라우팅해서 균형을 유지하려면 전문 리소스 관리 소프트웨어가 필요합니다.

수직 확장

수직 확장은 단일 노드에 리소스를 추가하는 프로세스입니다. 이는 노드를 추가하는 수평 확장과 대조적입니다. 수직 확장(Vertical Scaling, Scaling Up 또는 Scaling Down이라고도 함)은 CPU(중앙 처리 장치) 용량, 메모리 또는 스토리지와 같은 리소스를 서버에 추가하는 것을 의미합니다. API의 경우 수직 확장에는 일반적으로 API를 호스팅하는 VM에 컴퓨팅 용량을 추가하는 작업이 수반됩니다.

예를 들어 CPU 코어 1개와 512MB의 RAM(Random Access Memory)이 할당된 VM에서 API를 호스팅하는 경우 해당 API를 수직 확장하면 코어 수와 RAM이 두 배로 늘어날 수 있습니다. 그러면 API는 2개의 Dedicated CPU 프로세서 코어와 1024MB의 RAM을 갖게 됩니다. 이렇게 새로 설정하면 API가 처리할 수 있는 부하는 약 2배 정도로 늘어야 하지만 네트워크 대역폭, 스토리지 속도 및 기타 요인에 대한 제약으로 인해 수직 확장의 영향은 줄어들 수 있습니다. 수직 확장에도 리소스 관리 문제가 있지만, 이는 보통 전문 소프트웨어로 해결할 수 있습니다.

확장 시 API의 상태 비저장(statelessness)이 중요한 이유

API는 보통 상태 비저장(stateless)으로 설계되므로 요청 데이터를 저장하지 않거나 세션 간에 정보를 유지하지 않습니다. 이러한 상태 비저장 특성은 확장 방법을 고려할 때 매우 중요합니다. 상태 비저장 API는 인스턴스 간 데이터 복제가 필요하지 않으므로 수평 확장을 구축하기가 보다 효율적이고 간편합니다. API 클라이언트가 특정 서버 인스턴스에 의존해서 기능하지 않으므로 시스템 관리자는 API 작업에 영향을 주지 않고 필요에 따라 VM을 추가하거나 제거할 수 있습니다.

상태 저장(stateful)이 된다고 해서 문제될 것은 없습니다. 실제로는 앱의 원하는 기능에 필수적일 수 있습니다. 그러나 상태 저장 앱에 대한 수평 확장을 실행하려면 작업이 훨씬 더 복잡해집니다. 이를 위해서는 저장된 데이터를 앱의 원래 버전에서 새 인스턴스로 복사해야 합니다.

반면 상태 비저장 앱 또는 API는 요청 데이터를 저장하지 않습니다. 메모리에 세션 데이터를 저장하지 않는 것입니다. 세션이 시작될 때마다 마치 앱이 처음으로 클라이언트를 만나는 것과 같습니다. 세션이 끝나면 세션을 기억하지 않고 “완전히 헤어지게” 됩니다.

어떤 VM이 API 호출에 응답하는지는 중요하지 않기 때문에 상태 비저장 앱은 수평 확장이 가능합니다. API 클라이언트는 API를 호스팅하는 VM을 무한히 호출할 수 있으므로 어떤 VM이 API 호출에 응답하는지는 중요하지 않습니다. 시스템 관리자는 API 작동에 영향을 주지 않고 원하는 만큼 많은 VM을 추가하거나 제거할 수 있습니다.

API를 위한 최적의 선택인 수평 확장

API가 상태 비저장임을 고려하면 수평 확장이 올바른 확장 방법입니다. 용량을 늘리기 위해 VM을 더 추가하는 방식은 상태 비저장 API에 적합합니다. 관리자는 API 수요가 증가함에 따라 확장되는 VM 클러스터를 만들 수 있습니다.

또한 API를 수직으로 확장하는 것도 가능하지만, 수직 확장은 리소스 할당 문제로 인해 상대적으로 더 어렵기 때문에 수평 확장이 바람직합니다. 수평 자동 확장은 API에서 간단하게 이루어집니다. 시스템 관리 툴이 API 트래픽 급증을 탐지하면 VM을 자동으로 추가해 클러스터에 더 많은 API 인스턴스를 호스팅할 수 있습니다. 수직 확장에서는 자동 확장이 제대로 작동하지 않기 때문에 수직 확장 상황이라면 이러한 방식을 사용하기가 훨씬 더 어렵습니다.

API에 대한 수요는 시간이 지남에 따라 변할 수밖에 없습니다. API 용량을 늘리거나 줄여야 합니다. 수평 및 수직 확장은 모두 API에 사용할 수 있는 옵션입니다. 그러나 API의 상태 비저장 특성과 함께, 수평 자동 확장이 상대적으로 용이하다는 점에서 수평 확장이 API를 확장하는 적절한 접근 방식으로 선호됩니다.

분산 시스템 및 마이크로서비스 아키텍처

API가 마이크로서비스 아키텍처의 일부인 분산 시스템에서는 수평 확장이 특히 유리합니다. 각 마이크로서비스는 구체적인 부하와 요구 사항에 따라 독립적으로 확장할 수 있습니다. 이러한 모듈식 접근 방식을 채택하면 한 마이크로서비스의 장애가 다른 마이크로서비스에 영향을 미치지 않으므로 리소스를 보다 효율적으로 사용하고 내결함성을 높일 수 있습니다.

또한 마이크로서비스 아키텍처에서 수평 확장은 여러 노드에 서로 다른 서비스가 배포되는 분산 시스템의 원칙에 부합합니다. 이를 통해 시스템은 다양한 부하를 처리하고 피크 시간대에도 최적의 성능을 유지할 수 있습니다.

확장 전략을 통한 다운타임의 최소화

서비스 중단은 매출 손실과 고객 불만족으로 이어질 수 있으므로 API를 확장할 때 다운타임은 매우 중요한 문제입니다. 수평 확장은 시스템 관리자가 API의 가용성에 영향을 주지 않고 서버를 추가하거나 제거할 수 있도록 해 다운타임을 최소화합니다. 반면, 수직 확장 시에는 서버를 재부팅하거나 일시적으로 오프라인으로 전환해야 할 수 있으며, 이로 인해 서비스가 중단될 수 있습니다.

API 공급업체는 특히 계획된 유지 관리 또는 예상치 못한 트래픽 급증 시 수평 확장을 활용해 지속적인 운영을 보장할 수 있습니다. 수평 확장은 부하를 여러 서버에 분산하므로 업그레이드나 수리를 위해 개별 서버를 오프라인으로 전환해야 하는 경우에도 API가 응답성과 가용성을 유지할 수 있습니다.

FAQ

수평 확장은 API 성능에 긍정적인 영향을 미칩니다. 이 접근 방식에서는 인프라에 더 많은 서버를 추가하고 그 사이에 부하를 분산합니다. 그 결과, 시스템은 더 많은 동시 요청을 처리할 수 있게 되므로 응답 시간이 개선되고 전반적인 성능이 향상됩니다. 

수평 확장은 성능 면의 이점 외에 시스템의 이중화 및 안정성에도 기여합니다. 한 서버에 장애가 발생하면 부하 분산기가 트래픽을 나머지 서버로 전환해 지속적인 운영을 보장합니다. 이는 API 보안 모범 사례에도 부합하며 잠재적인 장애에 대한 시스템의 안정성을 향상시킵니다.

수직 확장은 단일 서버의 리소스를 업그레이드해 성능을 향상시킵니다. 이렇게 하면 더 강력한 서버로 더 높은 부하를 처리할 수 있기 때문에 API 요청의 처리 속도를 개선할 수 있습니다. 그러나 수직 확장 시에는 수익이 감소할 수 있다는 점에 유의해야 합니다. 단일 머신을 업그레이드할 수 있는 정도에는 한계가 있습니다. 특정 지점을 넘어 가면 성능 이득은 투자에 비례하지 않을 수 있습니다.

수평 확장과 수직 확장의 차이를 고려할 때는 리스크와 잠재적 이점을 비교해 보는 것이 중요합니다. REST API의 보안 관련 함의와 같은 내용을 염두에 두고 시스템이 장애에 대한 안정성을 유지할 수 있도록 보장하세요.

수평 확장과 수직 확장의 차이점을 이해해 두었다가 각각의 방식을 사용할 상황을 판단하는 것이 중요합니다.

다음과 같은 경우에는 수직 확장을 사용합니다. 

  • 웹 애플리케이션이 초기 단계에 있거나 부하가 낮은 경우, 강력한 서버 한 대로도 이를 효과적으로 처리할 수 있습니다. 특히 API 호출에 대한 수요가 적은 경우 더욱 그렇습니다.
  • 애플리케이션 또는 API는 분산 컴퓨팅을 제대로 지원하지 않는 경우. 아키텍처나 설계가 수평 확장 원칙에 부합하지 않는다면 수직 확장이 적절한 대안이 될 수 있습니다. 

다음과 같은 경우에는 수평 확장을 사용합니다. 

  • 애플리케이션이 성장하고 있으며 수요가 급증할 가능성이 높은 경우. 수평 확장을 사용하면 인프라가 필요에 따라 서버를 추가해 변화하는 부하에 적응할 수 있습니다. 
  • 고가용성과 이중화를 보장해야 하는 경우. 수평 확장은 이중화를 제공하므로 장애에 대한 시스템의 안정성을 높이고 하나 이상의 서버가 다운되더라도 지속적으로 운영할 수 있습니다.

수평 확장과 수직 확장의 비용 효율성은 애플리케이션의 구체적인 요구사항, 배포 규모, 전반적인 수요와 같은 요소에 따라 달라집니다. 수직 확장은 확장 시에 새로운 구성요소를 한두 가지만 구입하기 때문에 일반적으로 비용 효율적입니다. 그러나 서버 용량 한도에 가까워지면 비용 효율성이 떨어집니다.

고객이 Akamai를 선택하는 이유

Akamai는 온라인 비즈니스를 지원하고 보호하는 사이버 보안 및 클라우드 컴퓨팅 기업입니다. 시장을 대표하는 보안 솔루션, 탁월한 위협 인텔리전스, 글로벌 운영팀이 모든 곳에서 기업 데이터와 애플리케이션을 보호하는 심층적 방어 기능을 제공합니다. Akamai의 풀스택 클라우드 컴퓨팅 솔루션은 세계에서 가장 분산된 플랫폼을 통해 성능과 경제성을 제공합니다. 글로벌 기업들은 비즈니스 성장에 필요한 업계 최고의 안정성, 확장성, 전문성을 제공하는 Akamai를 믿고 신뢰합니다.

관련 블로그 게시물

Akamai DNS Posture Management 소개
새롭게 출시된 Akamai DNS Posture Management는 세분화된 DNS 인프라에서 발생하는 가시성 부족, 옵저버빌리티 한계, 실행의 어려움이라는 과제를 해결합니다.
컴플라이언스 인사이트: 측면 이동을 차단하고 권한 확인을 강화하는 방법
측면 이동이 발생하기 전에 차단하세요. 계층형 보안, 마이크로세그멘테이션, 스마트 API 보호를 통해 보안 컴플라이언스 규정을 충족하는 방법을 알아보세요.
랜섬웨어 공격 차단: 한 도시의 사이버 범죄와의 전쟁
랜섬웨어 공격의 심각성을 줄이거나 완전히 방지하는 데 계획 수립과 사전 준비가 어떻게 도움이 되는지 알아보세요.