HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🛁
공부기록
/
📚
책 정리
/가상 면접 사례로 배우는 대규모 시스템 설계 기초/
사용자 수에 따른 규모 확장성

사용자 수에 따른 규모 확장성

태그
1장
사용자 수에 따른 규모 확장성단일 서버사용자의 요청이 처리되는 과정웹 애플리케이션모바일 앱데이터베이스[어떤 데이터베이스를 사용할 것인가?]수직적 규모 확장 vs 수평적 규모 화장로드밸런서데이터베이스 다중화
 
🔥
수백만 사용자를 지원하는 시스템을 설계하는 것은 도전적인 과제이고 지속적인 계량과 끊없는 개선이 요구되는 여정이다.

사용자 수에 따른 규모 확장성

단일 서버

  • 웹, 앱 데이터베이스, 캐시 등이 전부 서버 한대에서 실행되는 구조
 

사용자의 요청이 처리되는 과정

  1. 사용자는 도메인 이름(api.mysite.com)을 이용하여 웹사이트에 접속한다.
  1. 이 접속을 위해서는 도메인 이름을 도메인 이름 서비스에 질의하여 IP주소로 변환하는 과정이 필요함 DNS는 보통 제3 사업자가 제공하는 유료 서비스를 이용하게 되므로 우리 시스템의 일부는 아님
  1. DNS 조회 결과로 IP 주소가 반환되고 해당 주소로 HTTP 요청이 전달되고 3-way핸드셰이킹이 발생하하고
  1. 요청을 받은 웹 서버는 HTML 페이지나 JSON 형태의 응답을 반환한다.
 

웹 애플리케이션

  • 비즈니스 로직, 데이터 저장 등을 처리하기 위해서는 서버 구현용 언어를 사용하고 프레젠테이션용으로는 클라이언트 구현용 언어 HTML, 자바스크립트를 사용함

모바일 앱

  • 모바일 앱과 웹 서버간 통신을 위해서는 HTTP 프로토콜을 이용한다. HTTP 프로토콜을 통해서 반환될 응답 데이터의 포맷으로는 보통 JSON이 그 간결함 덕에 널리 쓰이고 있음.

데이터베이스

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

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

  • 전통적인 관계형 데이터베이스와 비-관계형 데이터베이스 사이에서 고를 수 있다.
  • 관계형 데이터베이스는 RDBMS라고도 부르며 가장 유명한 것으로 MySQL, 오라클, PostgreSQL등이 있다. 관계형 데이터베이스는 자료를 테이블과 열, 컬럼으로 표현한다. SQL을 사용하면 여러 테이블에 있는 데이터를 관계에 따라 조인하여 합칠 수 있다.
  • 비 관계형 데이터베이스는 NoSQL로 부른다. 대표적으로 DynamoDB, Cassandra, Mongo등이 있다. NoSQL은 네 분류로 나눌 수 있다. RDBMS와 차이로 조인을 지원하지 않는다.
    • 키-값 저장소
    • 그래프 저장소
    • 컬럼 저장소
    • 문서 저장소
  • 대부분의 개발자에게는 관계형 데이터베이스가 최선일 것이지만, 40년 이상 시장에서 살아남아 잘 사용되어 온 시스템이기 때문이다. 하지만 우리가 구축하려는 시스템에 적합하지 않은 경우에는 관계형 데이터베이스 이외에 저장소도 살펴보아야 한다. 아래와 같은 경우에는 비-관계형 데이터베이스가 바람직한 선택일 수 있다.
    • 아주 낮은 응답 지연시간(latency)이 요구됨
    • 다루는 데이터가 비정형이라 관계형 데이터가 아닌 경우
    • 데이터를 직렬화 하거나 역직렬화 할 수 있기만 하면 됨
    • 아주 많은 양의 데이터를 저장할 필요가 있음

수직적 규모 확장 vs 수평적 규모 화장

  • 스케일 업 이라고도 하는 수직적 규모 확장 프로세스는 서버에 고사양 자원을 추가하는 행위를 뜻한다.
  • 스케일 아웃은 수평적 규모 확장 프로세스는 더 많은 서버를 추가하여 성능을 개선하는 행위를 뜻한다.
  • 서버로 유입되는 트래픽의 양이 적을 때는 수직적 확장이 좋은 선택이며, 이 방법의 가장 큰 장점은 단순함이다. 하지만 심각한 단점이 존재한다.
    • 수직적 규모 확장에는 결국 한계가 있다. 한 대의 서버에 CPU나 메모리를 무한대로 증설하는 방법은 없다.
    • 수직적 규모 확장법은 장애에 대한 자동복구 방안이나 다중화 방안을 제시하지 않는다. 서버에 장애가 발생하면 웹사이트/앱은 완전히 중단되고 만다.
  • 이러한 단점 때문에 대규모 애플리케이션을 지원하는 데는 수평적 규모 확장법이 보다 적절하다.
    • 너무 많은 사용자가 접속하여 웹 서버가 한계 상황에 도달하게 되면 응답 속도가 느려지거나 서버 접속이 불가능해 질 수도 있다. 이 문제를 해결하기 위해 분산기 또는 로드밸런서를 도입하는 것이 최선이다.
 

로드밸런서

  • 로드밸런서는 부하 분산 집합에 속한 웹 서버들에게 트래픽 부하를 고르게 분산하는 역할을 한다.
  • 사용자는 로드밸런서의 공개 IP주소로 접속한다. 따라서 웹 서버는 클라이언트의 접속을 직접 처리하지 않는다. 더 나은 보안을 위해 서버 간 통신에는 사설 IP가 이용된다.
    • 사설 IP 주소는 같은 네트워크에 속한 서버 사이의 통신에서만 쓰일 수 있는 IP 주소로, 인터넷을 통해서는 바로 접속할 수 없다. 로드밸런서는 웹 서버와 통신하기 위해 이 사설 주소를 이용하게 된다.
 

데이터베이스 다중화

  • 많은 데이터베이스 관리 시스템이 다중화를 지원한다고 위키피디아에 나와있다.