AWS 기반으로 한명의 유저부터 수백만명이 사용할 수 있는 웹 서비스 인프라 구성 하기

nawnoes·2021년 1월 8일
1
post-custom-banner

AWS 기반으로 한명의 유저부터 수백만명이 사용할 수 있는 웹 서비스 인프라 구성 하기

로컬에서 개발하던 웹서비스를 실제 서비스에 올리기 위해, AWS 환경에서 올리는 것을 고려하엿습니다. AWS를 고려한 이유는 특별한 이유라기보단 참고할 자료들이 많고, 기존에 사용한 경험을 바탕으로 보다 익숙하게접근할 수 있는 장점 때문에 선택 했습니다.

서비스 최초 구축 시에 확장 가능한 부분들을 고려하다보니 어떻게 서비스를 구성해야할지 고민이 되는 부분이 많았고, 각각 서비스들을 살펴보면 AWS에는 EC2, ECS, Load Balancer, Route53, CloudFront 등등 너무 많은 서비스들이 있었고 어떻게 세팅 하는 것이 좋을지 혼란스러운 부분이 많아 가이드가 있으면 좋겠다고 느끼게 되었습니다.

자료를 찾다보니 천만 사용자를 위한 AWS 클라우드 기반 웹 서비스 확장하기를 발견하였고, 이를 정리해 보며 적용해보기로 생각하엿습니다. 이 글에서는 고려가능한 인프라 구조를 정리하고, 단계별로 적용하는 부분에서 기록이 필요한 경우 남기도록 하겠습니다.

AWS의 장점

  • 글로벌하게 사용 가능하며, 원하는대로 컴퓨팅을 사용할 수 있는것이 장점
  • 서버 트래픽이 증가하는 경우 좀더 성능 좋은 인스턴스 사용이 필요하다. 이러한 성능좋은 인스턴스로 scale up하는 방법이 있으며, 클라우드에서는 이러한 scale up이 쉽다

① 사용자 1명에게 서비스하기

Route53과 EC2를 사용해서 간단하게 사용자들에게 서비스를 제공할수 있다.

② 사용자 10명에게 서비스하기

1번 구조에서 서비스를 하게되면, 하나의 인스턴스에서 모든 서비스를 하게 되어 서버가 이상이 생겼을때 전체서비스에 장애가 생기게 된다. 이런 때의 해결 방법으로는 기능에 따라 인스턴스의 역할을 나누는 방법을 사용한다.

아래의 구조에서는 기존의 서비스에서 DB를 추가의 인스턴스로 빼내어 웹서버와 DB인스턴스로 구성된 서비스를 구축한다.

③ 사용자 100명에게 서비스하기

2번의 구성에서 보다 서비스에 집중하기 위해, DB 인스턴스를 다른 클라우드 서비스를 이용하는 방법도 있습니다. AWS에서 제공하는 RDS나 DynamoDB 등을 사용할 수 있고, MongoDB를 사용하면 Mongo Atlas를 사용하는 방법이 있습니다. 이와 같이 DB 운영에 대한 부분을 클라우드에 맡기면서 보다 웹서비스에 집중할 수 있습니다.

④ 사용자가 1만 ~ 100만+ 명 이상에게 서비스 하기

서비스의 사용자가 확장되면 단일 서버 구성으로는 어려움 점이 많습니다. 따라서 아래와 같이 Elastic Load Balancing, Multi-AZ, DB 이중화를 이용하여 이중화된 서비스를 구성하는 방법이 있습니다.

  • 로드밸런서는 SW를 통해 로드밸런싱을 진행하며 장점으로는 자동으로 scaling up 해주는 장점을 가진다.
  • 로드밸런서는 AWS에 다른 리전에 있는 서버에도 로드 밸런싱을 해줄수 있다.

위와 같은 구성으로 확장성을 가져간다면 1만명 10만 이상에도 충분히 서비스를 할 수 있는 구성이라 합니다.

더 높은 가용성을 가지기 위한 방법

더 높은 가용성을 가지기 위해서는 인스턴스가 오토스케일링을 통해 관리 되는것이 중요하며, 그러기 위해서는 웹서버의 인스턴스를 보다 가볍게 만드는것이 중요합니다.

왜 오토스케일링이 필요한가?

오토스케일링은 시간에따라 AWS 인스턴스를 자동으로 늘리고 줄이는 기능을 말합니다. 인스턴스를 왜 자동으로 늘리는 기능이 필요할까요? 그 이유는 바로 사용자의 웹 서비스는 어느정도의 주기를 가지기 때문에 모든 시간에 많은 사용량이 발생하지 않습니다. 따라서 사용량이 많을 때는 많은 인스턴스를 사용하고, 사용량이 적은 경우 적은 인스턴스를 사용해 비용을 절감하는것이 중요합니다.

웹서버의 인스턴스를 가볍게 하는 방법

① 정적인 데이터 분리

서버에서 사용하는 정적인 파일들을 분리해서 관리해야합니다. 그 예로 인스턴스에 두었던 정적인 파일들을 S3를 이용해 분리하는 방법이 있습니다.

② DB의 부하 줄이기

자주 사용하거나 업데이트가 잦은 데이터는 메모리 기반의 캐시 서비스를 고려하는 방법이 있습니다.

③ CDN을 사용해 동적 콘텐츠처리하기

CDN을 사용해 컨텐츠를 제공하는경우 response time을 줄일 수 있으므로, CDN을 사용하는것을 추천합니다. AWS 상에서는 CloudFronts라는 서비스를 제공합니다

오토스케일링 적용 방법

  • CPU와 네트워크 트래픽을 통해 오토스케일링을 적용할수 있습니다.

위 내용을 적용한 사례

디스패치에서는 특종 기사가 있을때 트래픽이 급증하기 때문에 인스턴스의 사용량이 유동적이었기 때문에 오토스케일링을 통한 유연한 인프라 구성이 필요했습니다.

디스패치

서버 구조

무료 실습 사이트

qwiklabs에서 클라우드에 대한 무료 실습이 가능합니다.

References

post-custom-banner

0개의 댓글