[대규모 시스템 설계] 사용자 수에 따른 규모 확장성 - 단일서버, 데이터베이스

Gmini.Y·2024년 3월 21일
0

단일 서버

단 한 대의 서버에서 실행되는 간단한 시스템을 설계해보자.

사용자 요청의 처리 흐름은 아래와 같다.

  1. 사용자는 도메인 이름으로 웹사이트 접속을 시도하면 DNS (Domain Name Service)를 통해 서버의 IP 주소를 받는다
  2. 받아온 IP 주소로 HTTP 요청이 전달된다.
  3. 요청을 받은 웹 서버는 HTML, JSON 등의 데이터를 반환한다.

데이터베이스

사용자가 증가하면 데이터베이스 서버를 분리하여 두어서 각각 독립적으로 확장해 나갈 수 있게 한다.

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

관계형 데이터베이스

  • RDBMS 라고도 부르며 대표적으로 MySQL, 오라클, PostgreSQL 등이 있다.
  • 자료를 테이블, 열, 칼럼으로 표현하며 테이블의 데이터를 관계에 따라 조인 연산을 통해 합칠 수 있다.

비 관계형 데이터베이스

  • NoSQL이라고도 부르며 대표적으로 CouchDB, Neo4j, Cassandra, DynamoDB 등이 있다.
  • NoSQL은 key-value store, graph store, column store, document store 가 있다.
  • 일반적으로 조인 연산을 지원하지 않는다.

일반적으로는 관계형 데이터베이스를 사용하지만 아래와 같은 경우에는 NoSQL 데이터베이스를 고려해보아야 한다.

  • 매우 낮은 레이턴시 요구
    • DB 수평적 확장에 용이
    • HashMap(key-value) 구조이기 때문에 검색이 빠름
  • 비정형 데이터
  • 데이터를 직렬화, 역직렬화만 하면 됨
  • 매우 큰 데이터를 저장해야 함.

내용 추가

RDB는 데이블마다 스키마가 정의되어 있어 데이터 타입 및 크기 제약을 통해 데이터의 정합성을 보장한다. 또한 중복된 데이터가 없기 때문에 데이터 무결성을 보장하고 변경이 용이하다. 하지만 이러한 관계들로 인해 수평적 확장이 어렵다는 큰 단점이 있다. 이에 반해 NoSQL은 스키마 및 관계(Relation)이 없기 때문에 비정형 데이터를 다루는데 유용하고 일반적으로 검색 속도가 RDB보다 빠르다. 또한 샤딩과 같은 기술을 통해 수평적 확장이 용이하다는 장점이 있다. 하지만 NoSQL은 중복된 데이터들로 인해 Write 작업시 여러 데이터를 수정해야한다는 단점이 있다.

따라서 RDB는 데이터 구조가 명확하고 스키마가 중요한 경우 사용하는 것이 좋고 write 작업이 많을때 사용하는 것이 좋다.
이에 반해 NoSQL은 데이터가 비정형이며 변경/확장 될 가능성이 높은 경우에 사용하면 좋다. 또한 중복된 데이터들의 업데이트 비용이 비싸기 때문에 주로 Read 작업이 많은 경우에 사용한 것이 좋다.


본 포스트는 알렉스 쉬 저자의 가상 면접 사례로 배우는 대규모 시스템 설계 기초를 기반으로 스터디하며 정리한 내용들입니다.

0개의 댓글