[개발 일기] 2025.05.12 - 분산 저장 (파티셔닝, 샤딩)

2025. 5. 12. 12:49·개발 일기

💡 개요

 

오늘은 DB의 안정성과 성능을 향상하는 방법인 분산 저장 기법(파티셔닝과 샤딩)에 대해 정리 해보자.

 

 

 

🛠️ 파티셔닝

 

파티셔닝이란 데이터베이스를 특정 조건을 적용해 여러 부분으로 분할하는 것이다.

 

 

하나의 DBMS에 너무 큰(많은 컬럼을 관리) 테이블이 들어가면 성능 측면에서 문제가 발생할 수 있다.

 

 

이를 방지하기 위해 테이블이나 인덱스를 작은 파티션 단위로 나누어 사용하는 방법을 의미한다.

 

 

파티셔닝을 통해 얻을 수 있는 장점은 다음과 같다.

 

 

✅ 성능 향상

쿼리를 수행하는 테이블의 데이터 수가 감소하기 때문에 검색 속도가 향상된다.

 

 

✅ 관리 용이

전체 테이블을 대상으로 백업이나 복원을 진행하는 것이 아니라 파티션 단위로 관리를 하기 때문에 데이터 관리가 더 편해진다.

 

 

 

🛠️ 샤딩

 

샤딩이란 데이터를 여러 개의 DB에 분산 저장하는 기술이다.

 

 

일반적으로 수평 분할 방식을 사용하며 시스템의 확장성이나 성능, 가용성을 높이는 데 사용된다.

 

 

보통 하나의 데이터를 저장하는 데 어느 DB나 테이블에 저장할지 사용되는 특정 기준이 있는데 이 기준이 되는 것을 Shard Key라고 한다.

 

 

사용자 ID를 기준으로 샤딩한 경우

  • member_id % 2 == 0 → DB1
  • member_id % 2 == 1 → DB2

 

 

샤딩을 통해 얻을 수 있는 장점은 다음과 같다.

 

 

✅  확장성

데이터 양이 많아져도 샤드를 추가하면 쉽게 확장 가능하다.

 

 

✅ 성능 향상

쿼리가 특정 샤드에만 실행되므로 병목 감소, 처리 속도 증가한다.

 

 

✅  장애 격리

하나의 샤드에 장애가 나도 전체 시스템은 동작 가능하다.

 

 

 

🤔 파티셔닝과 샤딩의 차이점

 

여기서 의문점은 파티셔닝과 샤딩의 동작 방식이 굉장히 유사해 보인다는 것이다.

 

 

하지만 두 기술에도 차이점이 있는데 다음과 같다.

 

 

파티셔닝은 하나의 DBMS 내부에 있는 테이블을 나눠 데이터를 관리한다. 즉, 하나의 DB를 사용한다.

 

 

하지만 샤딩의 경우 다른 DBMS까지 나눈 후 데이터를 관리한다.

 

 

그렇기 때문에 파티셔닝은 내부 테이블에서 데이터가 관리되기 때문에 조인이 편하지만, 샤딩의 경우 네트워크 요청을 통해 다른 DBMS에 접근해야 하기 때문에 조인이 어렵다.

 

 

하지만 하나의 DBMS을 사용하는 파티셔닝의 경우 DBMS 자체에 문제가 생기면 전체 서비스에 영향을 끼치지만, 샤딩의 경우 샤드 하나(한 DBMS)에 문제가 발생해도, 다른 샤드가 있기 때문에 서비스에 영향을 적게 끼친다.

'개발 일기' 카테고리의 다른 글

[개발 일기] 2025.05.14 - ConfigurationProperties와 Setter  (0) 2025.05.14
[개발 일기] 2025.05.13 - 자바 Optional 정리  (0) 2025.05.13
[개발 일기] 2025.05.11 - Redis 만료 원리  (0) 2025.05.11
[개발 일기] 2025.05.10 - Bulk을 사용한 저장이 하나씩 저장하는 것 보다 빠른 이유  (0) 2025.05.10
[개발 일기] 2025.05.09 - MIME  (0) 2025.05.09
'개발 일기' 카테고리의 다른 글
  • [개발 일기] 2025.05.14 - ConfigurationProperties와 Setter
  • [개발 일기] 2025.05.13 - 자바 Optional 정리
  • [개발 일기] 2025.05.11 - Redis 만료 원리
  • [개발 일기] 2025.05.10 - Bulk을 사용한 저장이 하나씩 저장하는 것 보다 빠른 이유
오도형석
오도형석
  • 오도형석
    형석이의 성장일기
    오도형석
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • MSA 모니터링 서비스
        • DB
      • 스파르타 코딩클럽
        • SQL
        • Spring
      • 백엔드
        • Internet
        • Java
        • DB
      • 캡스톤
        • Django
        • 자연어처리
      • Spring
        • JPA
        • MSA
      • ETC
        • ERROR
      • 개발 일기 N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • 태그

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
오도형석
[개발 일기] 2025.05.12 - 분산 저장 (파티셔닝, 샤딩)
상단으로

티스토리툴바