데이터베이스 샤딩이란 무엇인가요?

데이터베이스 샤딩은 대규모 데이터베이스를 여러 머신에 저장하는 프로세스입니다. 단일 머신 또는 데이터베이스 서버는 제한된 양의 데이터만 저장하고 처리할 수 있습니다. 데이터베이스 샤딩은 데이터를 샤드라고 하는 더 작은 청크로 분할하고 여러 데이터베이스 서버에 저장함으로써 이러한 한계를 극복합니다. 모든 데이터베이스 서버의 기본 기술은 일반적으로 동일하며 함께 작동하여 대량의 데이터를 저장하고 처리합니다.

데이터베이스 샤딩이 중요한 이유는 무엇인가요?

애플리케이션이 성장함에 따라 애플리케이션 사용자 수와 애플리케이션에 저장되는 데이터의 양도 시간이 갈수록 증가합니다. 데이터 볼륨이 너무 커지고 애플리케이션을 사용하여 동시에 정보를 읽거나 저장하려고 하는 사용자가 너무 많아지면 데이터베이스에서 병목 현상이 발생합니다. 이로 인해 애플리케이션 속도가 느려지고 고객 경험에 영향을 미치게 됩니다. 이에 대한 솔루션의 하나로, 여러 샤드에서 더 작은 데이터 세트를 병렬로 처리하는 데이터베이스 샤딩을 사용하면 이 문제를 해결할 수 있습니다.

데이터베이스 샤딩의 이점은 무엇인가요?

조직에서 데이터베이스 샤딩을 사용하면 다음과 같은 이점을 얻을 수 있습니다.

응답 시간 개선

대규모의 단일 데이터베이스에서는 데이터를 검색하는 데 시간이 더 오래 걸립니다. 데이터베이스 관리 시스템은 올바른 데이터를 찾기 위해 여러 행을 검색해야 합니다. 그에 비해 데이터 샤드는 전체 데이터베이스보다 행 수가 적습니다. 따라서 샤딩된 데이터베이스에서는 특정 정보를 검색하거나 쿼리를 실행하는 데 걸리는 시간이 단축됩니다. 

전체 서비스 중단 방지

데이터베이스를 호스팅하는 컴퓨터에서 장애가 발생하면 데이터베이스를 사용하는 애플리케이션에서도 오류가 발생합니다. 데이터베이스 샤딩은 데이터베이스의 일부를 다른 컴퓨터에 배포함으로써 이 같은 문제를 방지합니다. 컴퓨터 중 하나에서 장애가 발생하더라도 정상 작동하는 다른 샤드를 사용하여 작동할 수 있으므로 애플리케이션이 중단되지 않습니다. 또한 샤딩은 샤드 간 데이터 복제와 함께 사용되는 경우가 많습니다. 즉, 샤드 중 하나를 사용할 수 없게 되더라도 대체 샤드에서 데이터에 액세스하고 복원할 수 있습니다.

효율적인 크기 조정

데이터베이스가 확장되면 더 많은 컴퓨팅 리소스를 소비하고 결국 스토리지의 최대 용량에 도달하게 됩니다. 이 경우 조직은 데이터베이스 샤딩을 사용하여 더 많은 컴퓨팅 리소스를 추가함으로써 데이터베이스의 확장을 지원할 수 있습니다. 유지 관리를 위해 애플리케이션을 종료하지 않고도 런타임에 새 샤드를 추가할 수 있습니다.

데이터베이스 샤딩은 어떻게 작동하나요?

데이터베이스는 열과 행으로 구성된 여러 데이터 세트에 정보를 저장합니다. 데이터베이스 샤딩은 단일 데이터 세트를 파티션이나 샤드로 분할합니다. 각 샤드에는 노드라고 하는 여러 컴퓨터에 개별적으로 저장할 수 있는 정보의 고유한 행이 포함되어 있습니다. 모든 샤드는 각각 개별 노드에서 실행되지만 원래 데이터베이스의 스키마 또는 설계를 공유합니다. 

예를 들어 고객 레코드의 데이터 세트를 포함하는 샤딩되지 않은 데이터베이스는 다음과 같습니다.

고객 ID

이름

시/도

1

John

캘리포니아

2

Jane

워싱턴

3

Paulo

애리조나

4

Wang

조지아

샤딩 프로세스에는 다음과 같이 테이블의 여러 정보 행을 분리하여 다른 시스템에 저장하는 작업이 포함됩니다.

컴퓨터 A

고객 ID

이름

시/도

1

John

캘리포니아

2

Jane

워싱턴

컴퓨터 B

고객 ID

이름

시/도

3

Paulo

애리조나

4

Wang

조지아

샤드

분할된 데이터 청크를 논리적 샤드라고 합니다. 논리적 샤드를 저장하는 시스템을 물리적 샤드 또는 데이터베이스 노드라고 합니다. 하나의 물리적 샤드는 여러 개의 논리적 샤드를 포함할 수 있습니다. 

샤드 키

소프트웨어 개발자는 샤드 키를 사용하여 데이터 세트를 분할하는 방법을 결정합니다. 데이터 세트의 열은 함께 그룹화되어 샤드를 구성하게 될 데이터 행을 결정합니다. 데이터베이스 설계자는 기존 열에서 샤드 키를 선택하거나 새 샤드 키를 만듭니다.

비공유 아키텍처

데이터베이스 샤딩은 비공유 아키텍처를 기반으로 작동합니다. 각 물리적 샤드는 독립적으로 작동하며 다른 샤드를 인식하지 못합니다. 요청한 데이터가 들어 있는 물리적 샤드만 해당 데이터를 병렬로 처리합니다. 

소프트웨어 계층은 이러한 여러 샤드에서의 데이터 저장 및 액세스를 조율합니다. 예를 들어 일부 유형의 데이터베이스 기술에는 자동 샤딩 기능이 내장되어 있습니다. 소프트웨어 개발자가 올바른 샤드에서 정보를 저장하거나 검색하는 샤딩 코드를 애플리케이션에 작성할 수도 있습니다. 

데이터베이스 샤딩 방법은 어떤 것들이 있나요?

데이터베이스 샤딩 방법은 샤드 키에 여러 규칙을 적용하여 특정 데이터 행을 처리할 올바른 노드를 결정합니다. 일반적인 샤딩 아키텍처는 다음과 같습니다.

범위 기반 샤딩

범위 기반 샤딩 또는 동적 샤딩은 값의 범위에 따라 데이터베이스 행을 분할합니다. 그러면 데이터베이스 설계자가 각 범위에 샤드 키를 할당합니다. 예를 들어 데이터베이스 설계자가 다음과 같이 고객 이름의 첫 번째 알파벳에 따라 데이터를 분할할 수 있습니다. 

 

이름

샤드 키

A~I로 시작

A

J~S로 시작

B

T~Z로 시작

C

 

이 경우 애플리케이션은 데이터베이스에 고객 레코드를 쓸 때 고객의 이름을 확인하여 올바른 샤드 키를 결정합니다. 그런 다음 애플리케이션은 키를 물리적 노드와 매칭하고 해당 컴퓨터에 행을 저장합니다. 마찬가지로, 특정 레코드를 검색할 때는 애플리케이션이 역매칭을 수행합니다.

장점과 단점

범위 기반 샤딩의 경우 데이터 값에 따라 단일 물리적 노드에서 데이터가 오버로드될 수 있습니다. 이 예에서 샤드 A(A~I로 시작하는 이름이 포함됨 샤드)에는 샤드 C(T~Z로 시작하는 이름이 포함된 샤드)보다 훨씬 많은 수의 데이터 행이 포함됩니다. 하지만 범위 기반 샤딩은 상대적으로 구현하기가 쉽습니다.

해시 샤딩

해시 샤딩은 해시 함수라는 수학 공식을 사용하여 데이터베이스의 각 행에 샤드 키를 할당합니다. 해시 함수는 행에서 정보를 가져와 해시 값을 산출합니다. 애플리케이션은 이 해시 값을 샤드 키로 사용하고 해당하는 물리적 샤드에 정보를 저장합니다.

소프트웨어 개발자는 해시 샤딩을 사용하여 데이터베이스의 정보를 여러 샤드 간에 고르게 분산할 수 있습니다. 예를 들어 이 소프트웨어는 고객 레코드를 대체 해시 값이 1과 2인 두 개의 샤드로 분리할 수 있습니다. 

이름

해시 값

John

1

Jane

2

Paulo

1

Wang

2

장점과 단점

해시 샤딩은 물리적 샤드 간에 데이터를 고르게 분산하지만 정보의 의미에 따라 데이터베이스를 분할하지는 않습니다. 따라서 소프트웨어 개발자가 컴퓨팅 환경에 물리적 샤드를 더 추가할 때 해시 값을 재할당하는 데 어려움을 겪을 수 있습니다. 

디렉터리 샤딩

디렉터리 샤딩은 조회 테이블을 사용하여 데이터베이스 정보를 해당하는 물리적 샤드와 매칭합니다. 조회 테이블은 데이터베이스 열을 샤드 키에 연결하는 스프레드시트의 테이블과 같습니다. 예를 들어 다음 다이어그램은 의류 색상에 대한 조회 테이블을 보여 줍니다.

색상

샤드 키

파란색

A

빨간색

B

노란색 

C

검정색

D

애플리케이션은 데이터베이스에 의류 정보를 저장할 때 조회 테이블을 참조합니다. 옷이 파란색이면 애플리케이션은 해당 샤드에 정보를 저장합니다. 

장점과 단점

소프트웨어 개발자가 디렉터리 샤딩을 사용하는 이유는 그 유연성 때문입니다. 각 샤드는 데이터베이스의 의미 있는 표현이며 범위에 의해 제한되지 않습니다. 하지만 조회 테이블에 잘못된 정보가 포함되어 있으면 디렉터리 샤딩이 실패합니다. 

지리적 샤딩

지리적 샤딩은 지리적 위치에 따라 데이터베이스 정보를 분할하고 저장합니다. 예를 들어 한 데이팅 서비스 웹 사이트는 데이터베이스 하나를 사용하여 다음과 같이 여러 도시의 고객 정보를 저장합니다. 

이름

샤드 키

John

캘리포니아

Jane

워싱턴

Paulo

애리조나

소프트웨어 개발자는 도시를 샤드 키로 사용합니다. 각 고객의 정보를 지리적으로 각 도시에 위치한 물리적 샤드에 저장합니다. 

장점과 단점

지리적 샤딩을 사용하면 샤드와 요청하는 고객 간의 거리가 짧아 애플리케이션이 정보를 더 빠르게 검색할 수 있습니다. 데이터 액세스 패턴이 주로 지리적 위치를 기반으로 하는 경우 이 기법이 효과적입니다. 하지만 지리적 샤딩의 경우 데이터가 고르지 않게 분산될 수 있습니다. 

고른 데이터 분산을 위해 데이터베이스 샤딩을 최적화하는 방법

다른 샤드는 로드가 낮은데 특정 물리적 샤드에서만 데이터 오버로드가 발생하면, 해당 샤드는 데이터베이스 핫스팟이 됩니다. 핫스팟이 발생하면 데이터베이스의 검색 프로세스 속도가 저하되므로 데이터 샤딩의 의미가 사라집니다. 

샤드 키를 적절히 선택하면 여러 샤드에 데이터를 고르게 분산할 수 있습니다. 데이터베이스 설계자는 샤드 키를 선택할 때 다음 요소를 고려해야 합니다. 

카디널리티

카디널리티는 샤드 키의 가능한 값을 설명합니다. 별도의 열 지향 데이터베이스에 따라 가능한 최대 샤드 수를 결정합니다. 예를 들어 데이터베이스 설계자가 예/아니요 값을 가지는 데이터 필드를 샤드 키로 선택할 경우 샤드 수는 2개로 제한됩니다.

빈도

빈도는 특정 샤드에 특정 정보가 저장될 확률입니다. 예를 들어 데이터베이스 설계자가 피트니스 웹 사이트의 샤드 키로 나이를 선택할 수 있습니다. 이 경우 대부분의 레코드가 30~45세 가입자에 해당하는 노드로 이동하여 데이터베이스 핫스팟이 될 수 있습니다. 

단순 변화

단순 변화는 샤드 키의 변화율입니다. 샤드 키가 단순 증가하거나 단순 감소하면 샤드의 균형이 맞지 않게 됩니다. 피드백 데이터베이스가 다음과 같이 3개의 서로 다른 물리적 샤드로 분할되는 경우를 예로 들어 보겠습니다.

  • 샤드 A에는 구매 건수가 0~10건인 고객의 피드백이 저장됩니다.
  • 샤드 B에는 구매 건수가 11~20건인 고객의 피드백이 저장됩니다.
  • 샤드 C에는 21건 이상 구매한 고객의 피드백이 저장됩니다.

비즈니스가 성장함에 따라 21건 이상 구매하는 고객이 많아지게 됩니다. 그러면 애플리케이션은 해당 피드백을 샤드 C에 저장합니다. 샤드 C는 다른 샤드보다 피드백 레코드가 더 많기 때문에 불균형한 샤드가 발생합니다.

데이터베이스 샤딩의 대안은 어떤 것들이 있나요?

데이터베이스 샤딩은 애플리케이션의 워크로드를 공유할 추가 노드 또는 컴퓨터를 할당하는 수평 조정 전략입니다. 데이터베이스 샤딩의 내결함성 아키텍처는 조직에 수평 조정의 이점을 제공합니다. 컴퓨터 중 하나에서 장애가 발생하더라도 다른 컴퓨터는 중단 없이 계속 작동합니다. 데이터베이스 설계자는 논리적 샤드를 여러 서버에 분산하여 가동 중지 시간을 줄입니다. 

단, 샤딩은 여러 데이터베이스 조정 전략 중 하나일 뿐입니다. 다른 기법도 살펴보고 비교해 보세요.

수직 조정

수직 조정은 단일 시스템의 컴퓨팅 파워를 높이는 것을 말합니다. IT 팀이 증가하는 트래픽을 처리하기 위해 데이터베이스 서버에 CPU, RAM 및 하드 디스크를 추가하는 경우를 예로 들 수 있습니다. 

데이터베이스 샤딩과 수직 조정 비교

수직 조정은 비용이 적게 들지만, 수직적으로 조정할 수 있는 컴퓨팅 리소스에는 제한이 있습니다. 반면 수평 조정 전략인 샤딩은 구현하기가 더 쉽습니다. IT 팀이 오래된 컴퓨터 하드웨어를 업그레이드하는 대신, 여러 대의 컴퓨터를 설치하는 경우를 예로 들 수 있습니다.

복제

복제는 데이터베이스와 정확히 일치하는 복사본을 만들어 여러 컴퓨터에 저장하는 기법입니다. 데이터베이스 설계자는 복제를 사용하여 내결함성을 갖춘 관계형 데이터베이스 관리 시스템을 설계할 수 있습니다. 데이터베이스를 호스팅하는 컴퓨터 중 하나에 장애가 발생해도 다른 복제본은 계속 작동합니다. 복제는 분산 컴퓨팅 시스템에 흔히 사용되는 방식입니다.

데이터베이스 샤딩과 복제 비교

데이터베이스 샤딩은 동일한 정보의 복사본을 생성하지 않습니다. 대신 하나의 데이터베이스를 여러 부분으로 분할하여 서로 다른 컴퓨터에 저장합니다. 복제와 달리 데이터베이스 샤딩은 고가용성을 제공하지 않습니다. 샤딩을 복제와 함께 사용하면 확장성과 고가용성을 모두 실현할 수 있습니다.

경우에 따라 데이터베이스 특정 데이터 세트의 복제본으로 샤딩을 구성할 수 있습니다. 예를 들어 미국과 유럽 고객 모두에게 제품을 판매하는 소매점은 사이즈 변환표의 복제본을 두 리전의 서로 다른 샤드에 저장할 수 있습니다. 이 경우 애플리케이션은 다른 데이터베이스 서버에 액세스하지 않고도 변환표의 복제본을 사용하여 치수를 변환할 수 있습니다. 

분할

파티셔닝은 데이터베이스 테이블을 여러 그룹으로 분할하는 프로세스입니다. 파티셔닝은 2가지 유형으로 분류됩니다. 

  • 수평 파티셔닝은 데이터베이스를 행별로 분할합니다.
  • 수직 파티셔닝은 데이터베이스 열별로 서로 다른 파티션을 만듭니다. 

데이터베이스 샤딩과 파티셔닝 비교

데이터베이스 샤딩은 수평 파티셔닝과 같습니다. 두 프로세스 모두 데이터베이스를 여러 개의 고유 행 그룹으로 분할합니다. 파티셔닝은 모든 데이터 그룹을 동일한 컴퓨터에 저장하지만, 데이터베이스 샤딩은 서로 다른 컴퓨터에 분산합니다.

데이터베이스 샤딩의 문제점은 무엇인가요?

데이터베이스 샤딩을 구현할 때 조직이 직면할 수 있는 문제는 다음과 같습니다.

데이터 핫스팟

데이터 분포가 고르지 않아 일부 샤드가 불균형하게 됩니다. 예를 들어 A로 시작하는 고객 이름을 포함하는 단일 물리적 샤드는 다른 샤드보다 많은 데이터를 수신합니다. 따라서 이 물리적 샤드는 다른 샤드보다 더 많은 컴퓨팅 리소스를 사용합니다.

솔루션

최적의 샤드 키를 사용하여 데이터를 고르게 분산할 수 있습니다. 다른 데이터 세트보다 샤딩에 더 적합한 데이터 세트가 있습니다.

운영 복잡성

데이터베이스 샤딩은 운영의 복잡성을 유발합니다. 개발자가 단일 데이터베이스를 관리하는 것이 아니라 여러 데이터베이스 노드를 관리해야 합니다. 정보를 검색할 때 개발자는 여러 샤드를 쿼리하고 정보를 결합해야 합니다. 이러한 검색 작업은 분석을 복잡하게 만들 수 있습니다.

솔루션

AWS 데이터베이스 포트폴리오는 데이터베이스 설정과 운영이 대폭 자동화되어 있습니다. 따라서 샤딩된 데이터베이스 아키텍처와 관련한 태스크도 간소화됩니다.

인프라 비용

조직에서 물리적 샤드로 추가하는 컴퓨터가 많을수록 인프라 비용이 더 많이 발생합니다. 온프레미스 데이터 센터의 시스템 수를 늘리면 유지 관리 비용이 가중될 수 있습니다.

솔루션

개발자가 Amazon Elastic Compute Cloud(Amazon EC2)를 사용하여 클라우드에서 샤드를 호스팅하고 확장합니다. AWS가 전적으로 관리하는 가상 인프라를 사용하면 비용을 절감할 수 있습니다.

애플리케이션 복잡성

대부분의 데이터베이스 관리 시스템에는 샤딩 기능이 내장되어 있지 않습니다. 따라서 데이터베이스 설계자와 소프트웨어 개발자가 데이터베이스를 수동으로 분할하고 분산하고 관리해야 합니다.

솔루션

수평 조정을 지원하는 몇 가지 내장 기능을 갖춘 적절한 AWS 목적별 데이터베이스데이터를 마이그레이션할 수 있습니다.

AWS는 데이터베이스 샤딩을 어떻게 지원하나요?

AWS는 현대적 데이터 전략을 수립하는 데 사용할 수 있는 글로벌 데이터 관리 플랫폼입니다. AWS에서는 적절한 목적별 데이터베이스를 선택하고, 대규모로 필요한 성능을 실현하고, 완전관리형 데이터베이스를 실행하고, 고가용성과 보안을 보장할 수 있습니다.

지금 바로 AWS 계정을 만들어 AWS에서 데이터 관리를 시작하세요.

AWS 다음 단계

무료 계정에 가입

무료 데이터베이스 서비스 보기

가입하기 
콘솔에서 구축 시작

AWS Management Console에서 구축을 시작하세요.

로그인