10월 8일 - 시스템 규모 확장

Yullgiii·2024년 10월 8일
0

시스템 규모 확장에 필요한 고려사항

시스템 사용자 수가 늘어날수록 설계해야 하는 시스템의 규모가 달라지며, 이를 위해 다양한 요소를 고려해야 한다. 수백만 명의 사용자가 존재하는 대규모 시스템을 개발할 때 필요한 중요한 사항을 정리해본다.


1. 무상태(stateless) 웹 계층

시스템이 수평적 확장(Scale out)을 하려면 웹 계층이 무상태를 유지해야 한다. 사용자 세션 정보와 같은 상태 정보는 데이터베이스와 같은 지속 가능한 저장소에 맡기고, 웹 계층은 필요할 때만 데이터를 불러온다. 이를 통해 웹 서버가 사용자 요청을 처리하는 데 상태 정보가 필요 없으므로 서버를 추가하거나 제거하는 과정이 용이해진다.


2. 모든 계층 다중화 도입

데이터베이스 다중화의 장점:

  • 성능 향상: 데이터 변경은 주 데이터베이스에서만 처리하고, 읽기 연산은 부 데이터베이스 서버로 분산할 수 있다.
  • 안정성: 서버 중 일부가 손상되더라도 데이터를 보존 가능하다.
  • 가용성: 지역별 복제를 통해 하나의 데이터베이스 서버에 장애가 발생해도 서비스가 유지될 수 있다.

3. 가능한 많은 데이터 캐시

데이터베이스 호출을 최소화하고 자주 참조되는 데이터를 메모리에 캐시하여 빠르게 접근할 수 있도록 한다. 캐시 메모리가 너무 작으면 자주 사용되는 데이터가 캐시에서 밀려나 성능 저하가 발생할 수 있어, 캐시 용량을 넉넉히 할당해두는 것이 좋다.


4. 여러 데이터 센터 지원

데이터 센터의 장애에 대비해 여러 지역에 데이터 센터를 구축하여, 가장 가까운 데이터 센터로 사용자 트래픽을 라우팅한다. 장애가 발생할 경우 다른 데이터 센터로 트래픽을 전환하여 서비스의 안정성을 확보할 수 있다.


5. 정적 콘텐츠는 CDN을 통해 서비스

정적 콘텐츠는 주로 이미지, 비디오, CSS, JavaScript 파일 등을 포함하며, CDN을 통해 제공하면 사용자가 가장 가까운 서버로부터 파일을 전달받아 로딩 시간을 단축할 수 있다. 이를 통해 사이트의 로딩 속도를 줄이고, 메인 서버의 부하를 줄일 수 있다.


6. 데이터 계층 샤딩

데이터베이스의 수평적 확장을 위해 데이터를 샤딩(sharding)하여 관리한다. 각 샤드는 동일한 스키마를 사용하되 데이터를 분할하여 저장한다. 주요 고려사항은 다음과 같다:

  • 데이터 재 샤딩: 샤드에 데이터가 과도하게 쌓이거나 불균등할 경우 샤드를 재구성해야 한다.
  • 유명인사 문제: 특정 shard에 요청이 몰리면 과부하가 발생할 수 있어 이를 방지할 전략이 필요하다.
  • 조인과 비정규화: 샤딩 후에는 조인이 어려우므로 비정규화하여 단일 테이블에서 질의를 처리할 수 있도록 설계한다.

7. 각 계층을 독립적인 서비스로 분할

서비스를 독립적인 마이크로 서비스 구조로 분리하면, 한 서비스의 장애가 다른 서비스에 영향을 미치지 않도록 할 수 있다. 시스템이 커질수록 계층마다 독립적으로 서비스화하여 안정성과 확장성을 확보할 수 있다.


8. 시스템 모니터링 및 자동화 도구 활용

  • 로그 모니터링: 시스템 에러와 문제를 파악하기 위한 로그를 기록하여 실시간 모니터링을 수행한다.
  • 메트릭 수집: 시스템의 성능, 현황 등 정보를 수집해 사업 현황과 시스템 상태를 파악한다.
  • 자동화: CI/CD 파이프라인을 통해 빌드, 테스트, 배포 등의 검증 과정을 자동화해 개발 생산성을 높인다.

So...

시스템의 규모 확장은 단순히 서버를 추가하는 것뿐만 아니라, 서비스의 안정성과 성능을 보장하기 위한 설계와 고려가 필요하다. 무상태 웹 계층, 데이터베이스 다중화, 캐시 및 CDN 활용, 샤딩과 마이크로 서비스 구조, 그리고 모니터링 및 자동화 도구의 도입은 안정적이고 확장 가능한 시스템을 구축하는 데 중요한 역할을 한다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글