본문 바로가기
시스템 설계/가상 면접 사례로 배우는 대규모 시스템 설계 기초

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

by setung 2025. 1. 12.

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

  • 수직적 규모 확장
    • 서버에 고사양 자원(CPU, RAM)을 추가하는 행위이다.
    • 확장에 한계가 있다.
    • 장애에 대한 자동복구 방안이나 다중화 방안을 제시하지 않는다.
  • 수평적 규모 확장
    • 더 많은 서버를 추가하여 성능을 개선하는 행위이다.

로드밸런서

  • 클라이언트로부터 들어오는 요청을 여러 웹 서버로 분산하여 부하를 줄이고 가용성을 높이는 역할을 수행한다.
  • 로드밸런서의 공개 IP 주소를 통해 클라이언트와 통신을 하고, 서버 간 통신은 사설 IP주소를 사용한다.

데이터베이스 다중화

  • 서버 사이에 주(master)-부(slave) 관계를 설정하고 데이터 원본은 주 서버에, 사본은 부 서버에 저장하는 방식이다.
  • 쓰기 연산은 마스터에만하고, 부 데이터베이스는 주 데이터베이스로부터 사본을 전달받아 읽기 연산만을 수행한다.

데이터베이스 수평적 확장(샤딩)

  • 샤딩은 대규모 데이터베이스를 샤드라고 부르는 작은 단위로 분할하는 기술을 일컫는다.
  • 모든 샤드는 같은 스키마를 쓰지만 샤드에 보관되는 데이터 사이에는 중복이 없다.
  • 샤딩 키(파티션 키)를 통해 데이터를 분산시켜 저장한다.
  • 문제
    • 재샤딩
    • 유명인사 문제
    • 조인과 비정규화

캐시

  • 빈번하게 접근하는 데이터를 빠르게 제공하기 위한 임시 저장소.
  • 캐시 우선 읽기 전략(read-through caching strategy)
    • 요청에 대한 응답값을 데이터베이스가 아닌 캐시에서 우선 찾는다. 해당 데이터가 있으면 반환하고 없으면 데이터베이스에서 찾아 캐시에 저장 후 반환한다.
  • 고려 할 점
    • 데이터 갱신이 자주 일어나지 않는 상황이 유리하다.
    • 만료 시간
    • 일관성
    • 장애 처리
    • 메모리 크기
    • 데이터 방출 정책

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

  • 정적 콘텐츠를 전송하는데 쓰이는, 지리적으로 분산된 서버의 네트워크이다.
  • 고려할 사항
    • 비용
    • 만료 시한
    • 장애 처리
    • 콘텐츠 무효화

메시지 큐

  • 메시지의 무손실을 보장하는, 비동기 통신을 지원하는 컴포넌트.
  • 생산자/발행자(producer/publisher)는 메시지를 만들어 큐에 발행하고, 구독자(consumer/subscriber)는 메시지를 받아 처리한다.
  • 메시지 큐를 이용하면 서비스 또는 서버간 결합이 느슨해져, 규모 확장성이 보장되어야 하는 안정적 애플리케이션을 구성하기 좋다.

로그, 메트릭, 자동화

  • 로그: 시스템에서 발생하는 이벤트들 기록.
  • 메트릭: 시스템의 주요 성능 지표를 수집 및 분석.
    • 호스트 단위 메트릭: CPU, 메모리, 디스크I/O 등
    • 종합 메트릭: DB 계층 성능, 캐시 계층 성능 등
    • 핵심 비즈니스 매트릭: 일병 능동 사용자, 수익, 재방문 등
  • 자동화: CI/CD

정리

  • 웹 계층은 무상태 계층으로
  • 모든 계층에 다중화 도입
  • 가능한 한 많은 데이터를 캐시할 것
  • 여러 데이터 센터를 지원할 것
  • 정적 콘텐츠는 CDN을 통해 서비스 할 것
  • 데이터 계층을 샤딩을 통해 그 규모를 확장할 것
  • 각 계층은 독립적 서비스로 분할할 것
  • 시스템을 지속적으로 모니터링하고, 자동화 도구들을 활용할 것

댓글