CS

[DB] 파티셔닝 vs 샤딩: 데이터베이스 성능을 높이는 최적의 선택은?

사이버나그네 2024. 7. 1. 16:34

[배경]

 효율적인 데이터베이스 설계는 애플리케이션의 성능을 극대화하는 데 핵심적인 요소입니다. 파티셔닝과샤딩, 클러스터링은 데이터베이스 성능을 향상시키고 확장성을 높이는 두 가지 주요 방법입니다. 특히, 대용량의 데이터 베이스의 최적화 하기에 필수적인 개념인데, 이 글에서는 데이터베이스 파티셔닝과 샤딩 그리고 클러스터링의 개념을 쉽게 설명하고, 각 기술의 장점을 활용하여 데이터베이스 성능을 최적화하는 방법을 소개합니다.


 

[내용]

파티셔닝 (Partitioning)

1. 파티셔닝의 정의

 용량이 큰 Table 이나 인덱스관리하기 쉬운 단위(partition)로 분리하는 방법입니다. 하나의 테이블에 많은 양의 데이터가 저장되면, 인덱스를 추가하고 테이블을 몇 개로 쪼개도 성능이 저하되는 경우일 때주로 사용됩니다. 논리적으로는 하나의 테이블이지만, 물리적으로는 여러 개의 테이블로 분리하는 기술입니다.

 

2. 파티셔닝의 장단점

장점 단점
데이터 가용성 향상 테이블 간의 조인 비용 증가
파티션별 독립적인 백업 및 복구 가능 테이블 인덱스 파티션 전략 고정
성능 향상 적절하지 않은 파티션 키 지정시 성능 감소
경합 감소 복잡성 증가

 

3. 파티셔닝의 구현 방법

 데이터베이스 파티셔닝은 데이터베이스의 테이블을 분할하여 분산 저장하는 기술입니다. 파티셔닝을 사용하면 데이터베이스의 용량이 증가해도 처리량이 유지될 수 있으며, 데이터의 논리적 분할에 따라 분산 처리를 수행할 수 있습니다. 이러한 기술은 수직 파티셔닝과 수평 파티셔닝 두 가지 방법으로 구현될 수 있습니다.

 

  - Horizontal Partitioning (수평분할)

 데이터베이스에서 테이블의 Row를 분할하여 여러 개의 서로 다른 테이블로 나누는 방법입니다. 주로 데이터베이스의 용량이 커지면서 성능 저하를 막기 위해 사용됩니다. 샤딩이라는 기법과 비숫하지만 수평 파티션은 동일한 서버에 저장하는 차이가 있습니다.

 

 

 - Vertical Partitioning (수직분할)

 수직 파티셔닝은 테이블의 Column을 분할하여 여러 개의 서로 다른 테이블로 나누는 방법입니다. 
성능 개선 이외에도 이미 정규화가 되어있는 테이블을 퍼포먼스를 위해서, 또는 민감한 정보에 제한을 걸어서 접근을 방지하기 위해서, 자주 사용되는 Column을 모으기 위해서 수직 파티셔닝을 수행할 수 있습니다.

 

 

샤딩 (Sharding)

1. 샤딩의 정의

 샤딩은 동일한 스키마를 가지고 있는 데이터를 다수의 데이터베이스에 분산하여 저장하는 기법입니다.
어떻게 보면 샤딩은 수평 파티셔닝과 비슷하지만 차이점은 수평 파티셔닝의 경우 동일한 서버에 저장되어 있지만 샤딩은 서로 다른 서버에 분산하여 저장한다는 점입니다. 따라서 쿼리 성능 향상뿐만 아니라 부하가 분산되는 효과까지 얻을 수 있습니다. 즉, 샤딩은 데이터베이스 차원의 수평 확장( scale-out )입니다.

동일한 서버의 수평분할과 샤딩의 차이 이미지

 

위처럼 모든 파티션을 같은 DB 서버에 저장하는 수평 파티셔닝과 다르게 샤딩은 각 파티션들을 서로 다른 DB 서버에 저장함으로서 DB서버의 부하( Load )를 분산시키는 목적이 있습니다. 이때 파티션 키( Partition Key )를 샤드 키( Shard Key )라고 부르고 각 파티션을 샤드( Shard )라고 부릅니다. 규모가 큰 서비스, 데이터가 많이 쌓이는 테이블, 트래픽이 많이 몰리는 경우에 사용합니다.

 

2. Scale-out 과 Scale-up 이란?

 수많은 사용자의 트래픽을 서버가 처리하기 위해선 어떻게 해야할까요? 간단하게 더 좋은 성능의 서버로 업그레이 하거나, 서버를 여러대 설치해 나눠서 처리하면 해결할 수 있을 것 같은데요. 상황에 따라서 두 방법 중 한가지 방법을 선택해서 해결 할 수 있습니다. 여기서 서버를 업그레이드 하는 방법을 Scale-Up이라고 하고, 서버를 여러대 설치하는 방법을 Scale-Out이라고 합니다.

1) Scale-up 의 장단점 

현재 사용 중인 서버의 성능을 업그레이드해서 처리 능력을 향상시키는 방법

https://creeraria.tistory.com/37

 

Scale-Up의 장점

  • 단순히 서버의 장비를 추가 또는 교체하는 작업이라 구축 및 설계가 간단합니다.
  • 별도의 컨트롤러나 네트워크 인프라 비용이 발생하지 않습니다.
  • 여러대의 서버를 관리하지 않아도 되기 때문에 데이터 정합성 문제에 자유롭습니다.

* 데이터 정합성: 어떤 데이터들의 값이 서로 일치하는 상태

 

Scale-Up의 단점

  • 하나의 서버에 추가할 수 있는 부품의 개수가 제한적입니다.
  • 한정된 자원을 초과하여 성능을 향상시키기 위해서는 서버 자체를 변경하는 작업이 필요합니다.
  • 하나의 서버에서 모든 트래픽을 처리해야 하기 때문에 심각할 경우 부하가 걸렸을 때 해당 서버가 복구되기 전까지 서비스를 중단해야 하는 상황에 빠질 수 있습니다.

 

2) Scale-out 의 장단점 

비슷한 사양의 서버를 추가하여 성능을 증가시키는 방법 

출처: https://creeraria.tistory.com/37

 

Scale-Out의 장점

  • 클라이언트의 요청을 나눠서 처리하기 때문에 하나의 노드에서 장애가 발생하더라도 다른 노드에서 서비스 제공이 가능하고, 시스템의 가용성을 높일 수 있습니다.
  • 필요에 따라 더 많은 서버를 추가하고 감소하는 작업(pay-as-you-grow)이 가능하기 때문에 확장에 유연합니다. 
  • 분산 처리가 가능하기 때문에 트래픽이 집중되어 부하가 발생하는 것을 분산할 수 있습니다.

*가용성: 서버와 네트워크, 프로그램 등의 정보 시스템이 정상적으로 사용 가능한 정도

 

Scale-Out의 단점

  • Scale-Up에 비해 확장에 유연하긴 하지만 Scale-Out역시 무한정 확장은 불가능합니다.
  • 여러 대의 서버를 관리하기 위한 설계와 구현이 복잡해지고 이에 따른 관리 비용이 증가합니다.
  • 서버 각각의 성능과 안정성 측면에서 Scale-Up 방식보다 불리합니다.
  • 여러 대의 서버로 요청을 처리하도록 분산 서버 환경을 만들면 각 서버별로 로그인 세션 정보가 다른 세션 불일치 문제가 발생합니다.

3) Scale-out의 부하 분산 처리 방법

 로드 밸런싱(Load Balancing)

처리해야할 업무나 요청을 여러대의 서버로 나누어 처리하는 것으로 한대의 서버로 부하가 집중되지 않도록 트래픽을 관리해 각각의 서버가 최적의 효과를 낼 수 있도록 합니다. 로드밸런싱 기술을 제공하는 서비스 또는 장치를 로드 밸런서(Load Balancer)라고 하고 클라이언트와 네트워크 트래픽이 집중되는 서버들 사이에 위치합니다.

 

 로드 밸런싱 알고리즘

  • 라운드 로빈(Round Robin Method): 서버에 들어온 요청을 순서대로 돌아가며 배정하는 방식
  • 가중 라운드 로빈(Weighted Round Robin Method): 서버마다 가중치를 매기고 가중치가 높은 서버에 클라이언트 요청을 우선적으로 배정하는 방식
  • IP해시방식(IP Hash Method): 클라이언트의 IP주소를 특정 서버로 매핑하여 요청 처리하는 방식
  • 최소 연결 방식(Least Connection Method): 가장 적은 연결 상태를 보이는 서버에 우선적으로 트래픽을 배분하는 방식
  • 최소 리스폰 타임(Least Response Time Method): 서버의 현재 연결 상태와 응답 시간을 모두 고려해 트래픽을 배분하는 방식

 

 

 

클러스터링 (Clustering)

1. 클러스터링의 정의

 데이터 저장 시 데이터 액세스 효율을 향상시키기 위해, 동일한 성격의 데이터를 동일한 데이터 블록에 저장하는 물리적인 기법입니다. 저장 장치로부터 데이터를 읽어오는 시간을 줄이기 위해서 조인이나 자주 사용되는 테이블의 데이터를 저장 장치 내 같은 위치에 저장시키는 방법입니다.

2. 클러스터링의 장단점

장점 단점
데이터 조회 성능 향상 (디스크 I/O를 줄여줌) 데이터 갱신 (입력, 수정, 삭제) 시 성능 저하
클러스터된 테이블 사이에 조인이 발생할 경우 그 처리 시간이 단축 복잡성 증가
클러스터키 열을 공유하여 한번만 저장해서 저장 영역의 사용을 감소 여러대의 서버운용으로 비용 증가

 

 


[결론]

 데이터베이스 최적화의 성공은 이론이 아닌 실용적인 접근에서 나옵니다. 데이터베이스가 용량이 너무 커져 관리하기 힘들기에 생긴 것이 파티셔닝으로 파티션 단위로 분산하여 조회, 추가 등의 성능을 향상할수 있었습니다. 파티셔닝과 비슷하지만 아예 서버를 분리해서 저장하는 샤딩을 통해 데이터 검색 성능을 향상시킬수도 있습니다. 클러스터링은 여러서버의 데이터를 하나의 서버에 저장시켜 조회 성능을 향상시킬 수 있었습니다. 이런 기술들을 적절히 사용하여 최적의 데이터 베이스를 구현하도록 노력해야합니다.

 

 


[출처 및 참조]