Back

/ 10 min read

AWS 기본 개념

AWS 수강한 유튜브 자료

비전공자도 이해할 수 있는 AWS 강의를 만들어봤습니다!

0. 배포와 네트워크 기초 개념

배포의 개념

aws-기본개념-01

  • 내 컴퓨터에서 개발하고 확인하는 localhost:8000은 “내 컴퓨터”에서만 접근이 가능하고, 다른 컴퓨터에서는 접근이 불가능한 주소임.
  • 내가 만든 프로그램을 다른 사용자들이 인터넷을 통해 사용할 수 있게 만드는 과정을 “배포” 라고 함
  • “배포”를 하게 되면 IP (ex. 124.16.2.1), 도메인 (ex. www.naver.com)와 같은 고유의 주소를 받게 되어 다른 컴퓨터에서 그 주소로 접속할 수 있게 됨

IP와 포트

  • IP = 특정 컴퓨터 자체의 주소 ex. 12.500.15.132 → 어떤 컴퓨터로 갈 지를 정하는 것
  • Port = 한 컴퓨터 내에서 실행되고 있는 특정 프로그램의 주소, 컴퓨터 안에 네트워크 통신을 하는 프로그램을 구분하는 번호. ex. 3000 → 내가 정한 컴퓨터의 어떤 프로그램으로 갈 지를 정하는 것.

예를 들어서 내 컴퓨터에서 실행되는 localhost:8000의 경우에는 aws-기본개념-02 내 컴퓨터의 8000번 포트에서 실행중인 서버로 접속한다는 뜻.

EC2 한 대에서 이러한 프로그램들이 실행중이라고 가정했을 때 aws-기본개념-03 192.0.2.10:3000 → 3000번 포트에서 실행중인 프로그램 192.0.2.10:8080 → 8080번 포트에서 실행중인 프로그램 192.0.2.10:3306 → 3306번 포트에서 실행중인 MySQL

브라우저에서 포트 번호 입력하지 않고, 원하는 서비스로 이동하는 이유는? 내가 원하는 서버와 통신을 할 때에는 IP, Port를 알아야 함. 하지만 왜 네이버에 접속할 때 www.naver.com 을 입력을 해도 네이버로 접속하게 될까? HTTP와 HTTPS에는 기본 포트가 정해져있음 (well-known port)

  • 22번 포트 : EC2 인스턴스에 연결할 때 사용하는 포트
  • 80번 포트 : HTTP로 통신을 할 때 사용하는 포트
  • 443번 포트 : HTTPS로 통신을 할 때 사용하는 포트

웹서비스 배포에 필요한 AWS

예를 들어서 사용자가 게시글을 작성하고 조회하는 웹사이트를 만든다고 한다면?

요구 사항AWS 서비스역할
백엔드 API 실행EC2요청을 처리하는 서버
사용자 및 게시글 데이터 저장RDS데이터베이스
프론트엔드 웹페이지 제공S3HTML, CSS, JS 등의 정적 파일 저장
웹페이지를 빠르고 안전하게 전달하기CloudFrontCDN, HTTPS 제공

aws-기본개념-04 이러한 요구 사항에 따라서 구조를 단순화해볼 수 있음. S3에서 받은 JavaScript 브라우저가 실행이 되고, 브라우저가 EC2의 API 에 별도로 요청을 하는 방식

1. EC2 : 백엔드 API 서버 배포하기

aws-기본개념-05

EC2 (= Elastic Computer Cloud)

  • “배포”를 하려면 내가 로컬에서 실행했던 것처럼 하나의 컴퓨터가 필요하게 됨
  • 물론 나의 컴퓨터에서 서버를 배포해서 다른 사용자들이 인터넷을 통해 서비스 접근을 하게 할 수도 있지만, 그러기 위해서는 내 컴퓨터가 24시간동안 켜져야 하고, 보안적으로 위험할 수 있음
  • 그래서 AWS에서는 EC2 라는 서비스를 팔고 있음 → EC2는 AWS에서 컴퓨터를 빌려서 원격으로 접속하여 사용하는 서비스를 말함. 그 외에도 오토스케일링, 로드밸런싱 등의 여러 부가 기능들을 사용할 수 있어서 배포 구성을 설계하기에 편하다.
  • 그래서 배포하는 방법들에 대해서 조금 더 정리해보자면..
    • 프론트엔드 웹페이지 (정적 웹사이트)를 배포할 때에는 Vercel, Nettify, Cloudflare, AWS S3를 사용 ..
    • 백엔드 서버를 배포할 때에는 AWS EC2, … 를 사용함

리전 (Region) 선택하기

  • AWS Region : AWS가 전 세계에 둔 데이터센터들의 위치를 함.
  • 그래서 EC2 (= 컴퓨터, 가상 서버)를 내가 만들게 되면, 그 서버는 내가 선택한 리전의 데이터센터에서 실제로 동작하게 됨
  • 데이터가 물리적으로 멀어질수록 응답이 느려짐. 그래서 만약 내가 만드는 서비스가 한국 사용자들이 주로 사용하게 되는 서비스라면 아시아 태평양 (서울) (ap-northeast-2) 리전을 고르면 된다.

인스턴스, 인스턴스 유형

  • 인스턴스 = EC2에서 빌리는 컴퓨터 한 대 (단위)
  • 인스턴스 유형 = 컴퓨터 사양
  • EC2에서 빌리는 컴퓨터 한 대 (단위)를 말함

2. RDS

RDS란?

  • MySQL, MariaDB 등의 관계형 데이터베이스 서비스를 AWS로부터 빌려서 사용하는 형태
  • EC2에 MySQL 을 직접 설치해서 운영하면 안 되는지?
    • EC2에다가 MySQL을 직접 설치해서 사용해도 되기는 함. (개인 플젝을 하면서 비용이 부담되는 경우)
    • 실제 서비스 운영할 때에는 하나의 EC2에 백엔드 서버와 MySQL을 같이 사용하지 않음
    • 예를 들어 백엔드 서버 장애로 인해서 EC2 컴퓨터가 죽게 되면 MySQL도 같이 죽게 되니까, RDS를 주로 사용함

EC2, RDS간의 아키텍처

  • EC2와 RDS간의 아키텍처

    aws-기본개념-06

중요한 점은 EC2 인스턴스 안에 있는 백엔드 서버가 RDS에 직접적으로 요청을 보내는 흐름으로 사용이 됨

3. 웹서비스 배포하기 (S3, CloudFront)

S3와 CloudFront

S3 : 파일 저장도 되지만, 정적 웹 사이트 호스팅도 가능함. CloufFront : AWS에서 컨텐츠(파일, 동영상 등)를 빠르게 전송해주는 서비스를 말함. CloudFront를 일반화하여 CDN이라 말하기도 함 aws-기본개념-07 CloudFront가 있기 전에는 컨텐츠를 전송받을 때 Origin Server에서 받아와야 했음 → 거리에 따라 늦게 받을 수도 있었음. CloudFront가 있으면, Origin Server 를 바로 거치지 않고 중간 중간 임시 저장소(CDN)를 많이 둔 다음에 사용자가 컨텐츠를 받아야 할 때, 중간 임시 저장소 중에서 가장 가까운 곳에서 컨텐츠를 받아옴

  • 컨텐츠를 전송 받는 성능을 향상시키기 위해 사용할 수 있고
  • HTTPS를 적용하려면 CloudFront를 사용해야 함
  • 보안을 좀 더 강화할 수 있다고 함

S3, CloudFront의 아키텍처

출처 : https://aws.amazon.com/ko/blogs/networking-and-content-delivery/amazon-s3-amazon-cloudfront-a-match-made-in-the-cloud/ aws-기본개념-08 흐름 : 웹사이트 하나를 열어서 컨텐츠를 가져올 때