AWS에 대해서

2020/03/24

이전에 AWS에 대해서 블로깅 한 것이 있지만 턱없이 부족한 내용이라서 오늘은 AWS의 여러가지에 대해서 기본적인 것들만 알아보려고 한다.
혼자서 이해한 것을 바탕으로 작성하기 때문에 아직 많이 부족하여 틀리거나 다른 부분이 있을 수 있습니다. 항상 따끔한 충고와 가르침을 기다리고 있습니다.

AWS의 등장

AWS(Amazon Web Services)의 등장으로 온프레미스(On-premise)는 사라지기 시작했다. 온프레미스란 기업의 서버를 클라우드 같은 원격 환경에서 운영하는 것이 아닌, 자체적으로 전산실 서버에 직접 설치해 운영하는 방식을 말한다. 온프레미스는 클라우드 컴퓨팅 기술이 나오기 전까지는 기업 인프라 구축의 일반적인 방식이었다. 기업의 비지니스 정보를 보안성 높게 관리할 수 있다는 장점이 있지만, 시스템을 구축하는데 있어서 많은 시간과 비용이 든다는 것이었다. AWS의 등장으로 많은 기업들이 오프프레미스(Off-premise) 즉 클라우드 방식의 서비스를 채택하게 되었다. 오프프레미스는 기존의 방식인 온프레미스 방식보다 보안에 취약하다는 단점이 있습니다.

IDC를 Cloud로 대체

IDC란 Internet Data Center로 “우리가 서버를 보관해 줄테니, 빌려쓰고 대여료만 내” 라고 하는 서비스이다. 서버를 보관할 수 있는 공간과 네트워크를 묶어서 판매하였습니다. 정전과 자연재해 등 예상치 못한 사고에 대해서 피해를 최소화 할 수 있고, 전문가들이 관리하기 때문에 믿을 수 있었다. 다만, IDC에서 공간과 서버를 대여해주는 것의 비용이 비싸다는 것이다.

이런한 니즈를 충족시키고자 호스팅 업체들이 나타났다. IDC에서 서버를 많이 빌려서, 다시 쪼개어 조금씩 나누어 판매하는 것이다. 하지만 이것 역시 싸지 않다. IDC에서는 월 단위 또는 반년, 1년 단위로 계약을 진행했다. 하지만 반년 안에 서비스를 접을 수도 있고, 일시적으로 서비스가 큰 규모로 커질 수도 있고, 줄어들 수도 있는데, 위약금을 생각하면 선뜻 구매하기 힘들다.

이 때, 클라우드 서비스가 나타났다. 당시에는 이용로를 한시간 단위로 청구하였고, 트래픽이 적게 나오는 시간대에는 적은 사용만큼 적은 이용를 내고, 트래픽이 많이 나오는 경우는 서버가 늘어난 만큼 이용료가 결산되는 시스템이었다.

클라우드 서비스의 핵심은 On-Demand Service이다. 알기 쉽게 말하자면 주문형 서비스라고 표현할 수 있다.

EC2(Elastic Compute Cloud)

독립된 컴퓨터를 임대해주는 AWS의 대표적인 서비스이자 상품

모든 AWS는 EC2가 기반이다. 말 그대로 클라우드 가상 서버. 쉽게 설명하자면, AWS는 직접 컴퓨터를 사지 않고도 아마존이 가지고 있는 서버용 컴퓨터들의 자원을 사용자가 원격으로 사용할 수 있게 해주는 서비스.

S3(Simple Storage Service)

S3는 높은 내구성과 높은 가용성을 저렴한 가격으로 제공하는 인터넷 스토리지 서비스.

S3의 가장 큰 특징은, 객체 스토리지(Object Storage)

객체 스토리지는 내부 복제를 전제로 한다. 하나의 단위 객체가 업로드되면 자동적으로 여러 위치에 복제본을 생성한다.

S3에는 버킷(Bucket)과 객체(Object)로 불리는 단위가 있다. 객체는 파일 및 파일정보로 구성된 저장 단위이고, 버킷은 다수의 객체를 통합하여 저장, 관리, 제어하는 일종의 바구니(container)라고 생각할 수 있다. 이 바구니를 생성한 AWS계정은 버킷의 소유자가 되고, 이 소유자는 버킷 단위로 각종 기능을 활성화/비활성화하거나 버킷 내 객체의 접근제어 정책을 관리할 수 있다.

CloudFront

전 세계에 배치된 Edge location을 이용하여 효율적인 컨텐츠 배포 구조를 제공하는 것.

CDN이란?

  • 컨텐츠를 배포하기 위해 최적화된 네트워크
  • 컨텐츠서버를 중심으로 여러 곳에 분산 배치한 서버를 통해 효율적으로 컨텐츠를 배포하는 구조
  • 일종의 컨텐츠를 위한 캐싱

예를 들어, 서울에 컨텐츠의 서버가 있다. 미국에서 이 컨텐츠를 이용하기 위해서는 약 10000km를 이동하여 컨텐츠를 배포해야하지만, 미국에서 컨텐츠 서버를 배치한다면 직접 컨텐츠를 제공받을 수 있는데, 이러한 구조를 CDN이라고 한다.

ECS(Elastic Container Service)

Docker 컨테이너를 지원하는 확장성과 성능이 뛰어난 컨테이너 관리 서비스

ECS에는 두 가지의 방식이 있는데 EC2와 Fargate이다.

  • EC2 : 자신이 관리하는 EC2 인스턴스에서 Container를 실행할 수 있는 유형이다. 가상서버에 컨테이너가 올라간다. 컨테이너가 죽더라도 관리를 해준다는 의미
  • Fargate : 클러스터 및 작업노드를 관리할 필요없이 작업정의만을 등록해 Container를 실행할 수 있는 유형이다. 그냥 컨테이너만 올려라. 가상서버가 죽을 수도 있는 것을 방지한다. Auto Scaling도 알아서 해주고, provisioning이 없다. Host OS가 추상화된 개념이다. 오로지 컨테이너만 신경쓴다.
auto scaling : 유저가 늘어나 트래픽이 높아짐에 따라 서버를 늘려줌
provisioning : 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해 두는 것을 말한다.(부팅시간의 의미?)

RDS(Relational Database Service)

관계형 데이터베이스를 서비스로 제공하는 제품, MariaDB, MySQL, PostgreSQL, Oracle등을 직접 다루지 않고 AWS에서 제공해준다.

레디스(Radis)

Radis(REmote Dicionary Server)는 메모리 기반의 “key : value” 구조 데이터 관리 시스템이며, 모든 데이터를 메모리에 저장하고 조회하기 빠른 Read, Write 속도를 보장하는 비 관계형 DB이다.

String, Setm, Sorted Set, Hash, List 5가지의 데이터 형식을 지원. 하지만 String을 권장한다.

처리속도가 빠르며, 데이터는 메모리와 디스크에 저장되어 불의의 경우에도 데이터 복구가 가능하다. 저장소 메모리의 재사용이 없고, 명시적으로만 데이터 제거가 가능하다.

VPC(virtual public cloud)

vpc에 대해서 알아보기 전에 IP에 대해서 알아보겠다.

IP(Internet Protocol address)

컴퓨터 네트워크에서 장치들이 서로를 인식하고 통신을 하기 위해서 사용하는 특수번호. 네트워크에 연결된 장치가 라우터이든 일반 서버이든, 모든 기계는 이 특수한 번호를 가지고 있어야한다.

IP의 특징

하나의 IP는 네트워크 부분과 호스트 부분으로 구성

하나의 네트워크, 즉 하나의 도메인에 있는 IP끼리 통신하기 위해서는 네트워크 영역이 같아야하고 호스트IP는 달라야한다.

네트워크 영역이 다르다고 해서 통신을 못하는 것은 아니다. 라우터나 게이트웨이와 같은 통신장비를 통해 통신할 수 있다.

다만 라우터와 네트워크 장비 없이 통신할 수 있는 영역을 브로드캐스트 도메인이라고 하고, 하나의 네트워크 영역에는 당연히 네트워크 영역은 같고, 호스트 IP는 다른 호스트 IP와는 다르다. 호스트 IP는 주민번호와 같은 것!!

예를 들어,

192.168.0.3 / 192.168.0.4 192.168.0 은 네트워크 영역 3 / 4 는 호스트 영역

  • 192.168.0의 네트워크 영역에서 서로 통신할 수 있는 3과 4가 존재

v4 & v6

1. v4

숫자로 구성된 인터넷 공인 주소. 현재 우리가 사용하고 있는 IP이다.

  • IP주소는 32bit체계이고, 8bit 씩 4개의 옥텟(Octet)으로 구성
  • Network ID(해당 컴퓨터가 소속된 네트워크에 배정된 이름) 와 Host ID(해당 컴퓨터 한대에 배정된 이름)으로 구분한다,
  • IP 주소는 5개(A~E)의 등급으로 나눈다.
  • 현재 인터넷에서는 A, B, C등급이 주소로 사용한다.

A클래스는 하나의 네트워크가 가실 수 있는 호스트 수가 제일 많은 클래스 IP주소를 32자리 2진수로 표현했을때, 맨 앞자리 수가 항상 0 인 경우가 바로 A클래스입니다.

A클래스는 8bit를 네트워크 아디로 씀. 0xxx xxxx. xxxx xxxx.xxxx xxxx.xxxx xxxx 0.0.0.0 ~ 127.255.255.255 까지

B클래스는 반드시 10으로 시작. 16bit를 네트워크 아디로 씀. 10xx xxxx.xxxx xxxx. xxxx xxxx.xxxx xxxx 128.0.0.0 ~ 191.255.255.255

C클래스는 반드시 110으로 시작. 24bit를 네트워크 아디로 씀. 110x xxxx.xxxx xxxx.xxxx xxxx. xxxx xxxx 192.0.0.0 ~ 223.255.255.255

2. v6

128bit 주소 체계로 이루어져있다, 기존의 v4보다 4배나 많은 정보를 수용할 수 있는 차세대 IP.

public IP & private IP

1. publick IP

공인IP를 말한다. 인터넷 상에서 서로 다른 pc끼리 통신하기 위해 필요한 IP로써, 홈페이지 서버 구축, 각자의 pc에 인터넷을 연결하는 것 등의 인터넷을 통한 통신을 하기 위한 IP이다. 공인IP는 각 나라들 마다 관리하는 기관이 있다.

공인IP는 세상에서 단 하나뿐인 IP를 뜻한다,

<종류> A class : 1.0.0.0 ~ 126.255.255.255 B class : 128.0.0.0 ~ 191.255.255.255 C class : 192.0.0.0 ~ 223.255.255.255

  • 사설 IP 대역은 제외

2. private IP

사설IP를 말한다, 내부 네트워크 상에서 각 컴퓨터간 통신을 하기 위한 IP로 외부망인 인터넷과 연결이 되는 IP는 내부망을 구축할 때 활용하는 IP. 가장 흔하게 볼 수 있는 예는 공유기를 활용한 망 구성이다. 보통은 192.168.x.x로 구성되어있다. 사설IP는 내부망에서만 사용되기 때문에 서로 다른 내부망에서는 동일한 사설IP 이더라도 상관이 없다.

<종류> A class : 10.0.0.0 ~ 10.255.255.255 B class : 172.16.0.0 ~ 172.31.255.255 C class : 192.168.0.0 ~ 192.168.255.255

VPC란?

VPC 전에 VPN 먼저

VPN(Virtual Private Network) 한마디로 정의하고자 한다면 “가상 사설망”, 말 그대로 실제 사설망이 아니라 가상의 사설망이다. 네트워크A와 B가 있다면, 실제로는 같은 네트워크상에 있지만 논리적으로는 다른 네트워크 인 것 처럼 동작한다.

VPC(virtual Private Cloud)

AWS 네트워크 망안의 사용자 전용의 사설 네트워크 망을 말한다. 내부에 subnet이라는 구분된 그룹을 포함하고 있다. VPC를 사용하면 아래 사진과 같이 각 사용자가 논리적으로 완전히 분리된 네트워크망을 가질 수 있어 독립적인 설정이 가능하다. EC2 생성 후 VPC는 변경이 안된다. 따라서 VPC를 먼저 만들고 시작하는 것이 좋다.

VPC는 private 클라우드를 만드는 가장 기본이 되는 리소스이다.

서브넷(subnet)

서브넷은 말그대로 부분망이라는 뜻. IP 주소에서 네트워크 영역을 부분적으로 나눈 부분망. 부분 네트워크를 뜻한다. 서브넷마스크는 IP주소 체계의 네트워크 ID와 호스트 ID를 분리할 수 있게 해준다.(IP들이 같은 대역대인지 다른 대역대인지를 구분시키기 위한 것.)

  • VPC의 IP 주소 범위를 말한다.(실제로 리소스가 생성될 수 있는 네트워크)
  • AWS 리소스들을 특정한 subnet에서 실행할 수 있다.
  • public 인터넷에 연결을 하기 위해서는 public subnet을 이용해야한다.
  • private subnet은 인터넷에 연결되지 않는다 public : 172.16.0.0 ~ 172.16.127.255 private : 172.16.128.0 ~ 172.16.255.255

하나의 VPC는 n개의 subnet을 가질 수 있고, 그 최대 크기는 VPC의 크기와 같다.

서브넷 마스크(Subnet Mask)

IP주소는 IP클래스에 의해 분리되는 Network PrefixHost Number로 분리된다. 서브넷 마스크에 의해 이루어지는 서브넷팅은 이 Host Number를 Subnet Number와 서브넷안에서 식별되는 Host Number로 다시 분리한다.

서브넷 마스크의 형태는 IP주소와 같이 32bit 2진수이다. 서브넷 마스크의 목적은 IP주소와 AND연산하여 Network 부분의 정보를 걸러내는 것이다.

클래스 A를 예로 들어서 116.81.97.8일 경우 클래스 A의 서브넷 마스크는 255.0.0.0이다. 이것을 2진수로 변환했을 경우 나오는 것이 116.0.0.0이다. 이것이 네트워크 ID이다. 나머지는 Host를 구별해주는 Host ID부분이다.

IP 주소 뒤에 /24 같은 표시가 있는 것도 있는데, 이는 서브넷마스크의 bit수를 의미한다. 예를 들어 클라스 A의 서브넷 마스크는 8개의 bit가 1로 되어 있기 때문에 /8이 붙는다.

192.168.3.19/24 는 네트워크 ID가 192.168.3.0이고 서브넷 마스크가 255.255.255.0 이라는 뜻.

굉장히 쉽게 설명을 해보도록 하겠다.

IP v4는 32bit이다. 32개의 2진수로 이루어져있다는 말이다.

먼저 255.255.255.255는 256는 2의 8승(0~255)이다. 따라서 2의 8승은 2진수가 8자리라는 뜻이다. 2의 5승은 2진수가 5자리라는 뜻

1.1.1.1 -> 0001.0001.0001.0001 255.255.255.255 -> 1111 1111.1111 1111.1111 1111.1111 1111

다른 예로 192.0.0.0/24 는 24개의 2진수는 묶어두고 나머지를 사용하겠다는 뜻

그렇다면 /24라는 것은 0000 0000.0000 0000.0000 0000.0000 0000 중에서 가장 뒤에있는 0000 0000 빼고는 다 고정이라는 뜻

따라서 192.0.0.0/24는 192.0.0.xxxx xxxx 라는 뜻.

/30은 32자리의 2진수 중에 30개를 묶어둔다는 것. 바꿀 수 있는 경우의 수를 생각해보면 앞에 고정된 것은 생략하고

1111 1100 1111 1101 1111 1110 1111 1111 총 4가지의 경우의 수

/29는 8개의 경우의 수가 나온다

/31은 2개의 경우의 수가 나온다

/28은 16개의 경우의 수가 나온다

/24는 256개의 경우의 수가 나온다

31 -> 2 (2의 1승) 30 -> 4 (2의 2승) 29 -> 8 (2의 3승) 28 -> 16 (2의 4승) 2의 배수로 증가한다.

따라서 /24는 2의 8승으로 256개의 경우의 수가 나오게 되고, IP를 256개 만큼 나눠줄 수 있다는 것이다.

라우트 테이블(Route Table)

서브넷과 연결되어 있는 리소스. 서브넷에서 네트워크를 이용할 때, 라우트 테이블을 사용해서 목적지를 찾게 된다. VPC가 생성될 때 만들어지고, VPC에도 연결되어 있다. 이러한 라우트 테이블은 VPC가 속한 서브넷을 만들 때 기본 라우트 테이블로 사용된다.

  • 하나의 라우트 테이블은 다수의 서브넷에서 사용할 수 있다.
  • 자동 생성되는 라우트 테이블에는 한 가지의 룰만 정의되어있다. VPC의 블럭을 목적지로 하는 경우 타깃이 local인 규칙.

    VPC CIDR블럭이 172.31.0.0/16 일 때, 네트워크 안에서 목적지가 172.31.0.0/16 범위에 있는 리소스를 찾는다면 VPC내부에서 찾게된다. 이 규칙은 삭제할 수 없고, 인터넷을 연결하거나 다른 VPC와 통신하기 위해서는 라우트 테이블에 라우트 규칙을 추가적으로 정의해야한다.

인터넷 게이트웨이(IWG: Internet GateWay)

VPC는 격리된 네트워크 환경. VPC에서 생성된 리소스들은 기본적으로 인터넷을 사용할 수가 없다. 이 때, 인터넷에 연결을 하기 위해 필요한 것이 IWG이다. 하지만 서브넷과 IWG를 연결하는 것만으로는 인터넷을 사용할 수 없다. 인터넷을 사용하고자 하는 리소스는 public IP를 가지고 있어야한다. 그 때 밖에서 접근할 수 있는 선을 하나 만들어야하는데 그것이 바로 IWG!

  • VPC에 IGW를 붙이면 public, 아니면 내부 private

VPC 끼리는 연결이 안된다. 이 부분의 해결을 위해서는 피어링을 해야한다.

ACL(Network ACL) & SG(Security Group)

  • ACL

    • 주고(outbound) 받는(inbound) 트래픽을 제어하는 가상 방화벽.
    • 하나의 ACL은 다수의 서브넷에서 재사용가능하다.
    • 서브넷 앞단에서 트래픽을 제어하는 역할
  • SG

    • 인스턴스의 앞단에서 트래픽을 제어하는 가상 방화벽
    • ACL의 규칙을 통과하더라도 SG의 규칙을 통과하지 못하면 통신하지 못 한다.

ACL과 SG 이 두 가지 리소스를 통해서 안전한 네트워크 환경을 구축할 수 있다.

DNS(Domain Name System)

도메인 이름을 네트워크 주소로 바꾸거나 그 반대로 할 수 있도록 하기 위한 시스템. 한마디로 DNS 서비스는 도메인에 연결된 IP주소를 알려준다.

Route 53 은 AWS에서 제공하는 DNS이다

  • Public Host Zone과 Private Host Zone이 있다.
  • Public Host Zone은 일반 네임서버로 글로벌하게 동작한다.
  • Private Host Zone은 AWS내에서만 동작한다.
  • Route53 : 53 포트
  • http : 80 포트
  • https : 433 포트

LB(Load Balancer)

AWS에서 Load Balancer는 세가지의 타입이 있다.(classic, application, network)

로드밸런서를 사용해야하는 이유

  • 유저의 트래픽을 인스턴스에게 분배하기 위해서
  • Single point of access(DNS)를 앱에 제공하기 위해서
  • 인스턴스의 실패를 커버하기 위해서
  • health check를 하기 위해서
  • SSL(HTTPS) 통신을 지원하기 위해서
  • 쿠키를 이용하기 위해서
  • high availability를 지원하기 위해서
  • public과 private의 트래픽을 분리할 수 있기 때문

로드밸런서와 탄력적 IP를 사용할 때, 매번 IP가 바뀌는 문제가 발생하기 때문에, 로드밸러스가 Target Group을 바라보게 한다. 인스턴스의 속까지 바라보게 하는 것이 아니라 타겟그룹을 바라보게 하고, 이는 인스턴스의 ID를 바라보는 것이다.

ALB(Application Load Balancer)

라우팅 요청 처리를 URL 기반 룰을 통해 할 수 있다. HTTP, HTTPS 헤더 기반 트래픽 최적화, 패킷 감사 등의 기능도 제공 SG가 필요하다.

IaaS PaaS SaaS CaaS FaaS

IaaS : 인프라

PaaS(AWS는 Pass) platform - EC2

SaaS : 소프트웨어 - BT

CaaS : 컨테이너(container) - ECS —> Fargate / (EKS)

FaaS : Function

ECS & Fargate

PaaS인 EC2는 과거 기술이다!!! 따라서 CaaS인 ECS와 Fargate를 쓸거다.

앞서 알아봤듯이 ECS는 Docker 컨테이너를 지원하는 확장성과 성능이 뛰어난 관리 서비스이다.

EC2를 사용하지 않고 Fargate를 사용하면, 클러스터 및 작업노드를 관리할 필요없이 작업정의를 등록하여 container를 실행할 수 있게 한다.

가상 서버는 필요없고, container만 올리면된다. 이 방식의 장점은 가상서버 자체가 죽을 수도 있는 것을 방지하고, Auto Scaling을 지원하고, provisioning이 없다. Host OS는 추상화된 개념이고, 오로지 container에만 신경을 쓴다.

먼저 예를들어, 쿠팡에는 배송, 주문 등 container가 엄청 많다. 그래서 이 container들 자체를 클러스터로 한번에 묶어서 사용하게 된다.

클러스터 생성

클러스터 안에는 여러가지가 있지만 크게 서비스, 작업, 예약된 작업 등이 있다. 서비스(계속 해서 작업을 한다)로 띄울 친구, 작업(한 번 작업을 하고 잠을 잔다)으로 띄울 친구, 예약된 작업(특정한 시간에 작업할 친구)으로 띄울 친구 등이 있는 것이다.

이러한 container들을 효율적인 관리를 위해서 작업정의를 진행한다.

작업정의

이러한 작업정의를 하기위해서는 container를 가져와야하는데 그 때 필요한 것이 ECR(S3)이다. 도커이미지를 가져옴으로써 작업정의를 하고 클러스터에 띄우게 된다.

논리적 개념인 클러스터

클러스터는 논리적인 개념이다.

VPC --- subnet --- EC2
     |         --- fargate
     |
     |
     -- subnet --- EC2
클러스터에서 저기에 있는 fargate를 관리할거야

Jotang
Written by@Jotang
일상과 배운 것을 기록합니다.

GitHub