
저장할 데이터가 많아지면 데이터베이스에 대한 부하도 증가하게 됩니다. 그때가 오면 데이터베이스를 증설할 방법을 찾아야 합니다. 데이터베이스의 규모를 확장하는 방법엔 두 가지가 있습니다. 하나는 수직적 규모 확장이고 다른 하나는 수평적 규모 확장법입니다.
수직적 확장은 Scale Up이라고도 부르는데, 기존 서버에 더 많거나 성능이 좋은 자원(CPU, RAM 등)을 증설하는 방법입니다. 이러한 수직적 확장에는 다음과 같은 한계가 존재합니다.
데이터베이스의 수평적 확장은 샤딩이라고도 부르는데, 더 많은 서버를 추가함으로써 성능을 향상시키는 방법입니다. 샤딩은 대규모 데이터베이스를 샤드라고 부르는 작은 단위로 분할하는 방법입니다. 모든 샤드는 같은 스키마를 쓰지만, 샤드에 보관되는 데이터 사이에는 중복이 발생하지 않습니다. 이때, 데이터를 어떤 샤드에 보관할지 결정하는 예시는 다음과 같습니다.

위 그림은 샤딩 키를 user_id로 설정한 경우입니다. 샤딩 전략을 구현할 때 가장 중요한 것은 샤딩 키를 어떻게 정하느냐 입니다. 샤딩 키는 파티션 키라고도 부루는데, 데이터가 어떻게 분산될지 정하는 하나 이상의 컬럼으로 구성됩니다. 샤딩 키를 통해 올바른 데이터베이스에 질의를 보내어 데이터 조회나 변경을 처리하기 때문에 데이터를 고르게 분할 할 수 있도록 설정해야 합니다.
샤딩은 데이터베이스 규모 확장을 실현하는 기술이지만, 완벽하진 않습니다. 그렇기에 샤딩을 도입하면 시스템 복잡성이 증가하고 다음과 같이 풀어야 할 새로운 문제도 발생합니다.

시스템 규모를 확장하는 것은 지속적이고 반복적인 과정입니다. 이번 장에서 다룬 내용을 반복하다 보면 원하는 규모의 시스템을 설계할 수 있습니다. 그러나 수백만 사용자 이상을 지원하려면 새로운 전략을 도입해야 하고 지속적인 시스템 개선이 필요합니다. 예를 들어, 시스템 최적화를 통해 더 작은 단위의 서비스로 분할하는 것이 있습니다.
이번 장에서 다룬 내용을 간단하게 요약하면 다음과 같습니다.