본문 바로가기

개발인생다반사/TIL(Today i learned)

TIL - 211201 [배포] Amazon Web Service

Achievement Goals

  • Cloud와 Deployment의 의미를 각각 알고, 내 코드를 남에게 배포할 수 있다.
    • 클라우드 컴퓨팅이 무엇인지 설명할 수 있다.
    • 애플리케이션 배포가 어떻게 변화되어 왔는지 이해할 수 있다.
  • AWS의 각 서비스가 어떤 목적에 부합하는지 이해할 수 있다.
    • S3의 목적과, 정적 웹 사이트 배포 방법을 이해할 수 있다.
    • EC2의 주요 용어를 이해할 수 있다. (AMI, 인스턴스, 인스턴스 유형, 스토리지 타입, 퍼블릭/프라이빗 IP)
    • EC2의 인스턴스 시작/중지/종료에 대해 이해할 수 있다.
    • RDS와 EC2에서의 MySQL 사용이 어떻게 다른지 이해할 수 있다.
    • CloudFront의 목적을 이해할 수 있다. (Advanced)
    • 로드 밸런서 중 ELB, 그 중에서 Application Load Balancer의 목적을 이해할 수 있다. (Advanced)
    • Route 53의 목적을 이해하고, 도메인을 연결해 HTTPS로 배포할 수 있다. (Advanced)
  • 배포 시 발생하는 문제를 이해하고 고칠 수 있다.
    • 서버를 프로세스로 작동시키고, 로그를 확인할 수 있다.
    • 빌드 및 배포시 필요한 환경 설정을 할 수 있다.

CAPTER - Amazon Web Service

1. Cloud Computing

데이터 센터에서는 서버의 자원과 공간, 네트워크 환경을 제공한다. 이러한 환경을 '온프로미스'라고 부른다.

클라우드는 서버가 필요할 때마다 컴퓨팅 능력을 유연하게 조절하고 사용한 만큼의 요금만 지급

또한 컴퓨터의 스냅샵(이미지)을 이용해 다른 컴퓨터로 즉시 이주가 가능하다.

다만 클라우드 서버를 사용하면 클라우드 서비스에 종속되어 서비스가 영향을 받을 수 있다.

 

SaaS(Software as a Service) : 클라우드 제공자가 사용 가능한 소프트웨어를 제공하는 경우

PaaS(Platform as a Service) : 클라우드 제공자가 데이터 베이스, 개발 플랫폼까지 제공하는 경우

IaaS(Infrastructure as a Service) : 클라우드 제공자가 가상 컴퓨터까지 제공하는 경우

 

AWS는 IaaS에 가깝다.

 

2. Deploy

배포: 개발한 서비스를 사용자가 이용가능하게 하는 과정

Development: 각자의 컴퓨터에서 코드를 작성하고 테스트 하는 과정. 실제 데이터를 이용하지 않고 더미 데이터를 이용해서 테스트

Integration : 각자의 컴퓨터에서 작성한 코드를 합치는 과정

Staging: 실제 출시단계인 Production단계와 가장 유사한 환경에서 테스트 진행. 서비스와 관련된 부서 혹은 인원의 확인과정을 거침

Production: 개발된 서비스를 출시하는 단계.

 

배포에서는 환경 설정을 코드와 분리하는 것이 중요하다.

작성한 코드가 다른 환경에서 정상 작동할 수 있게 하려면

- 상대경로를 사용

- 환경변수(envvars 혹은 env) 설정

- Docket와 같은 개발 환경 자체를 통일 시키는 솔루션 사용

 

애플리케이션의 모든 설정이 정상적으로 코드 바깥으로 분리되어 있는지 확인할 수 있는 간단한 방법은 어떠한 인증정보도 유출시키지 않고 코드가 지금 당장 오픈 소스가 될 수 있는지 확인하면 된다.

 

3. EC2

Amazon EC2(Elastic Compute Cloud)

AWS에서 제공하는 클라우드 컴퓨팅 서비스. AWS에서 원격으로 제어할 수 있는 가상의 컴퓨터 한 대를 빌리는 것.

클라우드 컴퓨팅은 인터넷(클라우드)을 통해 서버, 스토리지, 데이터베이스 등의 컴퓨팅 서비스를 제공하는 것이다.

Elastic = 탄력(신축성) 있는, 유연한 / 후불제 PC방 처럼 사용한 만큼 비용을 지불하는 탄력적인 서비스 또한 성능, 용량도 자유롭게 조절 가능. 인스턴스는 1대의 컴퓨터를 의미하는 단위이고 AWS에서 컴퓨터를 빌리는 것을 인스턴스를 생성한다고 한다.

 

AMI(Amazon Machine Image) 는 소프트웨어 구성이 기재된 템플릿이다. 단순히 OS만 깔려있는 템플릿도 있고 특정 런타임이 설치되어 있는 것도 있다.

 

4. RDS

RDS(Relational Database Service) : AWS에서 제공하는 관계형 데이터 베이스 서비스

1) EC2 인스턴스에 관계형 DB 엔진을 설치해서 데이터를 관리할 때와 2) RDS를 통해 데이터를 관리할 때 차이가 있다.

1번은 DB설치 관리, 백업 등은 사용자가 직접해야 하고 2번은 AWS에서 해준다.

 

5. S3

S3(Simple Storage Service)

클라우드 스토리지: 인터넷 공간에 데이터를 저장하는 저장소

확장성, 강력한 내구성, 99.99% 가용성 보장, 다양한 스토리지 클래스(Standard[일반적, 데이터에 자주 액세스 해야할 경우], Glacie[데이터 장기보관 목적, 비용 저렴]r 클래스)

 

S3사용시 정적 웹사이트 호스팅 가능

정적 파일: 서버의 개입 없이 생성된 파일. 

동적 파일: 클라이언트가 서버에 요청을 보내면 서버가 그 요청에 맞추어서 그 자리에서 생성한 파일]

 

웹호스팅: 서버의 한 공간을 임대해 주는 서비스.

S3에서는 버킷이 사용자들이 정적 웹 사이트를 배포할 수 있는 공간을 제공. 버킷이라는 저장 공간에 파일을 업로드하고 정적 웹사이트 호스팅 용도로 구성하면 정적 웹사이트를 배포할 수 있다. 여기서 버킷은 저장되는 파일들이 담기는 바구니이다. 그리고 버킷에 담기는 파일을 객체라고 부른다. S3 저장소에 데이터를 저장할 때 키-값 페어 형식으로 데이터를 저장한다.

 

6. 배포 전략

(1) Client Application 배포

AWS에서 제공하는 S3를 통해 작성한 client 코드를 사용자들에게 제공할 수 있다. 클라이언트 앱을 정적 파일로 빌드하여 배포한다.

빌드는 불필요한 데이터를 업애고, 통합/압축하여 배포하기 최적화된 상태를 만드는 것이. 데이터 용량이 줄어들고 웹사이트 로딩 속도가 빨라진다.

 

일반적으로 빌드는 소스 코드를 실행가능한 번들로 변환하는 컴파일 과정을 의미힌다.  웹 앱은 배포 가능한 정적 파일 형태로 만들어줘야 한다. asset 자체가 정적인 경우는 그대로 배포하면 된다. React의 경우 npm run build를 통해서 정적 파일 형태로 변환하고 배포한다.

 

ASW를 통해 원격지 사용자에게 서비스를 제공하기 위해서 AWS의 CDN 서비스인 CloudFront를 이용한다.

 

(2) Server Application 배포

AWS EC2를 사용한다. RDS를 이용해서 DB를 사용할 수 있다. RDB 서비스를 이용하여 EC2를 통해 배포된 server application의 데이터를 저장, 제공하는 DB 배포할 수 있다.

 

마지막으로 AWS에서 제공하는 Route53 서비스를 이용하면 직관적인 도메인 주소를 통해서 서비스에 접근할 수 있게 한다.

 

AWS을 통한 처리 프로세스

1. 서버 배포 (EC2)

  • EC2 콘솔을 통해 EC2 인스턴스를 생성해야 합니다.
  • 간단한 서버 애플리케이션을 생성하고 EC2 인스턴스에 코드를 배포해야 합니다.
  • 서버를 실행시키고 브라우저에서 서버에 접속할 수 있어야 합니다.

2. 클라이언트 배포 (S3)

  • S3 콘솔을 통해 버킷을 생성해야 합니다.
  • 클라이언트 파일을 빌드하고 결과물을 버킷에 업로드 해야 합니다.
  • 정적 웹 호스팅 기능을 이용하여 클라이언트 코드를 배포해야 합니다.

3. 데이터베이스 연결 (RDS)

  • RDS 콘솔을 통해 RDS 인스턴스를 생성해야 합니다.
  • 로컬 터미널 혹은 EC2 인스턴스가 실행되고 있는 터미널을 통해 RDS 인스턴스에 연결해야 합니다.

 

Sprint - 프론트엔드 배포

1. S3 호스팅 Hands-on

정적 웹 사이트 호스팅 과정

1. 정적 웹 페이지 빌드

2. S3 대시 보드에 접속하여 버킷 생성 및 생성한 버킷을 정적 웹사이트 호스팅 용으로 구성

3. 빌드된 정적 웹 페이지 업로드

4. 퍼브릭 엑세스 차단 해제 및 정책 생성, 버킷정책(다른 사용자의 접근 권한 부여)

 

1. 정적 웹 페이드 빌드

빌드: 작성한 코드의 불필요한 데이터를 없애고 통합 및 압축하여 배포하기 이상적인 상태를 만드는 과정. 빌드 과정을 통하여 데이터 용량이 줄어줄고 웹사이트의 로딩 속도가 빨리기 된다.

Sprint - 데이터베이스 연결

1. RDS 인스턴스 생성/연결 Hands-on

(1) DB 인스턴스 생성

(2) DB 연결