IT 도서 리뷰/개발자가 되기 위해 꼭 알아야 하는 IT 용어

[PART3] 데이터베이스/자료구조 - TERMS 02

goldenkiwi-coder 2025. 2. 12. 00:26

[ TERMS 02 ]  샤딩

샤딩의 개념을 전체적으로 설명하는 이미지(출처 : https://architecturenotes.co/p/database-sharding-explained)

1. 샤딩(Sharding)의 정의

 샤딩은 데이터베이스 테이블을 조각(조각난 데이터를 샤드라 부름) 내어 각각 새로운 노드에 저장하는 데이터 관리 방법이다. 데이터의 양이 많아 하나의 데이터베이스로는 힘들때 여러 노드에 데이터를 나누어 처리 속도를 향상할 수 있다.

 

2. 샤딩은 어떻게 접하게 될까?

 앱의 유저가 급격히 늘어난다면, 앱에서 서버 용량 문제가 대두될 것이며 이는 결국 사용자들의 경험이 떨어질 것이다. 이러한 상황에서 샤딩은 훌룡한 대안이다. 샤딩은 데이터를 여러 노드에 분산해 두기 때문에 한 장소로 트래픽이 몰리는 것을 방지할 뿐만 아니라 더 많은 양의 정보를 수요할 수 있다.

샤딩과 샤드를 설명하는 이미지 (출처 : https://medium.com/@magda7817/sharded-does-not-imply-distributed-572fdafc4040)

 

3. 샤딩 알아보기

 샤딩은 수평적 분할(Horizontal partitioning)이라고도 부른다. 데이터를 수평적으로 분할한다는 것은 행을 기준으로 나눈다는 것이다. 따라서 샤드마다 스키마는 동일하지만 담고 있는 정보는 상이하다.

샤딩의 수평적 분할을 설명하는 이미지(출처 : https://nadermedhatthoughts.medium.com/understand-database-sharding-the-good-and-ugly-868aa1cbc94c)

 원본 데이터를 샤딩하면 데이터 테이블의 행을 기준으로 수평으로 자르기 때문에 스키마는 동일한 별개의 샤드에 저장되어 관리된다.

 샤딩은 데이터를 나누는 기준에 따라 다양한 방식이 있으며 데이터베이스 제공 업체에 따라 달라지기도 한다. 흔히 사용되는 샤딩 4가지를 정리하겠다.

 

>  샤딩의 종류

원본데이터
학번 전공 이름 학점
10001 심리학과 신00 4.5
10002 경영학과 박00 4.3
10003 중어중문학과 이00 4.2
10004 컴퓨터공학과 한00 3.8
10005 수학과 강00 3.9
10006 유아교육과 김00 3.5

 

  • 범위에 따른 샤딩

  데이터를 분할할 때 일정한 범위 기준을 두고 나누는 방식이다. 위의 학생 데이터에서 학번 범위로 나누어 보겠다.

샤드 1 (한번 끝자리 1~2번)
학번 전공 이름 학점
10001 심리학과 신00 4.5
10002 경영학과 박00 4.3
샤드 2 (한번 끝자리 3~4번)
학번 전공 이름 학점
10003 중어중문학과 이00 4.2
10004 컴퓨터공학과 한00 3.8
샤드 3 (한번 끝자리 5~6번)
학번 전공 이름 학점
10005 수학과 강00 3.9
10006 유아교육과 김00 3.5

 

 범위에 따른 샤딩은 이해와 활용이 비교적 쉽다. 하지만 샤드 키(Shard key)를 어느 열로 설정할 것인지, 범위 기준을 어떻게 잡을 것인지에 따라 데이터 관리의 효율성이 달라진다. 무엇 위주로 관리할 것인지에 따라 샤드 키가 바뀔 수 있다. 학번 말고 학점이 샤드키가 될 수도 있는 것이다.

 범위 기준을 위의 예에서는 2단위로 끊어 모든 샤드에 동일한 양의 데이터가 들어갔지만 1~5, 6~10 단위로 끊게 된다면 하나의 샤드에는 많은 데이터가 다른 샤드에는 적은 데이터가 들어가 크기 차이가 커진다. 이처럼 범위 설정에 따라 불필요한 샤드가 생기거나 한 샤드에 데이터가 너무 몰려 쿼리 처리에 시간이 많이 소요될 수도 있다.

 

  • 해시 샤딩

 해시 샤딩은 샤드 키에 해당하는 정보의 해시 값을 기준으로 데이터를 나누는 방법이다. 데이터가 들어오면 먼저 해시 함수를 통해 데이터를 변환하고 해시 값이 일치하는 데이터끼리 하나의 샤드로 분류해 관리한다.  위의 학생 데이터에서 전공에 해시 함수를 사용해 예시를 보여주자면

전공 해시 값
심리학과 1
경영학과 2
중어중문학과 3
컴퓨터공학과 2
수학과 1
유아교육과 3
샤드 1 (해시 값 1)
학번 전공 이름 학점
10001 심리학과 신00 4.5
10005 수학과 강00 3.9
샤드 2 (해시 값 2)
학번 전공 이름 학점
10002 경영학과 박00 4.3
10004 컴퓨터공학과 한00 3.8
샤드 3 (해시 값 3)
학번 전공 이름 학점
10003 중어중문학과 이00 4.2
10006 유아교육과 김00 3.5

 해시 샤딩은 데이터가 균등하게 나뉜다는 장점이 있다. 하지만 데이터 양이 증감해서 샤드의 수를 늘리거나 줄여야할 때는 문제가 발생한다.

샤드의 수가 변경되면 해시 함수도 변한다. 그러면서 원래는 샤드 1에 있던 데이터가 해시 함수값에 따라 샤드1이 아니라 다른 샤드로 이동할 수도 있다. 이때 많은 양의 데이터가 움직이고 데이터가 재배정되는 동안에는 서비스를 제공하지 못해 운영에 차질이 생겨난다.

 

  • 디렉터리 샤딩

  디렉터리 샤딩이란 참조표(Lookup table)를 이용해 데이터를 분류하는 방식이다. 참조표란 정보를 나누는 기준 샤드 키를 정하고 데이터가 어느 샤드로 배정될지를 지정해둔 표이다.해시 방식이 샤드 키에 해당하는 속성들을 해시값으로 변환한 후에 그 값을 기준으로 분류했다면 디렉터리 샤딩은 해시값으로 변환하지 않는다는 차이점이 있다.

참조표(Lookup Ttable)
전공 샤드
심리학과 1
경영학과 2
중어중문학과 3
컴퓨터공학과 4
수학과 5
유아교육과 6
샤드 1
학번 전공 이름 학점
10001 심리학과 신00 4.5

.

.

샤드 6
학번 전공 이름 학점
10006 유아교육과 김00 3.5

  디렉터리 샤딩은 샤드 키의 정보가 추가 또는 삭제될 때 비교적 유연하게 대처할 수 있다는 장점이 있다. 다른 샤딩 방식과 다르게 기존에 있던 데이터들을 수정하거나 옮길 필요 없이 새로운 샤드를 추가할 수 있다. 그렇지만 데이터를 불러오려면 참조표를 한 번 거쳐야 하므로 처리에 지연 시간이 생긴다는 단점이 있다. 그리고 참조표에 문제가 생기면 전체 열람에도 문제가 생긴다는 단점도 있다.

 

  • 수직적 샤딩

 수직적 샤딩은 속성별로 데이터 테이블을 나누는 방식이다. 샤딩은 일반적으로 수평적 형태로 이루어지지만, 상황에 따라 수직적으로도 이루어진다.

샤드1
학번 전공
10001 심리학과
10002 경영학과
10003 중어중문학과
10004 컴퓨터공학과
10005 수학과
10006 유아교육과
샤드2
이름 학점
신00 4.5
박00 4.3
이00 4.2
한00 3.8
강00 3.9
김00 3.5

 수직적 샤딩을 사용하면 비교적 중요한 정보를 다른 속성들과 분리해 관리할 수 있다는 장점이 있다. 하지만 불러내야 하는 속성이 서로 다른 노드에 저장된 경우에는 각각의 샤드에서 정보를 찾아와야 하는 단점이 있다.

 

>  장점과 단점

  • 장점

 샤딩을 하면 데이터 저장 공간을 확장할 수 있다. 샤드의 수가 증가하면서 전체적인 저장 공간이 늘어나는 효과가 나타난다. 뿐만 아니라 데이터들이 일정한 기준으로 분산되어 있어 데이터 양에 비해 쿼리 속도가 빠르다는 장점도 있다. 분산되지 않은 데이터에서 원하는 정보를 찾으려면 모든 정보를 거쳐 가며 찾아야 하므로 시간상 비효율적이다. 하지만 샤딩으로 정보를 일정한 기준으로 나누어 저장해 두면 원하는 정보가 담겨 있는 샤드에서만 정보를 찾으면 되기 때문에 훨씬 효율적이다. 학생 데이터를 예로 들면 전체 학생에서 찾는것이 아니라 전공을 기준으로 찾아 더욱 빠르게 찾을 수 있다.

 

  • 단점

각 샤드의 데이터의 양이 불균형하면 문제가 발생한다. 간혹 한 샤드에 데이터가 몰리게 된다면 샤드 간 불균형이 생기고 데이터가 많이 축적된 샤드는 열람에 시간이 더 소요되며 샤드의 이점이 없어진다.

 데이터 불균형 문제를 해결하기 위해 새롭게 샤딩하는 것도 쉽지 않다. 앞에서 언급했듯, 데이터 전체를 새로운 샤드로 다시 배정하면 작업이 완료될 때까지 서비스를 제공할 수 없다. 그리고 샤드의 수가 증가하면 그에 따른 추가 비용도 발생된다. 이처럼 한 번 샤딩 작업을 한 후에는 이전의 상태로 돌릴수 없으므로 사전에 충분히 고려한 뒤 시행해야 한다.

 

4. 샤딩을 알아야 하는 이유

 샤딩은 많은 양의 데이터를 효율적으로 사용할 수 있게 관리하는 방법이다. 하지만 샤딩이 이루어진 후에는 데이터를 원래 상태로 되돌리기 어려울 뿐만 아니라 새롭게 샤딩하는 것 역시 시간과 비용이 많이 든다. 그렇기 때문에 샤딩에 대해 정확히 알고 샤딩을 대체할 수 있는 리플리케이션(replication), 캐싱(caching)과 같은 방법도 고려하여 적용해야 한다.

 

5. 샤딩 더 알아보기

>  블록체인에서의 샤딩

 데이터를 분산시켜 저장하는 샤딩은 블록체인 분야에서도 관심을 받고 있다. 블록체인 기반 서비스들이 나날이 발달하고 있지만 확장성의 한계라는 과제가 아직 남아 있다. 블록체인에도 샤딩을 적용해 노드를 나누어 정보를 처리하면 빠른 속도를 유지할 수 있다. 각기 다른 노드는 서로 다른 정보를 담고 있지만 노드간 정보 공유가 가능하다. 그렇기에 블록체인의 핵심인 탈중앙화를 유지하면서 확장성 문제를 해결할 방법으로 샤딩이 주목받고 있다.

 

>  함께 알아두면 좋은 용어

  • 데이터베이스
  • SQL / NoSQL
  • 스케일 아웃
  • 스케일 업
  • 리플리케이션