Cloud/AWS

AWS , Amazon Web Services

Supreme_YS 2021. 3. 22. 19:16

 

AWS

  • 클라우드 : 서버의 구매, 구축, 운영을 대행해주는 서비스, 웹 호스팅과 유사, 가상화 기술, 탄력적인 인프라 운영, 사용한 만큼 과금(종량제)
  • EC2 ( Elastic Compute Cloud ) : 독립적인 컴퓨터 한 대, Linux, Window 운영체제 제공, 웹서버, 에플리케이션 서버로 주로 사용된다.
  • S3 ( Simple Storage Service ) : 파일 서버 역할, S3가 무제한으로 데이터를 저장해주는 특성이 있기 떄문에 EC2도 저장이 되지만 S3를 주로 쓴다. 스케일은 아마존 인프라가 담당,
  • RDS ( Relational Database Service ) : Mysql, Oracle, SQL Server 지원, 백업, 리플리케이션을 아마존 인프라가 자동으로 제공
  • ELB ( Elastic Load Balancing ) : EC2로 유입되는 트래픽을 여러대의 EC2로 분산, 장애가 발생한 EC2를 감지해서 자동으로 배제, Auto Scaling 기능을 이용해서 EC2를 자동으로 생성, 삭제

인프라 확장 시나리오

  1. 한 대의 머신이 단독으로 웹 서버, 애플리케이션 서버, 데이터베이스, 파일 서버의 역할을 모두 수행
  2. 트래픽 증가로 한 대의 EC2로 처리 어려움 --&gt; 하드웨어 성능 향상(Scale up)<br>
  3. 트래픽이 더 증가한다면 --&gt; S3(파일서버)/RDS(데이터베이스서버)/웹서버, 애플리케이션 서버로 분산<br>
  4. 더 트래픽이 증가한다면 -&gt; Auto Scaling을 이용해서 시스템의 부하에 따라서 자동으로 EC2가 증감하게 한다(ELB를 앞에 배치)<br>

![](https://slid-capture.s3.ap-northeast-2.amazonaws.com/public/capture_images/000107006c4943b3b770d72b4693060a/b45bc764-98b6-4455-815c-1110de003118.png "AWS image")

데이터베이스 확장 시나리오

  1. 트래픽이 증가한다면 RDS를 1개의 Master(쓰기) 서버와 여러개의 Slave(읽기) 서버로 분산한다.
  2. 기능에 따라서 물리적으로 시스템을 분산 - shading
  3. NoSQL 사용 - DynamoDB&nbsp;

![](https://slid-capture.s3.ap-northeast-2.amazonaws.com/public/capture_images/000107006c4943b3b770d72b4693060a/4aaa888b-d335-471b-a8f3-f6afca65ac85.png "AWS image")

EC2( Elastic Compute Cloud )&nbsp;

  • 한 대의 컴퓨터를 임대 해주는 것
  • 인터넷을 통해서만 접속을 할 수 있고, 주문 후 1분 안에 생성되고, 삭제 즉시 제거된다.
  • 초기 구입비가 전혀 없고, 사용한 만큼 비용을 지불하면 된다.

EBS( Elastic Block Store )

  • SSD, HDD와 같은 저장 장치, EC2의 인스턴스에 장착
  • 종량제
  • 스냅샷 기능을 제공해서 EBS의 현재 상태 그대로 보존 할 수 있다.
  • CloudWatch를 통해서 EBS의 통계를 열람할 수 있다.
  • EC2 인스턴스를 제거해도 EBS는 독립적이기 때문에 데이터가 유지된다.
  • Volume : EBS로 생성한 디스크 하나 하나를 볼륨이라고 한다. (EC2의 인스턴스와 EBS의 볼륨과 같은 개념이라고 보면 된다.)

AMIs( Amazon Machine Images )&nbsp;

  • EC2 인스턴스를 그대로 저장해서 재사용 할 수 있도록 만든 것
  • private, public, Marketplace 와 같은 세 가지 형태로 구성되어 있다.
  • private : 비공개 이미지로 자기 자신만이 사용할 수 있다.
  • public : 공개된 이미지로 누구나 이용할 수 있다.
  • Marketplace : 일종의 앱스토어와 같은 개념으로 이미지를 판매하고 구매할 수 있는 마켓이다.

ELB ( Elastic Load Balancing )&nbsp;

  • 한 대의 성능 개선하는 것 (Scale Up = 수직 향상)
  • 확장 시나리오 부하 분산(Scale Out)
  • 즉, 트래픽을 분산 시켜주는 서비스
  • 자동 확장
  • 인스턴스의 상태를 자동 감지해서 오류가 있는 시스템은 배제
  • 사용자 세션을 특정 인스턴스에 고정
  • SSL 암호화 지원, IPv4, IPv6 지원
  • CloudWatch를 통해서 모니터링

Auto Scaling

  • 기존 인프라의 문제점

![](https://slid-capture.s3.ap-northeast-2.amazonaws.com/public/capture_images/000107006c4943b3b770d72b4693060a/4270cde6-af61-4b5f-a473-053fd9bddaf0.png "AWS image")

  • 붉은선 : 방문자의 증가 추이 -&gt; 예측하기 어렵게 증가하고 있는 모습 Analog 적 증가
  • 파란색 : 인프라 증가를 표현한 선 -&gt; Digital 적 증가
  • 파란색 선이 붉은 색보다 위에 있다는 것은 <b>인프라가 낭비</b>되고 있다는 뜻
  • 붉은색 선이 파란 색보다 위에 있다는 것은 <b>서비스 대응을 못하고</b> 있다는 뜻
  • Auto Scaling : EC2 인스턴스의 규모를 자동으로 확대/축소
  • 인스턴스의 규모를 변화시키는 다양한 조건이 있다.
  • 처리량의 증가에 빠르게 대응할 수 있다.
  • CLI 를 통해서만 제어 가능하다.
  • 미리 만들어진 이미지(AMI)를 이용해서 인스턴스를 자동으로 생성한다.
  • Auto Scaling의 타입 : 3가지
  1. 부하에 따라 자동으로 규모 변경 방법
  2. 현재의 규모 유지 방법
  3. 시간에 따라 변경하는 방법
  • Auto Scaling의 절차
  1. Launch configuration 설정( AMI, instance type )
  2. Auto Scaling Group 생성( ELB, 최소/최대 인스턴스 수량, 가용성 존 )
  3. 정책(Policy) 생성 ( 인스턴스의 추가/제거의 방법과 수량, cooldown : Auto Scaling이 동작해서 인스턴스가 추가될 때, 다음 Auto Scaling이 실행되기까지 걸리는 시간 )
  4. &nbsp;Cloud Watch에서 Alarm을 생성하고 정책과 연결

EC2의 비용

* EC2 인스턴스는 아래와 같이&nbsp;크게 3가지 가격 옵션이 있다.&nbsp;

  • on demand&nbsp;: 필요에 따라서 인스턴스를 생성하고 삭제 할 수 있는 인스턴스로 가장 비싸다. 하지만 필요한 만큼 사용 할 수 있기 때문에 비정기적으로 사용하는 경우는 오히려 저렴하다.&nbsp;
  • 예약 인스턴스(reserved)&nbsp;: 1년이나 3년 동안 인스턴스를 약정해서 사용한다. 약정을 하면 더 저렴하게 인스턴스를 사용 할 수 있다.&nbsp;
  • 스팟(spot) 인스턴스&nbsp;: 아마존 인프라의 상황에 따라서 사용하지 않는 인스턴스가 많은 경우 가격이 스팟 인스턴스의 가격이 올라가고 적을수록 가격이 내려간다. 스팟 인스턴스의 가격이 어떤 가격보다 적으면 인스턴스를 사용하는 일종의 옥션과 같은 개념이다.&nbsp;&nbsp;

S3 ( Simple Storage Service )&nbsp;

  • 일종의 파일 서버, 어떠한 파일을 저장하고 저장된 파일을 필요한 사람에게 제공하는 서비스
  • 많은 사용자가 접속을 해도 이를 감당하기 위해서 시스템 적인 작업을 하지 않아도 된다.
  • 저장할 수 있는 파일 수의 제한이 없다.
  • 최소 1바이트에서 최대 5TB의 데이터를 저장하고 서비스 할 수 있다.
  • 파일에 인증을 붙여서 무단으로 액세스 하지 못하도록 할 수 있다.
  • HTTP와 BitTorrent 프로토콜을 지원한다.
  • REST, SOAP 인터페이스를 제공한다.
  • 데이터를 여러 시설에서 중복으로 저장해 데이터의 손실이 발생할 경우 자동으로 복원한다.
  • 버전관리 기능을 통해서 사용자에 의한 실수도 복원이 가능하다.
  • 정보의 중요도에 따라서 보호 수준을 차등 할 수 있고, 이에 따라서 비용을 절감 할 수 있다. (RSS)
  • 객체 : object, AWS는 S3에 저장된 데이터 하나 하나를 객체라고 명명하는데, 하나 하나의 파일이라고 생각하면 된다.
  • 버킷 : bucket, 객체가 파일이라면 버킷은 연관된 객체들을 그룹핑한 최상위 디렉토리라고 할 수 있다. 버킷 단위로 지역(region)을 지정 할 수 있고, 또 버킷에 포함된 모든 객체에 대해서 일괄적으로 인증과 접속 제한을 걸 수 있다.&nbsp;
  • 버전관리 : S3에 저장된 객체들의 변화를 저장. 예를들어 A라는 객체를 사용자가 삭제하거나 변경해도 각각의 변화를 모두 기록하기 때문에 실수를 만회할 수 있다.&nbsp;
  • BitTorrent : 분산된 파일 배포 시스템이라고 정의 할 수 있다. 여기서 분산이란 하나의 서버에서 파일을 배포하는 것이 아니라, 파일을 가지고 있는 컴퓨터들로부터 조금씩 파일을 다운 받은 후에 이것을 붙여서 완전한 파일을 만드는 방식이다. 대용량의 파일을 배포할 때 BitTorrent를 사용하면 비용을 크게 절감 할 수 있다.
  • RSS : Reduced Redundancy Storage의 약자로 일반 S3 객체에 비해서 데이터가 손실될 확률이 높은 형태의 저장 방식. 대신에 가격이 저렴하기 때문에 복원이 가능한 데이터, 이를테면 섬네일 이미지와 같은 것을 저장하는데 적합하다. 그럼에도 불구하고 물리적인 하드 디스크 대비 400배 가량 안전하다는 것이 아마존의 주장
  • Glacier : 영어로는 빙하라는 뜻으로 매우 저렴한 가격으로 데이터를 저장 할 수 있는 아마존의 스토리지 서비스

RDS ( Relational Database Service )&nbsp;

  • MySQL, Oracle, SQL Server 전용 서비스
  • 설치, 운영, 백업, 복제 등을 인프라에게 위임하는 서비스
  • 다중 AZ(Availabilty Zone) 복제 : 하나의 DB에 데이터가 쌓이면 AZ에 있는 데이터베이스 인스턴스에도 자동으로 똑같은 데이터가 쌓이는 것. --&gt; 서비스 장애가 발생하지 않도록 AZ 에 있는 DB가 자동으로 대체되어 서비스 유지하기 위한 목적이 크다.
  • 읽기 복제 (Read Replica) : DB를 Master(쓰기)/Slave(읽기)로 분산하는 것 --&gt; 한 대의 마스터 서버 부하를 줄이기 위한 목적이 크다.
  • 백업 자동화 : 갖고 있는 데이터를 정기적으로 저장 --&gt; 장애 상황(개발자 실수 등)에서 발생할 수 있는 문제를 해결하기 위한 목적이 크다.
  • DB 스냅샷 지원 : 현재 DB 상태를 스냅샷으로 이미지화 시키는 것(백업의 의미를 약간 지니고 있다.)
  • 프로비저닝된 IOPS : Input Output Per Seconds, 읽고/쓰는 속도 파악, RDS의 인스턴스를 만들 때, 속도를 지정해 줄 수 있다.
  • 미리 구성된 매개 변수 : 가장 빠른 기본 Setting 값 지원
  • CloudWatch를 이용한 모니터링(무료)

ElastiCache = Memcached

  • Cache : 오래 걸리는 작업의 결과를 <b>저장</b>해서 반복적인 작업의 시간을 단축
  • 시험을 볼 때 덤프를 외워서 문제를 푼다.
  • 웹 브라우저는 한 번 다운 받은 파일을 캐쉬해서 다음번 다운로드 시에는 컴퓨터에 저장된 파일을 사용한다.

![](https://slid-capture.s3.ap-northeast-2.amazonaws.com/public/capture_images/000107006c4943b3b770d72b4693060a/619c6c5a-30bc-4f20-9adb-4226f68c97df.png "AWS image")

  • Memcached
  1. 분산형 메모리 캐슁 시스템
  2. 서버/클라이언트 모델
  3. 무료
  • ElastiCache
  1. Memcached를 아마존 웹서비스 인프라 위에서 제공
  2. Memcached와 호환
  3. 즉시 캐쉬를 생성해서 사용할 수 있다.
  4. 캐쉬의 성능과 수량을 유연하게 변경 할 수 있다.
  5. 사용한 만큼만 지불하면 된다.
  6. 모니터링 제공

CloudWatch

  • AWS에서 동작하는<b> 애플리케이션</b>의 상태를 모니터링하는 도구
  • 애플리케이션 : EC2, RDS, ELB, ElastiCache와 같은 서비스를 의미
  • 모니터링 : 동작하는 머신의 CPU 점유율, 남은 메모리의 용량을 의미
  • Metrics : 서비스 카테고리
  • Alarm : 서비스 카테고리 안에 있는 각 서비스들에 대한 Threshold를 지정해서 특정 조건이 되었을 때, 사용자에게 알려주는 서비스

![](https://slid-capture.s3.ap-northeast-2.amazonaws.com/public/capture_images/000107006c4943b3b770d72b4693060a/b92e7b31-37a5-4e5b-813d-899396b361af.png "AWS image")

Route 53

  • AWS에서 제공하는 DNS 웹 서비스이다. 도메인과 관련된 다양한 서비스를 제공한다.
  • IP : 인터넷에 연결된 컴퓨터와 컴퓨터를 식별하는 주소로 전화로 비유하면 전화번호에 해당한다.
  • Domain : IP를 문자로 매핑하는 서비스, IP가 전화번호라면 도메인은 주소록에 기록된 친구의 이름이라고 할 수 있다.
  • DNS : Domain Name Server의 약자, 도메인에 해당하는 IP에 대한 정보를 가지고 있다가 도메인 주소에 대한 요청이 들어왔을 때 이에 해당하는 IP를 알려주는 서버, 전화로 비유하면 친구의 이름에 대한 전화번호를 알려주는 주소록이라고 할 수 있다.
  • 왜 사용할까?
  1. 고가용성과 안정성
  2. 확장성, 다른 Amazon Web Services와 연동이 쉽다
  3. 간편함, 신속함, 비용 효율성, 보안, 유연성

SQS ( Simple Queue Service )

  • 해야 할 일을 나중에 처리하거나, 다른 시스템이 처리 할 수 있도록 하기 위한 비동기 메시징 서비스.
  • SQS는 처리해야 할 업무에 대한 TODO 리스트와 같은 역할을 한다. 시스템에서는 이를 메시지라고 부른다. SQS는 이러한 메시지의 저장소다. SQS는 AWS에서 관리하는 서비스이기 때문에 이 시스템이 처리 할 수 있는 메시지의 양에 대해서 걱정하지 않아도 된다.

![](https://slid-capture.s3.ap-northeast-2.amazonaws.com/public/capture_images/000107006c4943b3b770d72b4693060a/acae820b-bc5a-47e8-81af-8296d90defb6.png "AWS image")

![](https://slid-capture.s3.ap-northeast-2.amazonaws.com/public/capture_images/000107006c4943b3b770d72b4693060a/94d542e5-172a-470e-a11a-73aadbea1d91.png "AWS image")

![](https://slid-capture.s3.ap-northeast-2.amazonaws.com/public/capture_images/000107006c4943b3b770d72b4693060a/d6158932-fbb4-4f57-a939-c3d8721f3a41.png "AWS image")

  • 사례 1)

Youtube를 AWS에서 구축한다고 해보자. Youtube는 대규모의 사용자가 전송하는 대용량의 데이터를 수신해서 처리해야 하는 서비스다. 이런 서비스는 여러개의 독립적인 시스템을 구축하고 각각의 시스템이 서로 협력하는 방식으로 구현하는 것이 보다 효율적이다. 예를들어 아래와 같은 시스템들이 있을 것이다.

  • 사용자가 업로드한 동영상을 수신하는 시스템 - 수신자
  • 업로드된 동영상을 전달 받아서 이를 인코딩하는 시스템 - 인코더
  • 인코딩이 끝났음을 업로더에게 이메일로 발송하는 시스템&nbsp; - 메일러

이러한 시스템들이 서로 협력하기 위해서는 서로의 진행상황을 공유해야 할 필요가 있다. 우선 수신자가 SQS 서비스에 업로드된 동영상을 추가한다. 인코더는 정기적으로 SQS를 확인한다. SQS에 추가된 동영상 파일이 발견되면 인코딩을 시작한다. 인코딩이 끝나면 SQS에 인코딩이 끝난 동영상을 추가한다. 메일러는 SQS에 인코딩이 끝난 동영상이 존재하는지 확인한다. 동영상이 발견되면 해당 동영상의 업로더에게 이메일을 발송한다.

  • 사례 2)

신규글을 작성하면 그 글을 구독하는 사람들에게 새로운 글이 작성되었음을 이메일로 알려야 하는 시스템이 있다. 그런데 신규글을 작성했을 때 모든 구독자에게 이메일을 발송한다면 구독자가 많은 글의 경우에는 매우 오랜시간 사용자를 대기하게 해야 할 것이다. 이런 경우 신규글이 작성되었을 때 신규글이 작성되었음을 SQS에 발행하고, 백그라운드에서 SQS를 처리하도록 하면 사용자의 대기 시간을 줄일 수 있을 것이다.

SDK - PHP

  • Software Development Kit의 약자로 특정한 소프트웨어나 플랫폼을 이용해서 소프트웨어를 개발할 때 이를 돕는 개발도구의 집합이다.
  • AWS SDK의 개념과 종류 : AWS를 프로그래밍적으로 제어하는데는 많은 노력이 필요하다. 이 중에서 반복되고, 재활용 가능한 부분을 AWS 측에서 미리 개발해서 제공하고, 개발자들은 자신들의 비즈니스에 집중할 수 있도록 미리 만들어져서 제공되는 도구들의 집합이 AWS SDK이다.
  • Java
  • Android, IOS
  • PHP
  • Python
  • Ruby
  • Window &amp; NET 등의 언어가 제공된다.
  • AWS PHP SDK : PHP를 이용해서 AWS를 프로그래밍적으로 제어하는 방법에 도움을 주는 라이브러리의 집합이다. 인증과 같은 작업을 직접 구현하려면 많은 노력이 필요한데 SDK를 이용하면 최소한의 코드로 목적을 달성할 수 있다. 아래 링크를 통해서 다운로드 받을 수 있다.

용어정리

  • Instance Type : 인스턴스는 한대의 컴퓨터를 나타내고 Instance Type은 컴퓨터의 사양을 의미한다.
  • Security Group : 보안 그룹으로 외부에서 인스턴스에 네트워크를 통해서 접근 할 때 어떤 포트를 허용할 것인지, 어떤 IP를 가진 시스템의 접근을 허용할 것인지를 지정한다. 그런데 Group라는 이름이 붙은 이유는 여러개의 인스턴스가 동일한 Security Group에 묶일 수 있기 때문이다. 이렇게 되면 Security Group의 설정을 변경하면, 이것을 공유하고 있는 인스턴스 모두의 보안 설정일 일괄 변경되기 때문에 관리하는데 편리하다. 이미 생성된 인스턴스의 Security Group은 변경 할 수 없다.
  • Region : 아마존 웹서비스는 전세계에 인프라를 두고 있다. 각 인프라는 지역적으로 서로 떨어져 있어서 가까운 지역을 대상으로 서비스를 제공하고 있다. 아래 그림은 AWS의 지역이 위치하고 있는 상태를 보여준다. 이 중에 노란색이 지역(region)이고 파란색은 에지(edge location)으로 데이터를 가까운 지역에 고속으로 전송하기 위한 일종의 캐쉬 서버들이다. 핵심적인 서비스는 Region에 위치한다.

![](https://slid-capture.s3.ap-northeast-2.amazonaws.com/public/image_upload/000107006c4943b3b770d72b4693060a/a0b1bfee-26ee-4b21-9e2d-ef991fd6b9f4.png "AWS image")

  • Availability Zone , AZ - 가용성 존 : 하나의 지역(region)에는 물리적으로 분리된 복수의 가용성 존이 있다. 물리적으로 분리되었다는 의미는 서로 다른 지역에 데이터 센터가 위치하고 있다는 의미다. 그러면서도 각각의 데이터 센터는 네트워크 상으로는 가까운 거리를 유지하고 있기 때문에 같은 지역(region) 내의 가용성 존에서는 데이터를 고속으로 전송할 수 있다.

'Cloud > AWS' 카테고리의 다른 글

AWS SageMaker  (0) 2021.04.08
AWS IAM ( Identify and Access Management )  (0) 2021.04.07
EC2-RDS-Connect  (0) 2021.03.31
개발 서버 환경 구축  (0) 2021.03.30
AWS Jupyter Notebook Server 구축  (0) 2021.03.29