TIL | AWS (ELB, RDS, Route 53, DNS ...)

·2023년 8월 3일

TIL # WIL

목록 보기
42/65

23.08.03

1. Elastic Load Balancer

1-1. Scalability (확장성) vs Availability (가용성)

가용성
ex. 어느 한 시스템에서 고장이 났을 때 서비스가 중단되지 않고 다른 데이터 서비스에서 이어서 끊김없이 서비스를 제공할 수 있게 하는 것을 고가용성이라고 함
=> 즉, 안정적인 서버를 계속 유지하기 위해서는 고가용성이 중요함

확장성
수평적 확장 : 인스턴스나 서버, DB 등을 여러개로 늘리는 것 => 즉, 인스턴스의 개수를 늘리는 것
수직적 확장 : 인스턴스는 하나인데 성능을 높이는 것

1-2. ELB

ELB (Elastic Load Balancer) : AWS에서 제공하는 로드 밸런싱 서비스로, 다수의 EC2 인스턴스를 사용하여 트래픽을 분산

로드밸런서를 쓰는 이유

  • 요청 분산 (EC2와 연동)
  • 단일 액세스 포인트 공개 (Route 53과 연동) => naver.com 이라면 naver.com이라는 하나의 액세스 포인트만 공개 (즉, 주소 DNS와 연관)
  • 인스턴스에 대한 헬스 체크 => 어느 인스턴스가 살아있나
  • HTTPS 제공 (ACM과 연동) => HTTP로 보안이 되어있지 않은 웹사이트에 HTTPS를 제공
  • 고가용성 제공
  • 공개 트래픽(ex. user)과 내부 트래픽(ex. EC2) 분리

ELB 종류

  1. Application Load Balancer : OSI 모델 7계층에서 동작하며, HTTP/HTTPS 트래픽을 처리. 또한, 컨테이너화된 애플리케이션과 연동하여 사용할 수 있음 (URL, Query String 이런 걸 기준으로 컨텐츠의 요청을 보냄)
  2. Network Load Balancer : OSI 모델 4계층에서 동작하며, TCP/UDP 트래픽을 처리. 높은 처리량을 필요로 하는 애플리케이션에 적합
  3. Classic Load Balancer : OSI 모델 4~7계층에서 동작하며, HTTP/HTTPS, TCP/UDP 트래픽을 처리. 가장 오래된 형태의 로드 밸런서이며 요즘에는 Application Load Balancer나 Network Load Balancer를 사용하는 것이 좋음
  4. Gateway Load Balancer : 다른 방화벽이나 써드 파티의 어플리케이션들을 갖다가 사용할 때 사용하면 적합

그렇다면 Application Load Balancer의 특징은 ?

  • HTTP 요청을 여러 타깃 그룹에 나눠줄 수 있음
  • 한 머신 안이라도 여러 어플리케이션(컨테이너)에 나눠 줄 수 있음
  • HTTP/2와 웹소켓을 지원
  • HTTPS로 리다이렉트 지원
  • URL, hostname, query string, header에 기반해서 다른 타깃 그룹(ex. EC2)으로 보낼 수 있음

1-3. SSL과 HTTPS

SSL(Secure Sockets Layer) : 인터넷 상에서 정보를 안전하게 전송하기 위한 프로토콜 => 전송되는 데이터를 암호화하여 정보의 안전성을 보장.

TLS(Transport Layer Security) : SSL을 보완한 기술로 현재는 사실 SSL이 아니라 TLS 기술이다. => 그러나 모두가 아직까지 SSL이라고 부르고 있는 것

user들이 load balancer에 올 때는 https 통신으로 오고
load balancer에서 EC2 갈 때는 가상 사설망이기 때문에(= 외부 진입을 막아놓고 내부에서만 오고가기 때문에 = 도청당할 수 없기 때문에) http 통신도 괜찮음


2. Relational Database Service

2-1. RDS

RDS : SQL을 쿼리 언어로 사용하는 관계형 DB를 위한 서비스
ex. Postgres, MySQL, MariaDB, Oracle, Microsoft SQL service ...

EC2 상에 DB만들기보다 RDS가 나은점 (장점)

  • RDS는 DB를 위한 인프라를 자동으로 구축(provisioning), 업데이트
  • 지속적인 백업과 복구 기능 지원
  • 모니터 대시보드 지원
  • 성능향상을 위한 read replicas 지원
  • Disaster Recovery를 위한 multi AZ 지원
  • 수평/수직 확장성 지원
  • EBS 백업 지원

(단점)

  • 하지만 SSH로 접속 불가능 => 즉 터미널로 접근이 불가함

RDS가 지원해주는 기능

  1. Storage Auto Scaling : DB 용량의 한계치까지 왔을 때 자동으로 용량을 늘려줌
  • 사용을 위해 Maximum Storage Threshold를 지정해줘야 함 (이거 이상을 넘어가지마라 !)
  • 예측불가능한 트래픽이 있을때 유용 (ex. 이벤트가 있어 사람들이 글을 어마어마하게 쓸 것 같다 !)
  1. Read Replicas : 읽기 전용 복제품
  • read replica는 오직 SELECT문만 가능 INSERT, UPDATE, DELETE는 불가능! => 즉, CRUD에서 R만 가능, CUD는 불가능
  1. Multi AZ : 서버(어플리케이션)가 RDS와 write와 read를 하다가 다른 AZ에 그대로 옮기는 것(= 백업) => 이렇게 되면 RDS에 만약 화재같은 사고가 나도 다른 Multi AZ에 백업되어있는 것이 있어서 계속 서버를 유지할 수 있음 ! (= 즉, 가용성이 높음 !!!)
  • 가용성을 높여줌
  • 확장성을 높여주지 않음 (확장성과는 관계 없음)
  • 수동으로 설정할 필요가 없으
  • read replica도 multi az로 쓰일 수 있음

3. Route 53

3-1. DNS

DNS(Domain Name System) : 인터넷에서 사용되는 컴퓨터나 기기들의 주소를 '도메인 네임'으로 변환하여 IP 주소를 가져오는 것 (일반 사용자들이 IP 주소를 외우고 기억하는 건 어렵기 때문에 ...)

Q. 그렇다면 여기서 도메인 네임이란 ?
A. URL (ex. naver.com ...)

DNS 계층 구조
만약 URL이 http://www.naver.com 라고 한다면 ?

  • Root Level : ""
  • Top Level Domain : .com
  • Second Level Domain : naver
  • Subdomain : www
  • Protocol : http

=> 즉, DNS 서비스는 계층적으로 구성된 분산 시스템 => 이 계층 구조에서는 Root DNS Server, TLD DNS Server, SLD DNS Server가 각각의 역할을 수행

  1. Root DNS Server : DNS 계층 구조에서 가장 상위에 위치한 DNS 서버
  • 모든 DNS 쿼리는 먼저 Root DNS Server에 도착하여 해당 도메인의 TLD(Top-Level Domain) DNS Server의 주소를 알아내야 함
  • Root DNS Server는 인터넷 상에서 전 세계에 총 13개가 운영되고 있으며, 이들은 전 세계의 인터넷 서비스 제공 업체들에 의해 운영
  1. TLD DNS Server : 도메인 이름의 최상위 레벨에 해당하는 .com, .net, .org, .kr 등의 TLD를 관리하는 DNS 서버
  • 모든 도메인 이름은 하나 이상의 TLD에 속하며, TLD DNS Server는 해당 도메인 이름이 속한 SLD(Secod-Level Domain) DNS Server의 주소를 알려줌
  1. SLD DNS Server : 도메인 이름의 중간 레벨에 해당하는 DNS 서버
  • 도메인 이름의 중간 레벨에 해당하는 부분은 일반적으로 사용자가 만든 이름이며, SLD DNS Server는 해당 도메인 이름에 대한 IP 주소를 반환

=> 즉, 정리해보면 Root DNS Server는 인터넷에서 가장 상위에 위치, TLD DNS Server는 도메인 이름의 최상위 레벨을 관리, SLD DNS Server는 중간 레벨을 관리
=> 이들은 모두 인터넷 사용자가 도메인 이름을 입력하여 해당하는 웹 사이트나 이메일을 찾을 때 중요한 역할을 수행

=> 사용자가 브라우저를 통해 도메인 이름을 입력해서 웹 사이트를 찾을 때마다 Local DNS가 Root DNS나 TLD DNS나 SLD DNS를 다 거쳐서 IP 주소를 가져오는 것은 너무 비효율적이기 때문에 Local DNS와 브라우저에서도 캐싱이 일어나서 기억하고 있는 것은 저장하고 있다가 바로바로 알려줌 !

+) Route 53은 TLD DNS Server + SLD DNS Server


+) nslookup은 name server 관련한 조회를 할 수 있는 명령어
그래서 아래 223.130.200.107를 주소창에 입력하면 naver.com으로 이동하게 됨

nslookup naver.com
// 223.130.200.107

nslookup google.com
// 142.250.76.142

3-2. 왜 53인가 ?

Q. Route 53에서 53은 무엇일까 ?
A. 53은 통신에 사용되는 프로토콜 중 하나인 DNS에서 사용하는 기본 포트 번호, 기본적으로 TCP와 UDP를 사용하며, TCP 53번 포트와 UDP 53번 포트를 사용

3-3. IPv4v6, 레코드타입, TTL

IPv4 vs IPv6

IPv4 : 인터넷 프로토콜(IP) 주소 체계, 32비트로 구성된 주소 체계로, 최대 약 43억개의 IP 주소를 사용 가능
ex. 192.168.0.1

하지만, 인터넷 사용자의 증가로 인해 IPv4 주소가 부족해지는 문제가 발생 => 이에 따라, IPv6가 등장 !

IPv6 : 새로 등장한 인터넷 프로토콜(IP) 주소 체계, 128비트로 구성된 주소 체계로, 약 340경개의 IP 주소를 사용 가능
ex. 2001:0db8:85a3:0000:0000:8a2e:0370:7334

쉽게 비유하자면 핸드폰 번호가 11자리에서 30자리로 늘어났다고 생각하면 됨

IPv6는 IPv4에 비해 주소 고갈 문제 해결과 보안성, 기능 면에서도 개선됨

레코드타입

  • A 레코드: 호스트네임과 'IPv4 주소'를 연결
  • AAAA 레코드: 호스트네임과 'IPv6 주소'를 연결
  • CNAME 레코드: 호스트네임을 다른 호스트네임과 연결, 다른 호스트네임은 반드시 A 혹은 AAAA 레코드가 있어야 함
  • NS 레코드: 호스트존의 네임서버를 지정

+) 호스트존은 주소록, public 호스트존은 도메인 네임의 IP 주소를 가리키며, private 호스트존은 사설망 내부에서 사용
+) 또한, SOA 레코드는 메타 데이터를, NS 레코드는 네임서버 정보를 담고 있음

CNAME vs Alias
CNAME과 Alias 모두 DNS 레코드의 유형으로 두 레코드는 호스트 이름을 다른 호스트 이름에 매핑하는 데 사용하나 용도는 다름

  • CNAME 레코드 : 이전에 정의된 호스트 이름의 모든 레코드를 복사하여 새 호스트 이름에 할당.
    이는 호스트 이름이 변경되었거나 호스트 이름이 서로 다른 IP 주소를 가리키도록 하려는 경우에 유용.

CNAME은 루트 도메인이 아닌경우에만 적가능
(ex app.mydomain.com - O, http://mydomain.com - X)

  • Alias 레코드 : 호스트 이름을 AWS 리소스(ex. Amazon S3 버킷, Elastic Load Balancer, Amazon CloudFront ...)에 매핑.
    이를 통해 AWS 리소스에 대한 DNS 레코드를 만들 수 있음. Alias 레코드는 Amazon Route 53에서만 지원

TTL
TTL(Time to Live) : DNS 레코드가 캐싱될 수 있는 최대 시간을 나타내는 값(= 캐싱을 얼만큼 오래 할 것인가) TTL이 높을수록 DNS 레코드가 캐싱될 수 있는 시간이 더 길어지므로, 캐시 효율성은 높아짐

0개의 댓글