애플리케이션이 성장함에 따라 적절한 인프라나 수정 없이 데이터베이스가 시스템의 병목 현상이 될 수 있습니다. 엔지니어는 트래픽이 급증할 때 어려운 선택에 직면하는 경우가 많습니다. 현재 서버를 더 강력하게 만들어야 할까요, 아니면 서버를 더 추가해야 할까요? 이 가이드에서는 수평 확장과 수직 확장의 차이점, 각 방식의 장단점, 필요에 맞는 적절한 접근방식을 선택하는 방법을 자세히 설명합니다.
데이터베이스 확장은 시스템의 용량, 성능, 가용성을 높이는 프로세스입니다. 데이터베이스가 더 많은 데이터를 처리하고 증가하는 사용자 수를 감당할 수 있게 해 줍니다.
업계 전문가들은 이 프로세스에 두 가지 주요 용어를 사용합니다. 수직 확장은 '수직 확장'이고 수평 확장은 '수평 확장'입니다. 이 두 경로를 이해하는 것이 안정적인 데이터 시스템을 구축하는 첫 번째 단계입니다.
수직 확장은 기존 서버에 더 많은 성능을 추가하는 것입니다. 동일한 데이터베이스 노드를 유지하면서 작업을 수행할 수 있도록 더 많은 CPU, 메모리 또는 스토리지를 제공합니다.
이는 관계형 데이터베이스를 확장하는 전통적인 방식으로 여겨집니다. 모든 데이터가 여전히 한곳에 있으므로 아키텍처가 단순하게 유지됩니다.
이점
과제
Cloud SQL과 같은 관리형 데이터베이스 서비스를 사용하면 클릭 몇 번으로 머신 크기를 변경할 수 있어 수직 확장이 더 쉬워지지만, 여전히 물리적 하드웨어 한계에 도달할 수 있다는 점을 기억해야 합니다.
소규모: 하나의 데이터베이스에서 웹 앱을 실행하는 빠르게 성장하는 스타트업을 상상해 보세요. 트래픽이 증가하기 시작하면 더 큰 인스턴스로 이동할 수 있으며, 이를 통해 애플리케이션 코드를 다시 작성할 필요 없이 추가 방문자를 처리할 수 있는 더 많은 컴퓨팅 성능을 확보할 수 있습니다.
엔터프라이즈 규모: 레거시 시스템을 갖춘 대기업도 수직 확장을 사용할 수 있습니다. 이러한 시스템은 일반적으로 데이터 간의 복잡한 관계에 의존합니다. 코드가 단일 데이터베이스용으로 빌드되었기 때문에 분산 시스템으로 이동하는 대신 해당 머신에 더 많은 성능을 추가하여 수직 확장할 수 있습니다.
내부 요구사항: 일부 기업은 내부 보고를 위해 수직 확장을 사용하기도 합니다. 기본 데이터베이스 서버에 RAM을 추가하여 리소스를 많이 사용하는 대규모 쿼리를 더 빠르게 처리하면서도 일반 사용자의 경험을 저하시키지 않을 수 있습니다.
수평 확장은 하나의 머신을 더 강력하게 만드는 대신 데이터베이스 시스템에 더 많은 머신을 추가하여 서버 그룹에 작업을 분산하는 것을 의미합니다. 이는 최신 클라우드 컴퓨팅 및 분산 시스템의 핵심 개념입니다.
엔지니어는 데이터를 여러 서버에 더 작은 청크로 분할하는 샤딩과 데이터를 여러 노드에 복사하는 복제와 같은 기법을 사용하여 이를 구현합니다.
이점
과제
Spanner와 같은 분산형 SQL 데이터베이스는 이러한 과제를 관리하는 데 도움이 될 수 있습니다. Spanner는 여러 머신에서 데이터를 동기화하는 어려운 작업을 처리하므로 데이터를 수동으로 분할하거나 관계형 데이터베이스의 안전성을 잃을 필요가 없습니다. 이를 통해 시스템을 지나치게 복잡하게 만들지 않고도 수평 확장할 수 있습니다.
용량: 글로벌 전자상거래 플랫폼은 대규모 할인 이벤트 중에 수평 확장을 사용할 수 있습니다. 수백만 명의 사용자가 동시에 사이트를 방문하면 시스템은 트래픽을 처리하기 위해 새 노드에 데이터를 자동으로 재조정하여 단일 서버가 과부하되지 않도록 합니다.
중복: 미션 크리티컬 금융 애플리케이션은 수평 확장도 사용합니다. 가용성 영역이라고 하는 여러 물리적 위치에 데이터베이스를 분산할 수 있습니다. 이러한 설정은 한 데이터 센터에 문제가 발생하더라도 애플리케이션이 계속 작동하여 데이터 일관성을 유지할 수 있도록 보장합니다.
근접성: 글로벌 게임 회사는 전 세계 여러 지역에 데이터베이스 노드를 배포할 수 있습니다. 데이터베이스 노드를 플레이어와 더 가까운 곳에 배치하면 지연 시간이 매우 짧고 빠르고 원활한 경험을 제공할 수 있습니다. 예를 들어 플레이어가 도쿄에 거주하는 경우 프로필 데이터는 도쿄 데이터베이스 노드에 저장되어 읽기 및 쓰기 속도가 매우 빠릅니다.
클라우드 확장에 대해 이야기할 때 수직 확장은 데이터베이스를 호스팅하는 가상 머신의 크기를 업그레이드하는 것을 의미합니다. 수평 확장은 자동 확장 그룹 또는 분산 클러스터에 더 많은 머신 인스턴스를 추가하는 방식입니다.
일부 회사는 두 가지 방법을 혼합하여 사용하는데, 이를 대각 확장이라고 합니다. 이 접근 방식에서는 시스템에 노드를 더 추가하고(수평 확장) 하드웨어 용량을 업그레이드합니다(수직 확장). 대기업은 이를 통해 두 가지 장점을 모두 누릴 수 있으며, 데이터베이스의 가용성을 높이고 복잡한 로컬 작업을 처리할 수 있을 만큼 강력한 성능을 보장할 수 있습니다.
예. 전통적으로는 어려웠지만 Spanner와 같은 최신 분산형 SQL 데이터베이스는 고급 시계 동기화 및 스마트 프로토콜을 사용하여 데이터를 체계적이고 정확하게 유지하면서 수평 확장할 수 있습니다.
사용량이 많은 시간대에 높은 CPU 또는 메모리 사용량, 느린 쿼리 시간, 사용자 지연 시간 증가와 같은 경고 신호가 있는지 확인하세요. 이러한 모든 징후는 현재 데이터베이스가 따라잡기 위해 고군분투하고 있을 수 있음을 나타냅니다.
수평 확장과 수직 확장의 주요 차이점은 시스템에 리소스를 추가하는 방식입니다. 수직 확장은 하나의 머신에 더 많은 성능을 부여하는 반면 수평 확장은 네트워크에 더 많은 머신을 추가합니다.
기능 | 수직 확장 | 수평 확장 |
개념 | 머신 1개에 리소스 추가 | 네트워크에 머신 추가 |
용량 | 하드웨어의 한계 | 사실상 무제한 |
다운타임 | 일반적으로 다운타임 필요 | 제로 다운타임(노드가 동적으로 추가됨) |
복잡성 | 낮음(간단한 아키텍처) | 높음(분산된 로직 필요) |
비용 | 대형 하드웨어의 높은 비용 | 표준 머신을 사용한 선형 확장 |
기능
수직 확장
수평 확장
개념
머신 1개에 리소스 추가
네트워크에 머신 추가
용량
하드웨어의 한계
사실상 무제한
다운타임
일반적으로 다운타임 필요
제로 다운타임(노드가 동적으로 추가됨)
복잡성
낮음(간단한 아키텍처)
높음(분산된 로직 필요)
비용
대형 하드웨어의 높은 비용
표준 머신을 사용한 선형 확장
SQL과 NoSQL 데이터베이스에 관한 몇 가지 오래된 통념이 여전히 업계에 널리 퍼져 있습니다. 기존 SQL 데이터베이스를 확장하는 데 따르는 어려움은 대부분 조인과 데이터 일관성을 처리하는 방식에 집중되어 있습니다. 관계형 데이터베이스를 여러 서버에 분산하는 것은 기술적으로 어려울 수 있지만, 최신 분산 솔루션은 이러한 문제의 상당 부분을 해결하여 개발자가 필요한 관계형 기능을 잃지 않고도 SQL을 수평으로 확장할 수 있게 해 줍니다. 다음은 세 가지 일반적인 오해와 그 진실입니다.
진실: 가능합니다. 이전의 관계형 설계에서는 수직 확장을 선호했지만, 최신 분산 SQL 시스템에서는 관계형 데이터베이스가 여러 머신에 걸쳐 확장될 수 있습니다. 이 접근 방식은 SQL의 일관성과 최신 클라우드 아키텍처의 수평 확장성을 결합합니다.
진실: NoSQL은 대규모 비정형 데이터 세트에 효과적이지만, 복잡한 정형 쿼리에는 SQL 데이터베이스가 더 적합한 경우가 많습니다. 애플리케이션이 데이터 포인트 간의 깊은 관계에 의존하는 경우, 잘 조정된 SQL 데이터베이스가 NoSQL보다 성능이 뛰어난 경우가 많습니다.
진실: 선택할 필요가 없습니다. 최신 아키텍처 패턴을 사용하면 전체 클러스터에서 ACID 규정 준수라고 하는 데이터 안전에 대한 엄격한 규칙을 유지하면서 여러 머신에 걸쳐 시스템을 확장할 수 있습니다.
데이터베이스를 확장하는 방법을 결정할 때는 예산, 데이터 양, 필요한 업타임에 따라 선택하는 경우가 많습니다. 일반적인 조언은 다음과 같습니다.
Google Cloud는 확장 전략에 맞게 조정할 수 있는 다양한 데이터베이스 도구를 제공합니다. 수직 확장의 단순함이 필요하든, 수평 확장의 고용량 성능이 필요하든, 이러한 제품이 도움이 될 수 있습니다.

