본문 바로가기

SW Architecture

확장성 있는 웹 서비스 시스템 설계

출처: 가상 면접 사례로 배우는 대규모 시스템 설계 기초 System Design Interview 1장

기록용으로 몇가지 키워드만 남긴다.

추후 하나씩 블로그를 통해 다뤄보면 유익할 것 같다.

일반적인 웹 서비스 구조를 가정하면

Client (Mobile or Web) ->  LB -> Web Server -> Database로 큰 관점에서의 Layered Architecture가 되는데, 이를 확장성있게 설계하기 위한 체크리스트이자 요약이다.

  • 핵심은 모든 계층을 다중화 하자. "모든 계층에 Scale Out 전략이 세워졌나?"
  • Stateless 웹 계층.  "Client <-> Server간 REST API 설계가 제대로 됐나?"
  • 가능한 한 많은 데이터를 캐시해야 한다. "캐시 전략은 세웠나?, 어떤 데이터를 캐시할지, 어떤 캐시 전략을 쓸지, 어떤 캐시 Eviction 전략을 쓸지"
  • Global 서비스를 염두에 두고 있다면 여러 리전에 배포해야 한다. "GeoRouting 설정은 했나? Failover Scenario는 점검했나?"
  • CDN을 사용한다. "정적 컨텐츠는 CDN을 사용했나?"
  • 샤딩을 통해 DB를 확장한다. "샤딩을 고려하여 데이터 모델링이 되었나? 샤딩된 데이터에 대해 JOIN이 필요한 경우를 대비한 역정규화를 고려했나?"
  • JOIN이 필요하지 않은 대규모 데이터는 NoSQL을 사용한다. "NoSQL을 고려했나?"
  • Asynchronous Messaging을 적극적으로 활용한다. "오래 걸리는 작업은 Message Queue로 설계가 되었나? 시스템 간 통신 시 응답이 불필요한 경우 Message Queue로 설계가 되었나?"
  • 대규모 서비스 개발 및 배포에 대한 자동화를 적용한다. "CICD가 준비되었나?"
  • 시스템 상태에 대한 자동화를 적용한다. "Monitoring, Logging, Alerting, Metering 시스템이 연동되었나"

다음은 읽어볼 참고 문헌이다.

'SW Architecture' 카테고리의 다른 글

ETL Pipeline 개발에도 필요했던 MSA  (0) 2022.11.18
REST API 설계  (0) 2021.03.16