[AWS] 아키텍처

김주언·2022년 6월 21일
0

TODO LIST

목록 보기
15/18
post-thumbnail

웃지마.. 정들어..

AWS 서비스 사용

  • EC2
  • 오토스케일링 그룹
  • 로드밸런서
  • 라우트 53
  • 일라스틱 빈스톡

지금까지 만든 투두 리스트는 내 로컬 서버에서 돌려서 서버를 끄면 서비스가 중단된다.
하루종일 이 어플을 돌려줄 서버가 필요하다~~


서비스 아키텍처

1. 아키텍처 개요

  1. 프론트엔드 서버의 주소 입력

  2. 프론트엔드 서버에 연결된 애플리케이션 로드밸런서를 거쳐서 로드 밸런서에 연결된 오토스케일링 그룹 내부의 EC2 인스턴스 중 하나에 트래픽 전달

  3. EC2 인스턴스 내부에서 실행 중인 프론트엔드 애플리케이션이 브라우저에 리액트 애플리케이션 반환

  4. 사용자는 TODO 리스트 화면 사용 가능

  5. 사용자의 로그인 시도

  6. 백엔드 서버의 애플리케이션 로드밸런서를 통해 백엔드 애플리케이션에 사용자의 아이디와 패스워드 전달됨

  7. 백엔드 애플리케이션은 MySQL과 통신하여 데이터 주고받음

위를 수행하기 위해서 라우트53, 로드밸런서, 오토스케일링 그룹, EC2 등을 사용한다.



2. 리소스

2.1 EC2

Elastic Compute Cloud. 일종의 서버 컴퓨터

로컬 환경에서 (localhost) 애플리케이션 실행한 것처럼 EC2에서 애플리케이션 실행 가능
EC2에서 앱 실행하면 EC2의 IP 또는 EC2가 제공하는 퍼블릭 도메인 이용하여 서버에 접근한다.

각 서버는 IP주소를 가지고 각 앱은 특정 포트에서 실행된다 (예를 들어 80포트)
그러면 http://localhost:8080/todo 대신에 128.29.30.2/todo 를 사용해서 REST API 사용 가능

128.29.30.2/todo 이걸 어째 사이트 주소로 쓰라는 소리묘??
→ 그래서 DNS 쓰는거다,,,


2.2 Route 53 - DNS

네트워크에 연결된 모든 컴퓨터는 IP주소를 가진다. 즉, 모든 서버는 자신만의 IP 주소를 가지는 것. 그래서 서버와 통신하기 위해서는 IP주소를 알아야하는 것이다. 근데 naver.com 이런거는 어떻게 서버와 통신이 되어서 접속이 바로 되는건지??

인간이라 IP주소 기억 못하겟음 → 서버마다 이름 붙여주자..
이렇게 서버에 붙여준 이름을 도메인 이름이라고 한다. 그리고 IP주소와 도메인 이름을 매핑해놓은 시스템을 DNS (Domain Name System )라고 하는 것

그런데 나는 DNS를 쓴 적이 없는데 🤷🏻‍♀️ ?
→ 브라우저가 DNS에 도메인 이름을 물어보고 IP를 가져오는 작업을 알아서 해주고 있었음..!
컴퓨터는 자신의 IP말고도 DNS 서버의 IP 또한 가지고 있고, 이 DNS 서버 IP는 대부분 인터넷 서비스 제공자 (ISP, Internet Service Provider. SK텔레콤, KT 등) 회사들이 제공해줌.

그래서 ISP가 제공하는 DNS 서버에 내가 가고싶은 서버의 IP 주소가 없으면 또 다른 DNS 서버들을 뒤져보는거다... 내가 가고싶은 서버의 IP를 찾을 때까지...

여기서 "다른 DNS 서버들" 중 하나가 AWS의 Route 53이다~~

Route 53을 이용하면 도메인을 만들고 이를 내가 지정한 IP에 매핑해줄 수 있다. 그러면 어떤 IP에 지정하느냐면? EC2 인스턴스의 IP인거다...
그러면 app.zueon.link에 접속할 때마다 애플리케이션에 실행 중인 EC2로 라우팅된다.

으아아 즐겁다~ 🥹


2.3 애플리케이션 로드밸런서

서버 하나로 서비스를 운영한다고 가정하자.
프론트엔드 서버가 EC2 인스턴스 (A)에서 실행되는 중이고 1초당 백만개의 요청을 처리한다고 하자. 그런데 어느날부터 초당 2백만개의 요청이 들어오기 시작하면 서버를 확장해야한다.
그래서 EC2 인스턴스 (B)를 하나 더 실행한다. 총 2개의 서버를 가지게 되었다.

그런데 EC2 인스턴스 B는 도메인이 연결이 안되어 있어서 있으나마나가 된다

트래픽을 분배해주자 ^^ ...

트래픽 분배를 위한 소프트웨어 또는 하드웨어를 로드밸런서라고 한다.
로드밸런서의 기본적인 기능은 트래픽을 균일하게 분배해주는 것. AWS가 제공하는 로드밸런서를 사용하면 된다~~


2.4 오토 스케일링 그룹

로드밸런서에 EC2 인스턴스 2개를 연결했을 때, 이렇게 연결된 인스턴스들을 AWS에서는 타겟그룹이라고 한다.

오토스케일링 그룹은 말 그대로 자동으로 스케일링 해준다는 것
ASG에 최대, 최소, 적정 인스턴스 수를 지정할 수 있다. 그러면 ASG이 적정 인스턴스 수만큼 인스턴스를 실행시킨다.

예를 들어 적정 인스턴스 수가 2개이고, 최소 인스턴스 수도 2개다. 만약 하나의 인스턴스가 다운되면 로드밸런서가 ASG에 이를 알려준다. 그러면 ASG는 자동으로 다운된 인스턴스를 제거하고 새 인스턴스를 실행시키는 것

백엔드와 프론트엔드 서버를 각각 그룹으로 묶어줄 것이다..


2.5 VPC & 서브넷

VPC는 사용자의 AWS 계정 전용 가상 네트워크
가상 네트워크이기 때문에 특별하게 설정해주지 않는 이상 이 가상 네트워크 내부에서 생성되는 EC2는 외부에서(인터넷, 다른 AWS 계정 등) 접근이 불가능하다.

결론적으로 EC2는 다른 사용자의 접근이 불가능한 독립적인 가상 네트워크에 존재하고, VPC의 소유자만이 인터넷이나 클라우드를 통하여 접근이 가능하다. 그래서 Virtual Private Cloud

VPC 내부에는 서브넷이 여러개 존재할 수 있고, 서브넷이 어떻게 설정되었느냐에 따라서 서브넷 아래의 EC2의 IP가 결정된다.

그런데.. 이런 인프라를 직접 만들어주기...
너무 귀찮다!!!!

일라스틱 빈스톡이 환경구축을 해준다 ^^


2.6 일라스틱 빈스톡

일라스틱 빈스톡에 내가 사용할 리소스들을 알려주면 알아서 환경을 만들어준다.

일라스틱 빈스톡은 내부적으로 AWS 클라우드 포메이션을 사용한다. 클라우드포메이션은 JSON이나 YML 파일을 인풋으로 받는데, 이 설정파일에 원하는 리소스와 리소스간의 관계를 적어준다. 그러면 그 설정 파일을 읽어서 일라스틱 빈스톡이 인프라를 구축하는 것이다.. 이렇게 코드로 인프라를 묘사하고 서비스가 이를 반영하여 인프라를 구축하는 것을 IaC라고 한다.(Infrastructure as Code)

서버리스 프레임워크랑 비슷하다

profile
학생 점심을 좀 차리시길 바랍니다

0개의 댓글