뒤끝터디 5주차 – 파티셔닝
1. 들어가며
5장에서 복제를 다루며 동일한 데이터를 여러 노드에 저장하는 방식을 배웠다. 이중화로 읽기 처리량을 높이고 장애 대응도 가능해졌지만, 여전히 데이터가 너무 많거나 요청이 너무 많은 상황은 복제만으로 감당할 수 없다.
이럴 때 등장하는 해결책이 바로 데이터 파티셔닝이다. 이번에는 파티셔닝과 다양한 기법들, 그리고 클러스터 환경에서의 재균형화 전략까지 적혀있어 읽어 보았다.
2. New – 새롭게 알게 된 개념 정리
2-1. 데이터 파티셔닝의 진짜 이유
파티셔닝을 고민하는 이유는 명확하다. 확장성이다.
단일 장비로 처리할 수 없는 수준의 데이터를 쪼개서 여러 장비에 나누고, 그에 따라 저장과 질의 부담을 분산하려는 것이다. 단순히 데이터를 나누는 것이 아니라, 어떻게 나눌지, 그리고 어디에 나눌지를 결정하는 것이 핵심이었다.
2-2. 문서 기준 보조 색인 파티셔닝
이 부분은 ID 기준으로 문서를 조회하는 방식 같았다. 파티셔닝된 환경에서 보조 색인을 어떻게 운영할지를 다루는데,
여기에 전역 색인(global index)과 지역 색인(local index) 개념이 등장한다.
- 전역 색인: 클러스터 전체를 아우르는 색인. 단일 색인으로 빠르게 찾을 수 있지만, 업데이트 비용이 높다.
- 지역 색인: 각 파티션(샤드)에 존재하는 독립 색인. 쓰기에는 유리하지만 질의 시 여러 샤드를 동시에 뒤져야 한다.
흠 ... 어렵다..
전역 색인은 ‘책 맨 뒤의 주제별 색인’처럼 한 번에 찾아볼 수 있는 구조.
반면 지역 색인은 ‘각 장의 맨 앞에 있는 소제목 목차’처럼, 해당 장만 뒤져야 하므로 찾는 범위가 제한적이다.
라고 찾아보니가 조금 나왔다. 새롭게 알게 되었지만 명확하지도 않는 부분이다.
3. Difficulty – 명확하지 않았던 부분
3-1. 전역 vs 지역 색인
색인이라는 말 자체가 SQL 인덱스처럼 느껴진다.
3-2. 파티션 재균형화
책에서 언급한 파티션 재균형화(rebalancing)는 다음과 같은 상황에서 필요하다고 한다:
- 질의 처리량이 늘어 CPU를 더 추가하고 싶을 때
- 데이터셋이 커져 디스크나 메모리 자원이 부족할 때
- 장비 장애로 특정 노드가 제거되어야 할 때
뭔가 스케일업/다운, 오토스케일링, L7 로드밸런서랑 비슷한 것 같다.
결국 핵심은 데이터를 어떻게 고르게 나눌 것인가, 그 과정에서 문제가 생기지 않도록 어떻게 설계할 것인가인 셈이다.
4. Amendment – 도움이 된 생각의 전환
이 장을 정리하면서 서버 부하 분산 구조(L7 Load Balancing와 비교하면 이해가 더 쉬웠다.
- L7에서 사용자의 요청을 여러 서버로 분산하듯
- 파티셔닝은 데이터를 여러 노드로 나눠 저장하고 처리한다.
결국 데이터든 요청이든, 분산의 목적은 같다. 병목을 피하고, 고르게 나누며, 장애 대응까지 고려하는 구조.
이 시점에서 데이터베이스는 단순 저장소가 아니라, 설계와 인프라의 연장선이라는 생각이 들었다.
5. 마무리
이번 장에서는 대용량 데이터셋을 더욱 작은 데이터셋으로 파티셔닝하는 방법을 살펴봤다.
저장하고 처리할 데이터가 너무 많아 장비 한 대로 처리할 수 없다면, 파티셔닝이 필요하다. 파티셔닝의 목적은 핫스팟 없이 데이터와 질의 부하를 여러 장비에 고르게 분산하는 것이다. 그렇게 하려면 데이터에 적합한 파티셔닝 방식을 선택해야 하고, 클러스터의 노드가 추가되거나 제거될 때 파티션 재균형화가 수행되어야 한다.
이건 마치 서버에서 L7 로드밸런서를 통해 요청을 분산하는 구조와도 유사하게 생각하니 알기 쉬웠다.