수백만 사용자를 지원하는 시스템을 설계하는 것은 백엔드 개발자에게 굉장히 도전적인 과제이다. 이 글에서는 규모 확장성과 관계된 설계 문제를 푸는 데 유용하게 쓰일, 사용자 수에 따른 시스템 설계 방식을 살펴볼 것이다.
단일 서버 환경에서는 웹, 앱, 데이터베이스, 캐시 등이 전부 서버 한 대에서 실행되는, 시스템의 가장 기초적인 형태이다. 이 시스템 구성 하에서의 사용자 요청 처리 흐름을 살펴보자.

도메인 이름 서비스(Domain Name Service)에 질의하여 IP주소로 변환하는 과정이 필요하다. DNS는 보통 제3 사업자가 제공하는 유료 서비스를 이용하게 된다.사용자가 늘면 서버 하나로는 충분하지 않아 여러 서버를 두어야 한다. 다음과 같이, 웹 계층(웹/모바일 트래픽 처리 서버)과 데이터 계층(데이터베이스 서버)을 분리하면 각각을 독립적으로 확장해나갈 수 있게 된다.

관계형 데이터베이스는 관계형 데이터베이스 관리 시스템(RDBMS, Relational Database Management System)이라고도 부른다. 자료를 테이블, 열, 컬럼으로 표현하며 SQL을 이용해 여러 테이블에 있는 데이터를 그 관계에 따라 조인(join)하여 합칠 수 있다. 대표적인 제품으로는 MySQL, Oracle, PostgreSQL 등이 있다.
NoSQL은 비 관계형 데이터베이스라고 불린다. NoSQL은 다시 네 부류로 나눌 수 있다.
NoSQL은 일반적으로 조인 연산을 지원하지 않는다. 대부분 관계형 데이터베이스가 최선일 테지만, 구축하려는 시스템에 적합하지 않은 경우 NoSQL도 고려해야 한다. 다음과 같은 경우에는 비 관계형 데이터베이스가 바람직한 선택일 수 있다.