데이터베이스 샤딩이란 무엇인가요?
데이터베이스 샤딩은 대규모 데이터베이스를 여러 머신에 저장하는 프로세스입니다. 단일 머신 또는 데이터베이스 서버는 제한된 양의 데이터만 저장하고 처리할 수 있습니다. 데이터베이스 샤딩은 데이터를 샤드라고 하는 더 작은 청크로 분할하고 여러 데이터베이스 서버에 저장함으로써 이러한 한계를 극복합니다. 모든 데이터베이스 서버의 기본 기술은 일반적으로 동일하며 함께 작동하여 대량의 데이터를 저장하고 처리합니다.
데이터베이스 샤딩이 중요한 이유는 무엇인가요?
애플리케이션이 성장함에 따라 애플리케이션 사용자 수와 애플리케이션에 저장되는 데이터의 양도 시간이 갈수록 증가합니다. 데이터 볼륨이 너무 커지고 애플리케이션을 사용하여 동시에 정보를 읽거나 저장하려고 하는 사용자가 너무 많아지면 데이터베이스에서 병목 현상이 발생합니다. 이로 인해 애플리케이션 속도가 느려지고 고객 경험에 영향을 미치게 됩니다. 이에 대한 솔루션의 하나로, 여러 샤드에서 더 작은 데이터 세트를 병렬로 처리하는 데이터베이스 샤딩을 사용하면 이 문제를 해결할 수 있습니다.
데이터베이스 샤딩의 이점은 무엇인가요?
조직에서 데이터베이스 샤딩을 사용하면 다음과 같은 이점을 얻을 수 있습니다.
응답 시간 개선
대규모의 단일 데이터베이스에서는 데이터를 검색하는 데 시간이 더 오래 걸립니다. 데이터베이스 관리 시스템은 올바른 데이터를 찾기 위해 여러 행을 검색해야 합니다. 그에 비해 데이터 샤드는 전체 데이터베이스보다 행 수가 적습니다. 따라서 샤딩된 데이터베이스에서는 특정 정보를 검색하거나 쿼리를 실행하는 데 걸리는 시간이 단축됩니다.
전체 서비스 중단 방지
데이터베이스를 호스팅하는 컴퓨터에서 장애가 발생하면 데이터베이스를 사용하는 애플리케이션에서도 오류가 발생합니다. 데이터베이스 샤딩은 데이터베이스의 일부를 다른 컴퓨터에 배포함으로써 이 같은 문제를 방지합니다. 컴퓨터 중 하나에서 장애가 발생하더라도 정상 작동하는 다른 샤드를 사용하여 작동할 수 있으므로 애플리케이션이 중단되지 않습니다. 또한 샤딩은 샤드 간 데이터 복제와 함께 사용되는 경우가 많습니다. 즉, 샤드 중 하나를 사용할 수 없게 되더라도 대체 샤드에서 데이터에 액세스하고 복원할 수 있습니다.
효율적인 크기 조정
데이터베이스가 확장되면 더 많은 컴퓨팅 리소스를 소비하고 결국 스토리지의 최대 용량에 도달하게 됩니다. 이 경우 조직은 데이터베이스 샤딩을 사용하여 더 많은 컴퓨팅 리소스를 추가함으로써 데이터베이스의 확장을 지원할 수 있습니다. 유지 관리를 위해 애플리케이션을 종료하지 않고도 런타임에 새 샤드를 추가할 수 있습니다.
고른 데이터 분산을 위해 데이터베이스 샤딩을 최적화하는 방법
다른 샤드는 로드가 낮은데 특정 물리적 샤드에서만 데이터 오버로드가 발생하면, 해당 샤드는 데이터베이스 핫스팟이 됩니다. 핫스팟이 발생하면 데이터베이스의 검색 프로세스 속도가 저하되므로 데이터 샤딩의 의미가 사라집니다.
샤드 키를 적절히 선택하면 여러 샤드에 데이터를 고르게 분산할 수 있습니다. 데이터베이스 설계자는 샤드 키를 선택할 때 다음 요소를 고려해야 합니다.
카디널리티
카디널리티는 샤드 키의 가능한 값을 설명합니다. 별도의 열 지향 데이터베이스에 따라 가능한 최대 샤드 수를 결정합니다. 예를 들어 데이터베이스 설계자가 예/아니요 값을 가지는 데이터 필드를 샤드 키로 선택할 경우 샤드 수는 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가 전적으로 관리하는 가상 인프라를 사용하면 비용을 절감할 수 있습니다.
애플리케이션 복잡성
대부분의 데이터베이스 관리 시스템에는 샤딩 기능이 내장되어 있지 않습니다. 따라서 데이터베이스 설계자와 소프트웨어 개발자가 데이터베이스를 수동으로 분할하고 분산하고 관리해야 합니다.
'DB' 카테고리의 다른 글
Oracle vs MySQL vs MSSQL (0) | 2023.03.10 |
---|---|
DataSource, Connection Pool, HikariCP (0) | 2023.03.01 |
w3school SQL tutorial (0) | 2023.02.21 |
[인프런] 시니어 백엔드 개발자가 알려주는 데이터베이스 개론 & SQL (0) | 2023.02.21 |
정규화 normalization (0) | 2022.10.25 |