배포 (S3, EC2, RDS, Route53, CloudFront, ELB, ACM)

AWS를 활용하여 Keyplus 배포를 진행했습니다. 배포를 맡아서 했는데 무엇인지도 잘 알지 못한 채로 AWS의 기능들을 사용했었습니다. 지금에서라도 간단하게나마 각각이 무엇인지 알아보려고 합니다.

일부분 제가 이해한 대로 작성하였습니다. 정확하지 않을 수 있습니다.

AWS(Amazon Web Service)

배포를 위한 다양한 플랫폼(heroku, Firebase, Microsoft Azure 등) 중 AWS를 이용하여 배포를 진행해보았습니다.

AWS와 같은 클라우드의 서비스의 장점으로는 사용하는 만큼 비용이 발생하고, 컴퓨터 능력을 유연하게 조절 가능하고, 스냅샷(이미지)을 이용해서 다른 컴퓨터로 이주 가능하다는 점이 있습니다. 단점으로는 AWS(클라우드)에 종속되는 서비스를 사용하므로 AWS 상태에 따라 서비스가 영향을 받을 수 있습니다.

S3 (Simple Storage Service)

S3는 말 그대로 단순한 저장소입니다. (Google Cloud를 대표적인 예로 들 수 있습니다.)

  • 기본적으로 데이터를 무한히 저장할 수 있습니다.
  • 정적 요소인 이미지나 동영상을 가지고 있다가 제공합니다.

S3 사용 시 정적인 웹 사이트 호스팅이 가능합니다. (정적 파일 = 서버를 다루지 않는 파일)
따라서 프론트엔드 배포 시 사용합니다.

S3는 버킷이라는 곳에 정적 웹 사이트를 배포할 수 있는 공간을 제공합니다.

버킷은 쉽게 말해 파일을 담는 바구니입니다(최상위 디렉토리). S3의 모든 파일은 버킷에 저장되어야 하고 무한한 양을 저장할 수 있습니다.

버킷에 담기는 파일은 객체(키 + 값 형태)라 부릅니다. 파일과 메타 데이터로 구성되어 있으며, 모든 객체는 유일한 URL 주소를 가지고 있습니다.

EC2 (Elastic Compute Cloud)

EC2는 아마존의 대표적인 클라우드 서비스로, 가상의 컴퓨터를 하나 빌리는 것입니다.

AMI를 이용함으로써 구성하는 데 필요한 시간이 짧고, 필요한 용도에 따라 다양한 운영체제 선택이 가능합니다.

EC2를 활용하여 할 수 있는 가장 기본적인 일은 웹 서버 설치 및 서비스를 제공하는 것입니다.
따라서 백엔드 배포 시 사용합니다.

인스턴스는 EC2를 생성할 때 사용하는 단위로, 가상의 컴퓨터 1대를 의미합니다.

AMI는 소프트웨어 구성이 기재된 일종의 템플릿입니다. 운영체제 선택에 사용됩니다.
이미 만들어 놓은 AMI 템플릿을 이용하여 인스턴스를 생성해도 되고, 스스로 만들어 사용해도 됩니다.

-> AWS EC2는 AMI를 토대로 만들어진 가상의 컴퓨터를 하나 빌리는 서비스입니다.

RDS (Relational Database Service)

RDS는 AWS에서 제공하는 관계형 데이터베이스입니다.

RDS를 사용하면 EC2 인스턴스에 관계형 데이터베이스 엔진을 설치해서 데이터를 관리할 필요 없이 AWS가 대신 관리해주기 때문에 큰 편의성을 느낄 수 있습니다.

다양한 데이터 베이스 엔진(MySQL, ORACLE, PostgreSQL 등) 선택지를 제공합니다.

Route53

Route53은 AWS의 DNS 서비스입니다.

도메인 등록, DNS 라우팅, 리소스 상태 확인의 3가지 기능을 제공합니다.

즉, 사용자가 URL을 입력하고 나서 가장 먼저 만나는 서비스가 Route53입니다.

CloudFront

Amazon CloudFront는 .html, .css, .js 및 이미지 파일과 같은 정적 및 동적 웹 콘텐츠를 사용자에게 더 빨리 배포하도록 지원하는 웹 서비스입니다. 지연 시간이 가장 낮은 엣지 로케이션으로 요청이 라우팅되므로 가능한 최고의 성능으로 콘텐츠가 제공됩니다.

즉, CloudFront는 S3 앞에서 클라이언트 파일을 사용자에게 더 빠르게 제공하는 역할을 합니다.

ELB (Elastic Load Balancer)

ELB는 EC2 인스턴스 등 여러 대상에 걸쳐 수신되는 트래픽을 자동으로 분산합니다. 부하(Load)를 적절하게 분배해주는 장치입니다. (서버들에게 요청을 골고루 전달)

즉, ELB는 EC2 앞에서 백엔드의 부하를 줄여주는 역할을 합니다. 또, ELB를 이용하여 HTTPS로 배포를 할 수 있습니다.

ACM (AWS Certificate Manager)

ACM은 HTTPS를 위한 SSL 인증서를 발급해주는 서비스입니다.

AWS Architecture

AWS Architecture

프론트엔드(S3)와 백엔드(EC2)의 연결

프론트엔드(S3)와 백엔드(EC2)의 연결은 API 요청을 보낼 때 쓰는 백엔드 주소를 로컬 환경, 배포 자동화를 진행하지 않은 배포 환경에서 테스트 시에는 프론트엔드 측 코드의 .env로 관리하여 연결하였고, 배포 자동화 환경에서는 빌드 환경(CodeBuild)에서 환경 변수를 추가하여 연결하였습니다.

백엔드(EC2)와 DB(RDS)의 연결

백엔드(EC2)와 DB(RDS)의 연결은 데이터베이스 옵션(호스트, 포트, …)들을 로컬 환경, 배포 자동화를 진행하지 않은 배포 환경에서는 백엔드 측 코드의 .env로 관리하여 연결하였고, 배포 자동화 환경에서는 Parameter Store에 파라미터를 생성하여 연결하였습니다.

참고


Written by정선아
🌱 공부한 것을 기록하여 성장하기 위한 블로그입니다.

GitHubGmail