Data/DataBase

[DataBase] 샤딩(Sharding), 파티셔닝(Partitiong), 레플리케이션(Replication)

누구세연 2024. 10. 20. 15:19

데이터베이스에서 대량의 데이터를 효율적으로 관리하고 성능을 최적화하기 위한 기법들에 대해 알아보겠습니다. 🤗

 

샤딩(Sharding)

샤딩은 데이터 베이스를 수평으로 나누어 여러 서버에 분산 저장하는 기법입니다.

데이터가 여러 서버에 분산되어 저장되므로, 시스템의 부하를 줄이고 성능을 향상할 수 있습니다.

 

샤딩의 장점

  • 부하 분산
    여러 서버에 데이터가 분산되어 요청을 병렬로 처리할 수 있습니다.
  • 확장성
    데이터가 늘어날 때 서버를 추가하여 쉽게 확장할 수 있습니다.
  • 장애 대응
    특정 서버에 장애가 발생해도 다른 서버가 계속 작동하므로 시스템의 가용성이 높아집니다.

샤딩의 단점

  • 복잡성 증가
    샤딩을 구현하면 데이터 관리와 쿼리 로직이 복잡해질 수 있습니다.
    특히 데이터가 여러 샤드에 분산되어 있기 때문에 데이터 조회 시 여러 샤드를 쿼리 해야 할 경우 추가적인 로직이 필요합니다.
  • 데이터 분포 문제
    사용자 ID를 기준으로 샤딩할때, 특정 샤드에 데이터가 몰리면 성능이 저하될 수 있습니다.
    예를 들어, 특정 사용자 그룹의 활동이 많아지면 해당 샤드의 부하가 증가하게 됩니다.
  • 애플리케이션 수정 필요
    기존 애플리케이션이 샤딩되지 않은 상태에서 설계되었다면 샤딩 도입을 위해 애플리케이션 코드를 수정해야 할 수 있습니다.

 

예시

대규모 온라인 쇼핑몰이 있습니다.

이 쇼핑몰은 수백만 명의 사용자를 보유하고 있으며, 사용자 데이터베이스가 커지면서 데이터 접근 속도가 느려지는 문제가 발생했습니다. 이를 해결하기 위해 샤딩을 도입하기로 결정합니다.

  • 샤딩 기준: 사용자 ID를 기준으로 샤딩을 진행합니다.
  • 서버 A (shard_1): 사용자 ID가 짝수인 사용자 데이터(예: 2, 4, 6,...).
  • 서버 B (shard_2): 사용자 ID가 홀수인 사용자 데이터(예: 1, 3, 5,...).

이러한 방식으로 데이터를 두 개의 서버에 분산시키면, 각 서버는 특정 사용자 그룹만을 처리하게 되므로, 요청 처리 속도가 빨라지고 데이터베이스의 부하가 줄어듭니다. 사용자가 로그인하거나 상품을 검색할 때, 서버 A와 B가 동시에 요청을 처리하여 전체 성능이 향상됩니다.

샤딩 예시

 

 

파티셔닝(Partitioning)

하나의 테이블을 여러 개의 작은 테이블로 나누는 과정입니다.

각 파티션은 동일한 구조를 가지지만 서로 다른 데이터를 포함합니다. 

이 기법은 주로 데이터 검색 성능을 향상하기 위해 사용됩니다.

 

파티셔닝 장점

  • 성능 향상
    필요한 데이터만 검색하여 속도를 높일 수 있습니다.
  • 관리 용이성
    각 파티션을 개별적으로 관리할 수 있어 유지보수가 쉬워집니다.
  • 장애 격리
    특정 파티션에서 장애가 발생해도 전체 시스템에 영향을 미치지 않습니다.

파티셔닝 단점

  • 관리의 복잡성
    파티션이 많아질수록 데이터베이스 관리가 복잡해질 수 있습니다.
    각 파티션에 대한 백업, 복구, 유지보수 작업이 추가적으로 필요합니다.
  • 파티션 스키 설계의 중요성
    초기 파티션 설계가 잘못되면 나중에 데이터 접근 패턴이 변화했을 때 문제를 일으킬 수 있습니다.
    예를 들어, 특정 파티션에만 쿼리가 몰리면 그 파티션의 성능이 저하됩니다.
  • 동적 파티셔닝의 어려움
    데이터가 지속적으로 증가하거나 특정 기준으로 자주 변경되는 경우 기존 파티션 구조를 동적으로 조정하는 것이 어려울 수 있습니다.

예시

위의 대규모 온라인 쇼핑몰을 계속해서 예를 들어보겠습니다.

사용자가 매년 증가함에 따라 데이터베이스의 크기가 커지며, 특정 연도의 사용자 데이터를 검색할 때 성능이 저하되는 문제가 발생합니다.

이를 해결하기 위해 파티셔닝을 도입하기로 결정합니다.

  • 파티션 구조
    • users_2020: 2020년에 가입한 사용자 데이터
    • users_2021: 2021년에 가입한 사용자 데이터
    • users_2022: 2022년에 가입한 사용자 데이터

이러한 방식으로 각 연도별로 데이터를 나누어 저장하면, 예를 들어 2021년에 가입한 사용자 데이터를 검색할 때 users_2021 테이블만 검색하면 되므로 검색 속도가 빨라집니다. 데이터가 작고 관리하기 쉬운 파티션으로 나뉘어 있어 효율적인 데이터 관리가 가능합니다.

파티셔닝 예시

 

 

레플리케이션(Replication)

동일한 데이터를 여러 데이터베이스 서버에 복제하여 저장하는 기법입니다.

이 방법은 데이터의 가용성을 높이고 장애 발생 시 데이터를 보호하는데 도움을 줍니다.

 

레플리케이션 장점

  • 데이터 가용성 향상
    복제된 서버에서 데이터에 접근할 수 있으므로 한 서버에 장애가 발생하더라도 다른 서버에서 데이터 접근할 수 있습니다.
  • 장애 대응
    데이터베이스 서버 중 하나에 장애가 발생해도 다른 서버가 이를 대체할 수 있습니다.
  • 읽기 성능 향상
    읽기 요청을 여러 서버에 분산하여 처리할 수 있으므로, 읽기 성능이 향상됩니다.

레플리케이션 장점

  • 데이터 일관성 문제
    주 서버에 데이터가 쓰일 때 복제 서버로 데이터가 전파되는 과정에서 지연이 발생할 수 있습니다.
    이로 인해 사용자들이 읽는 데이터가 최신 상태가 아닐 수 있습니다.
  • 주 서버의 부하 증가
    주 서버에서 모든 쓰기 작업이 이루어지므로 주 서버의 부하가 증가할 수 있습니다.
    특히 높은 쓰기 트래픽을 처리하는 경우 성능 저하가 발생할 수 있습니다.
  • 복잡한 장애 처리
    복제 서버가 장애가 발생했을 때 주 서버와 복제서버 간의 데이터 불일치 문제를 해결하기 위해 추가적인 관리가 필요합니다.

 

예시

대규모 소셜 미디어 플랫폼을 운영한다고 가정해 보겠습니다.

이 플랫폼은 사용자 프로필, 게시물, 댓글 등의 데이터를 실시간으로 처리해야 하며, 수백만 명의 사용자로부터 지속적으로 요청이 들어옵니다. 이러한 요구를 충족하기 위해 래플리케이션을 도입합니다.

 

  • 주 서버 (Master): 모든 데이터의 쓰기 작업이 이루어지는 주 서버입니다.
  • 복제 서버 (Replica A 및 Replica B): 주 서버의 데이터를 복제하여 읽기 작업을 처리합니다.

이 구조에서는 사용자가 게시글을 작성하거나 댓글을 달면 주 서버에 데이터가 저장됩니다.

이 데이터는 즉시 Replica A와 Replica B로 복제되어 다른 사용자들이 이 데이터를 읽을 수 있도록 합니다.

이를 통해 주 서버의 부하를 줄이고, 읽기 요청이 많은 경우에도 원활하게 서비스를 제공할 수 있습니다.

 

레플리케이션 예시

 

 

💡 샤딩, 파티셔닝, 래플리케이션은 각각 데이터베이스의 성능과 효율성을 높이는 기법입니다.
이러한 기법들을 활용하면 대규모 데이터베이스의 데이터 관리를 최적화할 수 있으며, 특히 대규모 트래픽을 처리해야 하는 애플리케이션에서 효과적인 결과를 얻을 수 있습니다.
각 기법의 특성과 장단점을 잘 이해하고 상황에 맞게 조합하여 사용하는 것이 중요합니다!!