PROGRAMMING/AWS

AWS 소규모 아키텍트 (1) - AWS Service 톺아보기

Heony 2022. 7. 26. 12:10

안녕하세요.
지금부터는 본격적인 AWS서비스와 함께 우리가 무엇을 구현해야 하는지, 왜 이 서비스를 사용하는지에 대해서 본격적으로 탐구해보도록 하겠습니다.

저희는 소규모 아키텍트를 제작하려고 합니다. 소규모 아키텍트의 확실한 정의가 존재하지는 않지만 대략적으로 1,000명 또는 10,000 이하의 서비스 사용자가 있을 때를 생각하시면 될 것 같습니다. 따라서, 우리는 그 소규모 사람들을 위한 서비스를 어떻게 마련할 것인지, 또한 트래픽을 감당하지 못할 때에는 어떻게 할 것인지에 대한 대비를 해 놓아야 합니다.

예시를 하나 들어보면서 차근차근 시작해보도록 하겠습니다. 조금 어색한 부분들도 있겠지만 감안해서 보시기 바라겠습니다:)

저는 작은 음식점을 하나 운영하고 있습니다.
처음에는 혼자 운영(EC2)을 하고 있었습니다. 입소문을 타서 점점 음식점을 찾는 사람들이 많아졌고 이에 따라 저는 저와 똑같은 요리 실력을 가진 알바생들을 여럿 고용(AMI + EC2)했습니다. 저희는 각자가 할 일이 주어져 있지만, 한 명에게 많은 일들이 몰려있을 때 다른 사람들이 그 사람의 일들을 대신 도와주기도(Load Balancing, ELB) 합니다. 또한 우리는 탄력적으로 운영하고 있어 사람들이 많이 없는 2시부터 6시 까지는 적은 인원을 배치하고, 저녁시간에는 많은 인원들을 배치(Auto Scaling)하고 있습니다.

처음에는 마땅한 음식점 이름을 정하지 못해 많은 사람들이 직접 주소를 입력해서 찾곤 했지만, 최근에 이름을 지정(Route 53)했습니다. 또한, 그에 따라서 우리는 전국에 점포를 배치하여 많은 사람들이 쉽고 빠르게 접근할 수 있도록(CloudFront) 지역을 넓혔습니다. 우리는 우리 점포만의 고객데이터만을 가지고 있었는데, 전국에 점포가 생기게 되면서 각 고객데이터를 서로 공유할 수 있는 서비스도 구축(RDS)했습니다.

 


 

우리는 총 7개의 서비스를 살펴보았습니다. 그러면 각 서비스와 아이콘을 살펴보도록 하겠습니다. 앞으로 AWS를 사용하시면서 많은 도식화 또는 흐름도를 보게되기 때문에 아이콘과 이름을 매칭시키는 것도 중요합니다!

 

 

EC2

Amazon Elastic Compute Cloud (Amazon EC2)

EC2 서비스는 쉽게 이야기하자면 서버를 하나 구매하는 것입니다. 어떤 하드웨어 컴퓨터를 구매할 필요 없이 우리는 몇 번의 클릭만으로 서버를 손 쉽게 제작할 수 있습니다. 따라서, EC2를 사용하면 우리는 어플리케이션 배포나 통합적 운영에서도 신속하게 진행할 수 있으며 상황에 따른 서버의 증설, 또는 감축이 편리하게 가능합니다.

EC2를 구매할 때에 우리는 사양을 선택할 수 있으며 이에 따라서 어플리케이션의 규모에 따른 서버를 쉽게 구축할 수 있습니다. 이 외에 보안규칙, 액세스 및 기타 설정이 가능하고, 사용한 만큼만 지불하는 방식이기 때문에 요금에서도 부담을 줄일 수가 있습니다(상황에 따라)

AMI

AMI는 AWS의 전체 서비스중 하나라고 보기보다는, EC2의 서비스 중 하나라고 생각하는 것이 더 이해하기 쉽습니다. EC2로 우리가 어떠한 프로그램이나 데이터베이스, 환경 설정 등 이미 구축되어 있는 서버가 있다고 했을 때에 이를 다른 서버에 전체적으로 옮기는 일이란 쉬운 일이 아닙니다. 따라서 AMI는 현재 EC2의 모든 설정들을 캡쳐하여 이를 하나의 Image으로 만들고, 이 Image를 갖고 EC2를 생성할 수 있습니다.

Image의 개념은 Docker에서 충분히 활용할테니 이해만 하고 넘어가도 됩니다!

 

 

Load Balancer

Elastic Load Balancing

Elastic은 탄력적인 이라는 뜻을 가지고 있습니다. 즉, 어떤 짐이나 일들을 탄력적으로 균형을 맞출 수 있도록 도와주는 서비스입니다. 다시 말해, 우리가 미리 준비해놓은 EC2에서 각 현재의 상황에 맞게끔 트래픽을 전달하는 역할을 수행합니다. 가장 중요한 점은, 미리 준비하지도 않은 상태에서 다른 EC2를 생성하여 그곳에 트래픽을 전달하는 방식이 아닙니다. 이는 Auto Scaling으로 이후에 다룰 것입니다.

하나만 알아두자고요. 미리 준비된 EC2 상황에서 가장 최적의 트래픽을 구현해주는 것이 Load Balancing 서비스입니다.

💡Tip
Elastic Load Balancing과 Application Load Balancer의 용어가 혼동될 수 있습니다.
Application Load Balancer는 Elastic Load Balancing의 서비스가 가지고 있는 것 중의 하나의 서비스입니다.

즉 Elastic Load Balancing의 서비스는
Application Load Balancers, Network Load Balancers, Gateway Load Balancers 및 Classic Load Balancer 의 이하 서비스들을 가지고 있고, 그 중의 하나가 바로 Application Load Balancers인 것입니다.

 

 

Auto Scaling

Amazon EC2 Auto Scaling

분명 아무도 사용할 사람이 없는 시간대인데 구매해놓은 여러 개의 EC2가 풀파워로 돌아가고 있으면 어떨까요? 자원낭비, 시간 낭비, 돈 낭비와 같은 여러 문제가 발생합니다. 그렇다고 미리 준비하고 있지 않으면 폭발적인 트래픽을 감당하지 못해 얻는 손해가 클 수도 있습니다. 이에 AWS는 사용자가 입력한 조건에 따라서 새로운 서버를 증설하기도 하며 감축하기도 하는 서비스를 운영합니다.

여기서 사용자가 입력한 조건이란, CPU 사용량이 50% 이상이 될 때와 같은 어떤 하나의 조건으로 서버를 자동으로 운영할 수 있다는 뜻입니다. 규모를 신속하고 똑똑하게 스케일링 하며, 자동으로 성능을 유지하거나 필요한 만큼만 지불하는 특징을 가지고 있습니다.

Auto Scaling group은 해당 서비스를 통해 서버가 증설되거나 감축될 때에 필요한 그룹을 의미합니다.
원하는 능력을 먼저 배치해두고, 상황에 따라 미리 정의한 최소 사이즈(Minimum size) 또는 최대 사이즈(Maximum size)으로 변하는 것입니다. 가령 Maximum size을 3으로 제한해둔다고 하면 아무리 많은 트래픽이 들어온다고 해도 3개까지의 EC2만 생성이 되는 것입니다.

Auto Scaling 서비스는 다음 3개의 서비스와 유사한 관련이 있습니다.

EC2
Load Balancing
CloudWatch

Auto Scaling의 기능으로 서버가 증설 또는 감축될 때에 그 서버는 EC2를 의미합니다. 따라서 EC2와는 관련이 있음을 인지할 수 있습니다. 그러나 Load Balancing과 처음보는 CloudWatch는 어떤 기능인지, 무엇과 연관이 있는지 이해하기 어려울 수 있습니다.

Elastic Load Balancing을 사용하여 수신되는 애플리케이션 트래픽을 바로 Auto Scaling 그룹의 인스턴스에 자동으로 분산할 수 있는 서비스를 제공합니다. 즉 Auto Scaling 그룹안에 있는 모든 EC2 서비스는 Load Balancing의 영향을 받아 안정성 있는 관리를 유지할 수 있다는 것이지요.

또한 CloudWatch는 엔지니어나 개발자 또는 사이트 안정성 엔지니어와 같은 사람들에게 지속적인 모니터링 기능과 관찰할 수 있는 서비스를 제공합니다. 따라서 크기 조정 정책을 활성화 하며, Auto Scaling 그룹 및 EC2 인스턴스에 대한 지표를 모니터링할 수 있는 서비스를 제공하고 있습니다.

 

DNS

Amazon Route 53

DNS는 Domain Name System의 약어입니다. 만약 위의 예시에서 음식점에 이름이 없고 위치로만 존재한다면 어떻게 될까요? 사람들은 그 음식점을 찾기 위해서는 매 검색때마다 '경기도 성남시 분당구 ..'로 입력을 해야할 것입니다. 따라서 이 음식점에 대한 어떠한 명칭을 만들고, 이 명칭대로 사람들이 검색하게끔 만들게 도와주는 것이 Route 53 서비스입니다.

각 컴퓨터는 이름이라고 할 수 있는 ip번호를 가지고 있습니다. 나의 컴퓨터를 서버로 제작한다면, 사람들이 내 pc에 접속하기 위해서는 나의 ip가 필요로 하겠죠. 하지만 ip 번호는 xxx.xxx.xxx.xxx와 같은 형식으로 숫자로 만들어져 있습니다. 따라서 우리는 이 아이피 주소를 쉬운 도메인 이름으로 제작하여 접근해야 할 것입니다. Route 53은 도메인 이름을 구매할 수 있으며 DNS를 자동으로 구현해줍니다.

 

 

CloudFront

Amazon CloudFront

CloudFront는 CDN 서비스입니다. 여기서 CDN이란 Content Distribution Network or Content Delivery Network 을 의미합니다. 즉 컨텐츠를 효율적으로 전달하기 위해 여러 노드를 가진 네트워크에 데이터를 저장하는 시스템을 의미합니다. CloudFront는 캐싱을 통한 방식으로 더 빠른 전송 속도를 제공하며, 각 세계 전 곳에 Edge Server을 제작해두어 사용자로 하여금 가장 가까운 위치에 있는 Edge Server와 통신하여 더욱 빠른 속도를 제공할 수 있게 됩니다. 사람들은 짧은 전송속도로 파일을 받아볼 수 있습니다.

 

 

Database

Amazon Relational Database Service (Amazon RDS)

개발을 해보셨더라면 데이터베이스에 대한 기본적인 지식은 알고 있을 것입니다. 만약 모른다고 한다면 다음과 같이 이해하면 되겠습니다. 데이터베이스는 말 그대로, 점포 입장에서는 각 고객의 소리를 모아놓은 집합체가 될 수도 있고, 게임 입장에서는 설문조사를 통한 고객 데이터 및 게임 능력치와 아이템 데이터를 모아놓은 집합체 등이 될 수 있겠군요.

우리가 실제로 개발해볼때는 local에서 많이 실행합니다. 즉, 자신의 컴퓨터를 서버로 이용하여 자신만이 접근할 수 있는 서비스를 구축하는 것이지요. 그러나 이는 데이터 확장의 불안정성(하드웨어를 따로 구입해야함) 및 분석의 어려움 등이 있습니다. 이에 지정한 사람 또는 모든 사람이 접근할 수 있는 데이터베이스를 제작, 공유할 수 있는 서비스가 필요로 합니다. 이것이 바로 Amazon RDS 서비스 입니다.

그러나 모든 데이터베이스가 RDS에 포함된다는 것은 아닙니다. 이는 관계형 데이터베이스만을 취급하는데, 다른 예시로 DynamoDB, Aurora, ElastiCache등과 같은 다른 데이터베이스 서비스도 존재합니다. 우리가 알아두어야 하는 것은 RDS는 데이터베이스 서비스의 한 종류라는 것입니다.

혹시 제작하게 된다면 꼭 프리티어인지에 대한 확인이 필요합니다.
잘못해서 Database의 라이센스까지 같이 구매하게 된다면 Oracle DB의 경우 27만원이 과금됩니다!
경험담이라서 정확해요.. 

혹여 비용이 청구되었더라도 AWS 고객센터에 영어로 잘 말하면 1회는 봐준다고 합니다. 검색해보시면 나올거에요.
이것도 경험담이라서 정확해요..

 


 

간단한 예시를 통해 우리가 소규모 아키텍트를 제작하는데 필요한 서비스들과 어떤 서비스를 가지고 있는지에 대해 살펴보았습니다.

다음에는 실제로 EC2를 제작해보고, 사람들이 어느 정도 활용한다는 가정하에 Load Balancing기능, Auto Scaling기능을 사용해보도록 하겠습니다. DNS서비스인 Route53은 결제가 필요로하기 때문에 주의가 필요합니다. 또한 EC2의 경우도 프리티어로 제작하지 않았을 시에 과금이 포함되기 때문에 주의하셔야 합니다.

* 제가 말하지 못한 부분에서도 각 서비스당 과금 정책이 있으며, 잘 살펴보시고 안전한 환경에서 테스트해보시기를 바랍니다.

 

728x90