1. Scalability based on user counts(2/2)
사용자 수에 따른 규모 확장성
Last updated
사용자 수에 따른 규모 확장성
Last updated
웹 애플리케이션은 일반적으로 상태 정보가 있는 아키텍처와 무상태 아키텍처로 나눌 수 있습니다.
정의: 서버가 각 클라이언트의 상태 정보를 유지하는 아키텍처.
특징: 세션 데이터가 서버에 저장되며, 클라이언트가 동일한 서버에 요청을 보내야만 일관된 세션 상태를 유지할 수 있습니다.
장점: 특정 클라이언트의 상태를 서버에서 쉽게 관리할 수 있습니다.
단점: 서버 간 로드 밸런싱이 어려워지고, 서버 장애 시 세션 정보가 손실될 수 있습니다.
정의: 각 요청이 독립적이며, 서버가 클라이언트의 상태 정보를 유지하지 않는 아키텍처.
특징: 각 요청은 독립적이며, 클라이언트의 상태는 클라이언트 측에 저장되거나 외부 서비스(예: 데이터베이스, 캐시)에 저장됩니다.
장점: 서버 간 로드 밸런싱이 용이하고, 서버 장애 시에도 세션 정보 손실이 없습니다.
단점: 모든 요청에 필요한 상태 정보를 포함해야 하므로 네트워크 오버헤드가 발생할 수 있습니다.
데이터 센터는 서버, 네트워크 장비, 스토리지 시스템 등이 위치한 시설로, 대규모 시스템의 핵심 인프라입니다.
기능: 대규모 컴퓨팅 및 스토리지 리소스를 제공하며, 시스템의 물리적 인프라를 구성합니다.
구성 요소:
서버, 스토리지 디바이스, 네트워크 장비, 전력 공급 시스템, 냉각 시스템 등이 포함됩니다.
고려사항:
위치: 지진, 홍수 등 자연 재해 위험이 적은 지역에 위치해야 합니다.
보안: 물리적 및 논리적 보안이 중요합니다. 데이터 센터 접근 제어 및 네트워크 보안이 필요합니다.
확장성: 요구사항 변화에 따라 용이하게 확장할 수 있어야 합니다.
비용: 초기 설치 비용과 운영 비용을 고려해야 합니다.
메세지 큐는 비동기식 통신을 지원하는 시스템으로, 생산자(Producer)와 소비자(Consumer) 간의 메시지 전달을 관리합니다.
기능: 비동기 메시징을 통해 시스템 간 데이터를 교환하며, 시스템의 결합도를 낮추고 확장성을 향상시킵니다.
예: RabbitMQ, Apache Kafka, Amazon SQS
장점:
비동기 처리: 메시지를 큐에 넣고 즉시 반환하여 응답 속도를 개선합니다.
내결함성: 메시지 손실 없이 안정적인 데이터 전송을 보장합니다.
확장성: 다수의 프로듀서와 컨슈머를 쉽게 추가하여 처리 성능을 향상시킬 수 있습니다.
단점:
복잡성: 메시지 큐를 설정하고 관리하는 것이 복잡할 수 있습니다.
지연: 메시지가 큐에 머무르는 시간 동안 지연이 발생할 수 있습니다.
대규모 시스템에서는 로그와 메트릭을 통해 시스템 상태를 모니터링하고, 자동화를 통해 운영 효율성을 높이는 것이 중요합니다.
기능: 시스템 활동을 기록하여 문제 해결 및 성능 모니터링에 도움을 줍니다.
구성 요소: 애플리케이션 로그, 시스템 로그, 액세스 로그 등
관리 도구: ELK Stack(Elasticsearch, Logstash, Kibana), Splunk
기능: 시스템 성능 지표를 수집하여 모니터링하고, 이상 상태를 감지합니다.
예: CPU 사용률, 메모리 사용량, 네트워크 트래픽 등
관리 도구: Prometheus, Grafana, Datadog
기능: 반복적이고 시간이 많이 소요되는 작업을 자동화하여 효율성을 향상시킵니다.
예: CI/CD 파이프라인, 인프라 자동화(Terraform, Ansible)
장점: 일관성 있는 배포, 신속한 오류 수정, 효율적인 자원 관리
무상태 아키텍처: 서버는 무상태로 설계하고, 상태 정보는 메시지 큐를 통해 전달됩니다.
로그 관리: 모든 서버와 애플리케이션의 로그를 중앙 집중식으로 수집하고, 실시간으로 분석합니다.
메트릭 수집: 시스템 성능 지표를 실시간으로 수집하여 모니터링하고, 이상 상태를 자동으로 감지합니다.
자동화: CI/CD 파이프라인을 구축하여 코드 배포 및 테스트 과정을 자동화합니다.
데이터베이스는 시스템의 중요한 구성 요소로, 규모 확장이 필요합니다. 데이터베이스의 규모 확장 방법에는 수직적 확장과 수평적 확장이 있습니다.
정의: 기존 서버의 하드웨어 성능(CPU, RAM, Storage 등)을 업그레이드하여 처리 능력을 향상시키는 방식입니다.
장점: 구현이 간단하며, 기존 애플리케이션의 수정이 거의 필요 없습니다.
단점: 하드웨어 업그레이드에 한계가 있으며, 비용이 기하급수적으로 증가할 수 있습니다.
예를 들어, 전자상거래 사이트의 데이터베이스 서버에서 CPU와 메모리를 업그레이드하여 더 많은 트랜잭션을 처리할 수 있도록 합니다.
정의: 여러 대의 서버를 추가하여 부하를 분산시키는 방식입니다.
장점: 무한한 확장 가능성을 제공하며, 고가용성과 장애 복구에 유리합니다.
단점: 시스템 복잡성이 증가하며, 데이터 일관성 유지가 어려울 수 있습니다.
예를 들어, 소셜 네트워크 서비스에서 사용자의 데이터를 여러 데이터베이스 서버에 분산 저장하여 각 서버가 병렬로 데이터를 처리할 수 있도록 합니다.
목표: 시스템이 백만 명 이상의 사용자를 안정적으로 처리할 수 있도록 확장성을 고려한 설계를 합니다.
전략:
무상태 아키텍처: 서버 간 로드 밸런싱을 용이하게 하기 위해 무상태 아키텍처를 채택합니다.
메시지 큐 도입: 비동기 메시징을 통해 시스템 간 결합도를 낮추고, 확장성을 향상시킵니다.
모니터링 및 로깅: 실시간 모니터링과 로그 분석을 통해 시스템 성능을 지속적으로 개선하고, 문제를 신속히 해결합니다.
자동화 도구: CI/CD 파이프라인과 인프라 자동화를 통해 효율적이고 일관성 있는 운영을 보장합니다.
수평적 확장: 여러 데이터베이스 서버를 통해 데이터를 분산 처리하여 성능과 가용성을 향상시킵니다. (샤딩, 파티셔닝)
CDN 사용: 전 세계 사용자에게 빠른 콘텐츠 전달을 위해 CDN을 사용합니다.