수백만 사용자를 지원하는 시스템을 설계하는 것은 백엔드 개발자에게 굉장히 도전적인 과제이다. 이 글에서는 규모 확장성과 관계된 설계 문제를 푸는 데 유용하게 쓰일, 사용자 수에 따른 시스템 설계 방식을 살펴볼 것이다.
단일 서버 환경에서는 웹, 앱, 데이터베이스, 캐시 등이 전부 서버 한 대에서 실행되는, 시스템의 가장 기초적인 형태이다. 이 시스템 구성 하에서의 사용자 요청 처리 흐름을 살펴보자.
도메인 이름 서비스(Domain Name Service)
에 질의하여 IP주소로 변환하는 과정이 필요하다. DNS는 보통 제3 사업자가 제공하는 유료 서비스를 이용하게 된다.사용자가 늘면 서버 하나로는 충분하지 않아 여러 서버를 두어야 한다. 다음과 같이, 웹 계층(웹/모바일 트래픽 처리 서버)과 데이터 계층(데이터베이스 서버)을 분리하면 각각을 독립적으로 확장해나갈 수 있게 된다.
관계형 데이터베이스는 관계형 데이터베이스 관리 시스템(RDBMS, Relational Database Management System)이라고도 부른다. 자료를 테이블, 열, 컬럼으로 표현하며 SQL을 이용해 여러 테이블에 있는 데이터를 그 관계에 따라 조인(join)하여 합칠 수 있다. 대표적인 제품으로는 MySQL, Oracle, PostgreSQL 등이 있다.
NoSQL은 비 관계형 데이터베이스라고 불린다. NoSQL은 다시 네 부류로 나눌 수 있다.
NoSQL은 일반적으로 조인 연산을 지원하지 않는다. 대부분 관계형 데이터베이스가 최선일 테지만, 구축하려는 시스템에 적합하지 않은 경우 NoSQL도 고려해야 한다. 다음과 같은 경우에는 비 관계형 데이터베이스가 바람직한 선택일 수 있다.