샤딩(Sharding)과 파티셔닝(Partitioning)의 차이

면접용 답변

샤딩과 파티셔닝은 데이터베이스의 성능을 개선하기 위한 방법입니다. 파티셔닝은 하나의 서버, 샤딩은 여러 서버에 분산한다는 차이가 있습니다.

샤딩은 큰 테이블을 동일한 스키마를 가진 여러 데이터베이스 서버에 shard 단위로 분산 저장하는 방법입니다. 물리적으로 다른 서버에 저장하기 때문에 트래픽이 분산되고, 가용성이 늘어난다다는 장점이 있지만, 데이터를 물리적으로 다른 서버로 분산시키기 때문에 여러 샤드에 있는 데이터를 조인하는데 어려움이 있고, 한 샤딩에 데이터가 몰리는 경우 성능 저하가 발생하기도 합니다.

파티셔닝이란 하나의 테이블을 여러개의 테이블로 물리적으로 분할 저장하는 방법으로 사용자는 논리적으로 하나의 테이블을 사용하는 것처럼 사용할 수 있습니다. 주로 단일 DB 내에서 성능 향상을 위해 사용하며 수평적 확장을 목적으로 합니다.

개념 설명

파티셔닝

  • 매우 큰 테이블을 여러개의 테이블로 분할하는 작업

    • 데이터를 특정 기준(range, list, hash)으로 나눠서 분리 저장함

  • 특징: 물리적으로 여러 테이블로 분산하여 저장되지만, 사용자는 마치 하나의 테이블에 접근하는 것과 같이 사용할 수 있음

  • 장점: 큰 데이터를 여러 테이블로 나눠 저장하기 때문에 쿼리 성능이 개선됨

종류

  • List Partitioning: 데이터 값이 특정 목록에 포함된 경우 데이터를 분리함

    • ex 특정 지역별로 데이터를 분할하는 경우

  • Range Partitioning: 데이터를 특정 범위 기준으로 분할할 때 사용함

    • ex 데이터 월별 분할

  • Hash Partitioning: 해시 함수를 사용하여 데이터를 분할할 때 사용함

    • 여러 컬럼에 해싱하는 것은 권장하지 않음

  • Composite Partitioning: 세 파티셔닝 종류 중 두개 이상을 사용하는 것

샤딩

  • 물리적으로 여러 서버에 데이터를 나누어 저장하는 분산 처리 방식

  • 수평적 확장이 목적

    • 수평 파티셔닝과 차이점: 파티셔닝은 모든 데이터를 동일한 컴퓨터에 저장, 샤딩은 데이터를 서로 다른 컴퓨터에 분산함

  • 보통 대규모 시스템에서 사용함

  • 데이터베이스 차원이 아닌 애플리케이션 레벨에서 구현하는 것이 일반적임

  • 단점

    • 여러 샤드에 걸친 데이터를 조인하는 것이 어려움

    • 데이터베이스에 집중적으로 데이터가 몰리면 Hotspot이 되어 성능이 느려짐

    → 데이터를 여러 샤드에 고르게 분배하는 것이 중요함

종류

  • Hash sharding: 키에 해시 함수를 적용한 결과값으로 샤드를 결정

    • 장점: 데이터가 균등하게 분산됨 → 로드밸런싱에 유리함

    • 단점: 범위 쿼리에 비효율적

  • Range sharding: 키의 값 범위를 기준으로 샤드를 결정

    • 장점: 범위 쿼리에 유리함

    • 단점: 특정 범위에 데이터가 몰려 성능이 저하될 수 있음

추가 질문

  • Hash Sharding 방식에 샤드를 추가하면 어떤 문제가 발생하나요?

    • 해결방법은?

  • MySQL이나 PostgreSQL에서 파티셔닝이 어떻게 이루어지는지 설명해주세요.

Last updated