10월 22일 -확장

Yullgiii·2024년 10월 23일
0

시스템 규모 확장 (Scalability)

시스템의 사용자 수가 늘어날수록, 시스템이 제대로 동작하고 성능을 유지하기 위해서는 설계와 구조가 매우 중요하다. 특히 수백만의 이용자가 있는 시스템을 개발해야 한다면 몇 가지 중요한 요소들을 고려해야 한다.


무상태(stateless) 웹 계층

웹 계층을 수평적으로 확장하기 위해서는 무상태(stateless) 구조가 필수적이다. 사용자 세션 정보나 상태는 데이터베이스와 같은 저장소에 위임하고, 웹 계층에서는 상태를 유지하지 않도록 설계하는 것이다. 이를 통해 웹 서버는 클라이언트 요청이 어느 서버로 가든 동일한 결과를 제공할 수 있다.

  • 수평적 확장(Scale out): 서버를 추가하여 성능을 확장하는 방법으로, 웹 계층이 상태를 유지하지 않으면 트래픽 증가에도 서버 추가가 용이해진다.

모든 계층의 다중화 도입

다중화(Mirroring)는 데이터를 주 서버와 부 서버로 나누어 운영하는 방식이다. 이를 통해 시스템의 성능, 안정성, 가용성을 높일 수 있다.

  • 성능 개선: 쓰기 연산은 주 서버에 집중되고, 읽기 연산은 부 서버로 분산되어 쿼리 처리 속도가 빨라진다.
  • 안정성 확보: 서버 일부에 장애가 발생해도 데이터를 손실 없이 유지할 수 있다.
  • 가용성 증가: 다른 지역에 서버를 복제하여, 특정 지역에서 장애가 발생해도 다른 서버를 통해 시스템을 지속적으로 운영할 수 있다.

가능한 많은 데이터 캐시 활용

캐시(Cache)는 자주 사용되는 데이터를 메모리에 저장하여 데이터베이스의 부하를 줄이고 성능을 높이는 데 도움을 준다. 캐시 메모리 공간이 부족하면 성능 저하가 발생할 수 있으므로, 필요한 경우 충분한 캐시 메모리를 할당해야 한다.

  • 장점: 데이터베이스에 대한 호출을 줄이고 자주 참조되는 데이터를 빠르게 처리하여 성능을 향상시킨다.

여러 데이터 센터 지원

데이터 센터는 물리적으로 분산된 여러 서버를 말하며, AWS와 같은 클라우드 환경에서는 각기 다른 지역에 데이터 센터가 구축되어 있다. 이를 통해 지리적 라우팅이 가능해져 사용자와 가장 가까운 데이터 센터를 통해 빠르게 응답을 받을 수 있다. 만약 특정 데이터 센터에 문제가 생기면 다른 데이터 센터로 트래픽을 전달해 시스템 장애를 방지할 수 있다.


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

CDN(Contents Delivery Network)은 정적 콘텐츠(이미지, CSS, JS 등)를 지리적으로 분산된 서버에 캐싱하여 사용자에게 가장 가까운 서버에서 데이터를 전달한다. 이를 통해 웹사이트의 로딩 속도를 크게 줄일 수 있고, 데이터베이스의 부하도 낮출 수 있다.


데이터 계층의 샤딩(Sharding)

샤딩(Sharding)은 데이터베이스를 수평적으로 분할하여 관리하는 기법이다. 데이터가 한 곳에 몰리는 문제를 방지하고, 데이터베이스의 확장성을 높이는 데 도움을 준다.

  • Shard란?: 데이터베이스를 여러 개의 작은 단위(shard)로 나누어 관리하는 기술로, 각 shard는 같은 구조를 가지지만 저장하는 데이터는 서로 다르다.
  • 핫스팟 문제: 특정 shard에 질의가 몰리면 성능이 저하될 수 있는데, 이를 핫스팟 키라고 부른다. 적절한 샤딩 키를 설정하여 데이터를 고르게 분산시키는 것이 중요하다.

각 계층은 독립적인 서비스로 분할

마이크로서비스(Microservices) 구조로 설계하면, 각 서비스가 독립적으로 동작하므로 한 서비스에 문제가 생겨도 다른 서비스에 영향을 주지 않는다. 서비스가 커질수록 계층별로 독립적인 서비스를 유지하는 것이 확장성과 안정성에 유리하다.


모니터링 및 자동화 도구 활용

  • 로그 모니터링: 시스템에서 발생하는 오류와 문제를 추적하고 분석할 수 있는 중요한 도구이다.
  • 메트릭 수집: 시스템의 상태, 성능, 사용자 행동 등을 수집하여 분석하는 도구를 통해 성능을 최적화하고 문제를 사전에 방지할 수 있다.
  • CI/CD 자동화: 빌드, 테스트, 배포 과정을 자동화하여 개발 효율성을 높이고 안정성을 유지할 수 있다.

So...

시스템이 확장되면서 처리해야 할 트래픽이나 데이터가 급격히 증가할 때, 이를 해결할 수 있는 방법은 다양하다. 무상태 웹 계층을 통해 서버 추가가 가능하도록 설계하고, 데이터베이스의 성능을 개선하기 위한 다중화 및 샤딩 기술을 적절히 도입하며, 캐시와 CDN을 통해 성능을 최적화한다. 또한, 각 계층을 독립적으로 분리하여 유지보수를 쉽게 하고, 모니터링과 자동화를 통해 시스템의 안정성을 높이는 것이 중요하다.

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

0개의 댓글