수직 스케일링(Vertical Scaling / Scale-Up) 은 기존의 단일 서버의 하드웨어 성능을 높이는 방법입니다. 예를 들어, 더 빠른 CPU, 더 많은 RAM, 또는 더 큰 디스크 공간을 추가하는 방식으로 시스템 성능을 향상시킬 수 있습니다. 데이터베이스는 동일한 인스턴스에서 운영되며, 시스템 자체는 변경되지 않으므로 애플리케이션 코드는 수정할 필요가 없습니다.
수평 스케일링(Horizontal Scaling / Scale-Out) 은 여러 서버를 추가하여 데이터베이스의 부하를 분산하는 방법입니다. 여러 개의 데이터베이스 인스턴스를 추가하여 데이터와 트래픽을 분산시킵니다. 일반적으로 로드 밸런서를 사용해 요청을 여러 서버로 분산 처리하며, 각 서버는 동일한 데이터베이스를 호스팅하거나 데이터의 일부만 저장할 수도 있습니다. 대표적으로 샤딩(Sharding)과 레플리카셋(Replica Set) 같은 방법이 사용됩니다.
장점:
단점:
장점:
단점:
샤딩(Sharding) 은 대규모 데이터를 여러 개의 분리된 데이터베이스 인스턴스에 나누어 저장하는 기술입니다. 각 데이터베이스 인스턴스를 샤드(Shard)라고 하며, 데이터는 특정 기준에 따라 각 샤드에 분배됩니다. 예를 들어, 사용자 ID에 따라 데이터를 여러 샤드에 분배할 수 있습니다.
샤딩이 필요한 상황은 주로 데이터의 양이 매우 크거나, 트래픽이 특정 데이터베이스 인스턴스에 집중되어 성능 저하가 발생할 때입니다. 특히 수평 스케일링이 필요하지만, 단순히 서버를 추가하는 것만으로는 해결되지 않는 경우에 샤딩을 고려합니다.
장점:
단점:
샤딩 전략을 선택할 때 고려해야 할 요소로는 데이터 액세스 패턴, 데이터 일관성 요구사항, 확장성 필요성, 애플리케이션의 쿼리 복잡성 등이 있습니다. 주요 샤딩 전략으로는 다음이 있습니다:
범위 기반 샤딩(Range-based Sharding): 샤딩 키의 값에 따라 특정 범위의 데이터를 각 샤드에 할당하는 방법입니다. 예를 들어, 사용자 ID가 11000인 데이터는 샤드 A에, 10012000인 데이터는 샤드 B에 할당하는 방식입니다. 이 방식은 구현이 간단하지만, 특정 범위에 데이터가 집중될 경우 불균형 문제가 발생할 수 있습니다.
해시 기반 샤딩(Hash-based Sharding): 샤딩 키에 해시 함수를 적용하여 해시 값에 따라 데이터를 샤드에 분배하는 방법입니다. 해시 기반 샤딩은 데이터가 균등하게 분포되도록 도와주지만, 해시 충돌이나 샤드 추가 시 재분배 문제를 고려해야 합니다.
지리적 샤딩(Geographic Sharding): 데이터의 지리적 위치에 따라 샤드를 나누는 방법입니다. 예를 들어, 아시아 지역 사용자 데이터를 아시아 데이터 센터에, 북미 지역 사용자 데이터를 북미 데이터 센터에 저장하는 방식입니다. 이 방식은 지리적으로 분산된 사용자에게 낮은 지연 시간을 제공할 수 있습니다.
읽기 복제본(Read Replica) 은 주 데이터베이스의 읽기 작업 부하를 분산하기 위해 사용하는 복제본입니다. 주 데이터베이스에 쓰기 작업이 발생하면, 그 데이터가 읽기 복제본으로 복제되어 읽기 전용으로 사용됩니다. 일반적으로 주 데이터베이스의 성능을 보존하면서도 읽기 요청을 처리하기 위한 용도로 사용됩니다.
장점:
단점: