본문 바로가기
🏛️ Architecture

[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 1장 사용자 수의 따른 규모 확장성

by GroovyArea 2023. 2. 14.

작년 10월 원티드에서 진행한 백엔드 온보딩 챌린지에서 멘토님이 속하신 스터디에서 이 책을 다루셨던 것이 기억난다.

실제로 멘토링 후 백엔드 개발자가 읽어야 할 책들을 여러 개 추천해 주셨는데, 그 중 하나가 이 책이다.

 

그 책들을 꾸준히 완독해 나가는 중이고, 확실히 백엔드 개발 공부는 책을 통해서 간접 경험을 쌓거나 직접 적용하기에 용이하다고 생각이 들었다.

 

회사에 이 도서를 요청했고, 오늘 첫 페이지를 펼쳤다.

 

단일 서버

  • 가장 기초적인 서버 구성 단위
  • 데이터 베이스 서버도 보통 1개를 둔다.
    • RDBMS 많이 사용
    • 비정형 데이터이거나, 직렬화 역직렬화 하거나, 많은 양의 데이터를 저장할 경우 비-관계형 데이터베이스가 바람직함.
  • 모든 트래픽을 하나의 서버가 감당한다.

 

수직적 규모 확장 & 수평적 규모 확장

  • 스케일 업
    • 서버에 고사양 자원을 추가하는 행위
    • 유입되는 트래픽의 양이 적을 경우 용이
    • 단순하다는 장점
    • 한 대의 서버에 CPU나 메모리를 무한대로 증설 못한다는 단점
    • 장애 복구 방안이나 다중화 방안을 제시하지 못한다는 단점
  • 스케일 아웃
    • 서버를 여러 대 추가하는 행위
    • 로드 밸런서 
      • 부하 분산 집합에 속한 웹 서버들에게 고르게 부하를 분산하는 역할
      • 하나의 서버가 다운 될 경우 다른 서버로 요청을 나눔. 우아하게 장애 대처 가능.
    • 데이터베이스 다중화
      • 마스터는 쓰기, 슬레이브는 읽기
      • 병렬 처리 되는 질의 수가 늘어나므로 성능이 좋음
      • 자연 재해 등의 재난, 장애 상황 대처 가능
      • 고가용성 => 장애 서버 대신 다른 서버로 대체 가능
        • 최신 데이터가 아닌 슬레이브는 복구 스크립트로 최신화 가능

 

캐시

  • 값 비싼 연산 결과 또는 자주 참조되는 데이터를 메모리 안에 두고, 뒤이은 요청이 빨리 처리될 수 있도록 하는 저장소
  • 데이터베이스의 커넥션에 따라 결정되는 서버의 성능을 개선
  • 캐시할 데이터의 종류, 크기, 액세스 패턴에 맞는 캐시 전략을 선택
  • 데이터 갱신보다 참조가 빈번할 경우 고려 가능
  • 영속성 데이터의 저장은 바람직하지 않음
  • 데이터 만료 정책을 수립해야함
  • 일관성 유지에 만전을 기해야 함.

 

콘텐츠 전송 네트워크 (CDN)

  • 정적 컨텐츠를 전송할 수 있는 지리적으로 분산된 서버의 네트워크
  • 정적 컨텐츠를 캐시 가능함.
  • 사용자에게 가장 가까운 CDN 서버가 정적 컨텐츠를 전달 => 성능 개선에 용이함.
  • 데이터 전송 양에 따라 비용이 청구됨.
  • 적절한 만료 시한의 필요성
  • CDN과 캐시를 적절히 배치하면 더 나은 성능을 보장한다.

 

무상태 웹 계층 (stateless)

  • 수평적으로 확장해볼 방법을 고려해보자.
  • 웹 계층에서 상태 정보를 제거하기 위해 RDBMS 나 NOSQL에 보관하고 필요할 때 가져온다.
  • 클라이언트에서 웹 서버로 http 요청을 할 경우, 상태 정보가 DB에 분리되어 있으므로, 구조가 단순하고 안정적이며, 규모 확장이 쉽다.
  • 여러 데이터 센터를 지원할 경우 장점이 부각된다.

 

데이터 센터

  • 같은 리전에 다른 데이터 센터를 이용할 경우, 장애 상황을 극복할 수 있다.
  • 트래픽 우회, 데이터 동기화, 테스트와 배포등에 기술적 난제를 극복해야 한다.
  • 더 큰 규모로 확장하기 위해 시스템의 컴포넌트를 분리해야 하는데, 이때 메시지 큐를 이용할 수 있다.

 

메시지 큐

  • 메시지의 무손실을 보장하는 비동기 통신을 지원하는 컴포넌트
  • 메시지 버퍼의 역할을 수행하며 비동기적으로 전송한다.
  • 발행자와 구독, 소비자의 구조
  • 서버간 결합이 느슨해져서 규모 확장성 보장에 용이하다.

 

로그 , 메트릭 그리고 자동화

  • 에러 로그를 모니터링하는 것이 중요하다.
  • 메트릭을 잘 수집하면 사업 현황에 관련된 유용한 정보를 얻고 시스템의 현재 상태를 손쉽게 파악 가능하다.

 

데이터베이스의 규모 확장

  • 수직적 확장
    • 고성능의 자원을 증설하는 방법
    • 아마존의 AWS가 그 예시
    • SPOF로 인한 위험성이 크다
    • 비용이 많이 든다는 단점
  • 수평적 확장
    • 샤딩을 통해 가능
    • 해시 함수를 이용하여 샤드를 정한다.
    • 샤딩 전략을 구현할 때 샤딩키를 정하는 것이 관건
    • 데이터의 재 샤딩, 유명 인사의 조회 문제, 조인과 비정규화 같은 이슈를 극복하는 것이 관건이다.
반응형