- DB
- RDS
- DocumentDB
- DynamoDB
- Network
- Route53
- Certification Manager
- CloudFront
- Elastic Load Balancing (ELB)
- Virtual Private Cloud(VPC)
SQL ( RDBMS ) vs. NoSQL
AWS에서 RDBMS를 지원하는 서비스
DB 인스턴스는 클라우드에서 실행하는 격리된 데이터베이스 환경을 제공
( 별도의 DB 설치를 하지 않아도 됨 )
AWS Console을 통해 마우스 클릭으로 수분 내에 DB 생성이 가능
클라우드 내에서 RDS를 이용하면 DB 서버 실행도 가능하고, 액세스 관리도 가능
직접 시스템 로그인 불가능
( 직접 서버 내에 들어가는 것은 제공하지 않음 )
RDS 자체는 serverless가 아님

Primary instance, StandBy instance가 각자 다른 가용 영역(AZ)에 존재
( Primary에 장애가 발생해도 standby instance로 서비스를 지속시킬 수 있다 )
EBS : 데이터를 저장하는 역할
( AWS 웹 페이지에서 RDS를 검색 -> 데이터베이스 -> 데이터베이스 생성 )

DB 생성

템플릿
프리티어를 선택설정

연결
컴퓨팅 리소스
VPC
퍼블릭 액세스

데이터베이스 생성하기
완료 후 앤드포인트를 통해 접속 가능

RDS 이용 중, DB에 문제가 발생했거나 해결하기 어려운 상황이 발생하면
( 스냅샷을 통한 특정 시점으로 복원을 선택 )

MySQL Workbench
설치
https://dev.mysql.com/downloads/workbench/
Recommended Download로 들어가서 용량이 높은 것을 다운 받아야한다.
Workbench(MySQL Connections)로 DB에 접근
( 앤드포인트를 이용 -> 퍼블릭 액세스를 허용했기에 직접 접근이 가능 )

만일 연결이 안될시, 확인해봐야할 사항
퍼블릭 액세스가 허용되어 있는지?
인바운드 규칙에서 포트가 열려있는지? ( 이 경우 3306포트 )
열려있지 않다면 인바운드 규칙을 만들어 삽입
e.g.) 3306 포트 내의 모든 IP의 접근을 허용
NoSQL의 Document 형식 데이터베이스
MongoDB API 워크로드의 완전 관리 및 유연한 확장이 가능한 문서전용(Document) 데이터베이스
( MongoDB 기반의 작업을 수행할 때, Document DB를 선택 )
복제본을 최대 15개까지 추가하여 세팅 가능
( 대용량 데이터 처리 용이 )
데이터 복사본을 내부적으로 3개의 AWS 가용 영역(AZ)에 복제하여 보유하고 있음
( 가용성이 높음 )
기본적으로 JSON 데이터를 사용
유연한 인덱싱
Document DB에서 MongoDB를 연계하여 사용 가능
MongoDB는 오픈소스 Document 지향 데이터베이스
데이터 중복이 발생할 수 있지만 / 접근성과 가시성이 좋음
스키마 설계가 어렵지만 / 스키마가 유연해 다양한 데이터 수용이 용이
가장 큰 장점 : Scale-out이 쉽다
( 분산에 대한 솔루션을 자체 지원 )
확장시, Application을 변경하지 않아도 됨
RDBMS와 개념 차이

( AWS 웹 페이지에서 DocumentDB를 검색 -> 클러스터 -> 클러스터 생성 )

완전관리형 Key-Value 기반의 NoSQL 데이터베이스 서비스
Auto-Scaling
데이터가 쌓이면 쌓일수록 자동으로 용량이 증설됨
테이블 생성시 별도의 스키마 생성 작업이 필요 없음

Rows -> Itmes
각 Item 내부는 key-value 형태로 구성
Search할 수 있는 Partition Key
Sort할 수 있는 SorkKey
( AWS 웹 페이지에서 DynamoDB를 검색 -> 테이블 -> 테이블 생성 )

항목 생성 ( 수기로 데이터를 넣고 싶은 경우 )

조회
스캔 : Partition Key를 이용해 조회 가능
쿼리 : 다양한 조건을 통해 조회 가능

| Dynamo DB | Document DB |
|---|---|
| 모든 region에서 사용가능 | 특정 region에서만 사용가능 |
| IAM을 통해 DB에 대한 액세스 제어 | DB에서 user를 생성하고 관리, AWS는 이 영역에 관여하지 않음 |
| key-value 중심 | Documents 형식 |
| 하이퍼 스케일 (용량에 상관없이 서비스 이용) | 쉬운 확장(최대 64TB) |
가용성과 확장성이 뛰어난 DNS 웹 서비스
( 도메인을 관리해주는 서비스 )
주요 기능을 조합하여 실행 가능
도메인 등록
DNS 라우팅
상태 확인
public host zone / private host zone 존재
( 영역 별로 사용할 수 있는 도메인을 나누어서 제공 )
Route53 = DNS(네임서버) + 모니터링 + L4 + GSLB
( 이 4가지를 모두 지원 )
DNS를 찾아가는 과정

- End user가 특정 도메인(www.~)에 대해 요청
- 처음엔 글로벌하게 등록된 DNS root name server를 방문
- 지역쪽에 등록된 Name server를 방문
- 최종적으로 Local name server에 방문하여 DNS에 대한 주소를 받아옴
( 이런 도메인들을 등록하는게 Route53의 기능 )
( AWS 웹 페이지에서 Route53를 검색 -> 대시보드 -> 도메인 등록 )
도메인을 외부에서 구매하거나, AWS에서 구매해야 등록 가능

외부에서 도메인을 구매한 경우 등록하는 방법
DNS 관리 -> 호스팅 영역 생성
( 구매한 도메인을 등록 )

구매했던 곳(호스팅 업체)에서 등록된 네임 서버의 이름을 AWS의 라우팅 대상과 동일하게 변경

서브 도메인이 필요한 경우 생성하는 방법
( 호스팅 영역 -> 레코드 생성 )


다양한 인증서들을 AWS Certification Manager(ACM)에 등록해서
도메인 호출시, 인증서를 인증해주는 서비스를 제공
사용할 TLS/SSL 인증서를 AWS 계정으로 요청하거나 가져온다.
DNS 또는 이메일 검증을 통해 요청된 인증서의 도메인 소유권을 검증하여 인증서 발급을 완료한다.
다양한 AWS 서비스에서 새로 발급되거나 가져온 인증서를 사용한다.
( Elastic Load Balancing(ELB), Amazon CloudFront 등에서 SSL 인증서를 세팅 가능 )
Public key와 Private key 쌍을 보유
인증서를 얻으려면 서버에서 인증서 서명 요청(CSR)을 생성해야함
SSL 인증서 발급에게 보내는 CSR 데이터 파일에 Public key가 포함 됨
HTTPS의 자물쇠를 클릭하면 인증서의 발급 일, 발급 기관 등을 확인할 수 있음

이 인증서를 관리하는 것이 Certification Manager
인증서를 AWS 내에서 발급 받는 경우
( AWS 웹 페이지에서 Certification Manager를 검색 -> 인증서 -> 인증서 요청 )

외부에서 인증서를 가져오는 경우
( AWS 웹 페이지에서 Certification Manager를 검색 -> 인증서 -> 인증서 가져오기 )

CDN 서비스를 해주는 AWS 내의 서비스
특징
콘텐츠 전송 네트워크(CDN)는 데이터 사용량이 많은 애플리케이션의 웹 페이지 로드 속도를 높이는 상호 연결된 서버 네트워크
( 콘텐츠, 영상 등의 로딩, 처리 속도를 빠르게 해주는 서비스 )
정적 콘텐츠 & 동적 콘텐츠
캐싱 / 동적 가속 /엣지 로직 계산 기능

- 처음 방문자가 DNS를 요청
- DNS를 타고 CDN 서비스로 도착
- 이전에 받아두었던 컨텐츠가 있으면 다이렉트로 전달
( 원래 접속해야하는 Origin Server까지 가지 않고
CDN에서 Caching을 통해 빠르게 콘텐츠를 내려줄 수 있는 서비스 )-> 이 CDN 서비스를 해주는 게 AWS의 CloudFront
( AWS 웹 페이지에서 CloudFront를 검색 -> 배포 -> 배포 생성 )

ELB는 AWS의 Load Balancer
로드 밸런싱은 애플리케이션을 지원하는 리소스 풀 전체에 네트워크 트래픽을 균등하게 배포하는 방법
| L4로드밸런서 | L7로드밸런서 |
|---|---|
| Layer4 (Transport layer) | Layer7 (Application layer) |
| TCP/UDP 포트 정보를 바탕으로 함 | TCP/UDP 포트 정보 + HTTP 쿠키 정보 등 |
| 네트워크 단계에서 패킷을 나눠줌 | 애플리케이션 단계에서 로드를 분산, 더 섬세한 라우팅이 가능 |
| ( 상대적 가격이 더 저렴 ) | ( 비정상적인 트래픽을 사전에 필터링 ) |
- 대상 그룹에 대상을 등록
- 로드밸런서가 대상 그룹에 대해 각각의 대상으로 지정한 프로토콜, 포토 번호를 사용해 요청을 전송
( 로드 밸런서와 대상을 연결 )
( AWS 웹 페이지에서 EC2를 검색 -> 로드 밸런싱 -> 로드밸런서 )
대상 그룹 생성


로드 밸런서

Network Load Balancer
Application Load Balancer
-> 이번에 사용할 로드 밸런서

1단계: 로드 밸런서 구성
기본 구성 - 체계
리스너 - Load Balancer 프로토콜
HTTP인 경우 HTTP를 선택
Certification에 SSL 인증서가 등록된 경우 HTTPS를 선택
2단계: 보안 설정 구성
3단계: 보안 그룹 생성
4단계: 라우팅 구성
5단계: 대상 등록
트래픽 발생 시 모니터링 가능

사용자가 정의한 가상 네트워크로 AWS 리소스를 시작할 수 있음
데이터센터에서 운용하는 네트워크와 유사한 개념
클라우드 내의 VPC라는 가상의 네트워크 망을 구성해서 애플리케이션이나 서버를 관리할 수 있도록 함
VPC 구조

VPC Peering Connection : 각각의 VPC를 연결해주는 역할
VPC 내부에는 여러 가지 Subnet을 나누어 운영 가능
서브넷
서브넷은 VPC의 IP 주소 범위
서브넷은 단일 가용 영역에 상주
서브넷을 통해 다양한 리소스를 관리
IP 주소 지정
라우팅
서브넷 또는 게이트웨이의 네트워크 트래픽이 전달되는 위치를 결정게이트웨이 및 엔드포인트
게이트웨이 : VPC를 다른 네트워크에 연결
( VPC 내부에 게이트웨이가 존재 )
VPC 엔드포인트 : 인터넷 게이트웨이 또는 NAT 게이트웨이를 이용하지 않고 AWS 서비스에 비공개로 연결
피어링 연결
VPC는 여러 개로 나누어 운영 가능 -> Subnet
이를 VPC Peering Connection을 사용하여 연결
두 VPC의 리소스 간 트래픽을 라우팅한다.
트래픽 미러링
Transit Gateway
VPC 흐름 로그
VPC 연결
기존의 A Class, B Class, C Class, D Class 라는 IP 대역에 대해 나눠진 것을,
굳이 나누지 않고 이 CIDR (사이더)를 통해서 도메인 간 라우팅을 하는 기법
IP address

CIDR 표기법
어디까지 Network 영역으로 사용할지 나누는 표기법
즉, 어느 대역까지 IP를 쓸 수 있느냐를 표현
표기된 숫자만큼의 bit가 Network 영역, 그 외가 Host 영역
ex) 172.16.0.0 /24 -> 24가 CIDR 표기법

IP 주소 범위 선택
가용 영역(AZ)별 서브넷 설정
( Region 내부에 여러 AZ를 둘 수 있고, AZ 하나에 Subnet이 각각 들어갈 수 있음 )
인터넷으로 향하는 경로 만들기
VPC로부터의 트래픽 설정
e.g.)

VPC를 생성
CIDR표기법 : 172.31.0.0/16
-> Network영역이 16, Host영역이 16
Subnet 추가 : ap-northeast-2a, ap-northeast-2c
-> Network영역이 24, Host영역이 8
( Subnet의 CIDR 숫자가 더 작아선 안됨 16 < 24 )

EC2를 하나 만들면 내부적으로 보안을 강화하기 위해 Private subnet에 위치하게 됨
외부와 통신하기 위해선
Public subnet의 경우 Internet Gateway를 통해 자유롭게 통신
Private subnet의 경우 Direct 통신이 불가능하기에 public으로 넘어가서 통신을 해야함
인스턴스와 서비스를 하기 위해선
( AWS 웹 페이지에서 VPC를 검색 -> VPC -> VPC 생성 )

[ Private IP 대역 ]
10.0.0.0 ~ 10.255.255.255
172.16.0.0 ~ 172.31.255.255
192.168.0.0 ~ 192.168.255.255
VPC만을 선택할 경우, VPC 생성 후 Subnet 등도 별도로 생성해줘야함
VPC 등을 선택할 경우, 편리하게 한번에 생성 가능
NAT Gateway는 보통 탄력적 IP 주소가 설정이 된다.
( 고정 IP가 있어야 외부에서 포트 열어줄 때, 유용하게 사용 )