
- DNS
- 로드 밸런서
- 수평적 확장이 가능하게 한다.
- 수평적 확장
- 더 많은 장치를 새로 추가
- 수직적 확장
- 이미 사용하고있는 장치의 성능을 높임
- 로드 밸런서에 요청이 오면, 많은 서버들에게 과부하가 걸리지 않도록 들어오는 요청들을 적절히 분배해주는 역할을 갖는다.
- WAS(웹 어플리케이션 서버)
- 사용자의 요청이 들어오면 핵심 비즈니스 로직을 실행하고 그 결과를 HTML에 담아 브라우저로 보낸다.
- 특정 언어를 선택하고, 그에 맞는 웹 MVC 프레임워크(Express for Node.js, Ruby on Rails, Play for Scala, Laravel for PHP, …)를 선택해서 구현
- DB, 캐싱계층, Job Queue, 검색 서비스, 기타 마이크로 서비스 등 다양한 백엔드 인프라와 데이터를 주고받는다.
- 데이터베이스
- RDBMS - MySQL, Posgreqsl
- NoSQL - MongoDB
- 캐싱 서비스
- 정보를 매우 빠르게(O(1)) 찾을 수 있는 단순한 키/값 데이터 저장소 제공
- Redis, Memcache
- Job Queue/Server
- Job Queue는 비동기적으로 실행될 Job 목록을 저장하고 있음
- FIFO(First In First Out) / 우선순위 큐 등 그에 알맞는 전략 필요
- 참조 - Nest Job Queue
- 텍스트 검색 서비스
- 사용자가 텍스트 입력을 하면 가장 관련있는 결과를 보여주는 기능, 보통 역 인덱스를 활용함
- 서비스
- 앱이 특정 규모에 도달하면, 별도의 애플리케이션으로 분리해서 운영하기 위한 서비스가 생기게 된다.
- 데이터
- 앱이 특정 규모에 도달하면 데이터를 제어, 저장, 분석하기 위해 데이터 파이프라인을 사용한다.
- 서버는 발생한 데이터를 firehouse 라 불리는 곳으로 전달한다.
- AWS Kinesis, Kafka
- 원시 데이터와 최종 데이터는 모두 클라우드 스토리지(AWS S3)에 저장된다.
- 변형/추가된 데이터는 종종 데이터 분석을 위한 데이터 웨어하우스(DW)에 로드된다.
- 클라우드 스토리지
- 대표적으로 AWS S3가 있으며, REST API를 통해 클라우드에 저장하고 접근할수 있다.
- CDN(Content Delivery Network)
- 사용자 위치, 콘텐츠 원본 서버, 엣지 서버 위치를 기준으로 콘텐츠(웹페이지, 동영상, 이미지)를 최종 사용자에게 전송할 수 있는 (엣지 로케이션 서버라고도 하는) 분산 노드로 구성된 네트워크
- CDN 노드는 콘텐츠를 캐싱할 수 있는 캐시 기능을 갖추고 있으며 최종 사용자와 가까운 위치에서 사용자에게 콘텐츠를 제공할 수 있다.
- CDN이 없으면, 한국에서 컨텐츠에 접속하기 위해 영국의 노드까지 접속해서 데이터를 가져와야 한다. 이 과정에서, 세 가지 문제점이 발생한다.
- 모든 사용자가 같은 웹서버에 접속하면, 웹서버 부하가 일어난다.
- 지리적으로 먼 위치의 인터넷을 통해 전송되므로 사용자에게 지연이 발생한다.
- 서비스 제공자는 더 많은 사용자에게 컨텐츠를 제공하기 위해 점점 더 많은 대역폭 비용을 지불해여야 한다.
- CDN은 위 세 가지 문제점들을 모두 해결해 줄 수 있다. 영국에 있는 데이터를 각 지역별로 캐싱해두면, 사용자들은 굳이 영국까지 연결할 필요 없이 가까운 CDN 서버에 접속하면 된다.
- 이로써 지연시간이 줄어들고, 분산 노드로 처리하게 되므로 원번 서버의 부하가 최소화된다.

Share article