1. 데이터베이스의 규모 확장

2. 백만 사용자, 그리고 그 이상

1. 데이터베이스의 규모 확장

저장할 데이터가 많아지면 데이터베이스에 대한 부하도 증가함.

그때가 오면 데이터베이스를 증성할 방법을 찾아야 함.

데이터베이스의 규모를 확장하는 데는 두 가지 접근법이 있음.

하나는 수직적 규모 확장법이고 다른 하나는 수평적 규모 확장법임.

Untitled

1-1) 수직적 확장

스케일 업이라고도 부르는 수직적 규모 확장법은 기존 서버에 더 많은 또는

고성능의 자원(CPU, RAM, 디스크 등)을 증설하는 방법임.

가령 아마존 AWS의 RDS는 24TB RAM을 갖춘 서버도 상품으로 제공하고 있음.

이 정도 수준의 고성능 데이터베이스 서버는 많은 양의 데이터를 보관하고 처리할 수 있음.

1-1)-1. 스택오버플로(stackoverflow.com)

2013년 한 해 동안 방문한 천만 명의 사용자 전부를 단 한 대의 마스터 데이터 베이스로 처리함.

이러한 수직적 접근법에는 몇 가지 심각한 약점이 있음.

1-1)-2. 수직적 확장의 단점

1-2) 수평적 확장

데이터베이스의 수평적 확장은 샤딩(sharding)이라고도 부르는데,

더 많은 서버를 추가함으로써 성능을 향상시킬 수 있도록 함.

샤딩은 대규모 데이터베이스를 샤드(shard)라고 부르는 작은 단위로

분할하는 기술을 일컫는다. 모든 샤드는 같은 스키마를 쓰지만

샤드에 보관되는 데이터 사이에는 중복이 없음.

1-2)-1. 샤드로 분할된 데이터베이스

사용자 데이터를 어느 샤드에 넣을지는 사용자 ID에 따라 정함.

user_id%4를 해시 함수로 사용하여 데이터가 보관되는 샤드를 정함.

결과가 0이면 0번 샤드에 1이면 1번 샤드에 보관하는 방식임.

Untitled

1-2)-2. 각 샤드 노드에 사용자 데이터의 보관법

Untitled

1-2)-3. 샤딩 전략 구현시 고려사항

1-2)-4. 샤딩 도입시 문제 사항

1-2)-5. 데이터베이스 샤딩을 적용한 아키텍처

데이터 베이스에 대한 부하를 줄이기 위해 굳이 관계형 데이터베이스가

요구되지 않는 기능들은 NoSQL로 이전했음.

Untitled

2. 백만 사용자, 그리고 그 이상

시스템의 규모를 확장하는 것은 지속적이고 반복적인 과정이다.

수백만 사용자 이상을 지원하려면 새로운 전략을 도입해야하고 지속적으로 시스템을 가다듬어야 할 거임.

시스템을 최적화하고 더 작은 단위의 서비스로 분할해야 할 수도 있음.