설계 방법론: 사용자 수에 따른 규모 확장성(1)

최건우·2023년 7월 13일
0

수백만 사용자를 지원하는 시스템을 설계하는 것은 백엔드 개발자에게 굉장히 도전적인 과제이다. 이 글에서는 규모 확장성과 관계된 설계 문제를 푸는 데 유용하게 쓰일, 사용자 수에 따른 시스템 설계 방식을 살펴볼 것이다.

단일 서버

단일 서버 환경에서는 웹, 앱, 데이터베이스, 캐시 등이 전부 서버 한 대에서 실행되는, 시스템의 가장 기초적인 형태이다. 이 시스템 구성 하에서의 사용자 요청 처리 흐름을 살펴보자.

  1. 사용자는 도메인 이름(api.mysite.com)을 이용하여 웹 사이트에 접속한다. 이 접속을 위해서는 도메인 이름을 도메인 이름 서비스(Domain Name Service)에 질의하여 IP주소로 변환하는 과정이 필요하다. DNS는 보통 제3 사업자가 제공하는 유료 서비스를 이용하게 된다.
  2. DNS 조회 결과로 IP 주소가 반환된다. 15.125.23.214 가 그것이다.
  3. 해당 IP 주소로 HTTP 요청이 전달된다.
  4. 요청을 받은 서버는 HTML 페이지나 JSON 형태의 응답을 반환한다.

데이터베이스

사용자가 늘면 서버 하나로는 충분하지 않아 여러 서버를 두어야 한다. 다음과 같이, 웹 계층(웹/모바일 트래픽 처리 서버)과 데이터 계층(데이터베이스 서버)을 분리하면 각각을 독립적으로 확장해나갈 수 있게 된다.

어떤 데이터베이스를 사용할 것인가?

관계형 데이터베이스

관계형 데이터베이스는 관계형 데이터베이스 관리 시스템(RDBMS, Relational Database Management System)이라고도 부른다. 자료를 테이블, 열, 컬럼으로 표현하며 SQL을 이용해 여러 테이블에 있는 데이터를 그 관계에 따라 조인(join)하여 합칠 수 있다. 대표적인 제품으로는 MySQL, Oracle, PostgreSQL 등이 있다.

NoSQL(Not only SQL)

NoSQL은 비 관계형 데이터베이스라고 불린다. NoSQL은 다시 네 부류로 나눌 수 있다.

  1. key-value store
  2. graph store
  3. column store
  4. document store

NoSQL은 일반적으로 조인 연산을 지원하지 않는다. 대부분 관계형 데이터베이스가 최선일 테지만, 구축하려는 시스템에 적합하지 않은 경우 NoSQL도 고려해야 한다. 다음과 같은 경우에는 비 관계형 데이터베이스가 바람직한 선택일 수 있다.

  1. 아주 낮은 응답 지연시간(latency)가 요구됨.
  2. 다루는 데이터가 비정형(unstructured)이라 관계형 데이터가 아님.
  3. 데이터(JSON, YAML, XML 등)를 직렬화(serialize) 혹은 역직렬화(deserialize) 할 수 있기만 하면 됨.
  4. 아주 많은 양의 데이터를 저장할 필요가 있음.




출처: 가상 면접 사례로 배우는 대규모 시스템 설계 기초

profile
부족한 경험을 채우기 위한 나만의 기록 공간

0개의 댓글