S3, EC2, RDS

ys_sung blog·2020년 11월 3일
0

Intro Deployment

  • deployment란 무엇인가?
    • 내 코드를 다른 컴퓨터 위에서 돌려서, 그 서비스, 서버, 클라이언트에 우리의 고객들이 접속할 수 있게 하는 것
    • 내 컴퓨터에서 했던 것처럼 npm install을 하거나 package.json을 확인하는 방법과는 다르다
    • 노드 버전도 모르고, dependencies도 모르는 등 배포환경에 대한 정보는 제한적
    • 실제 production이 배포되는 과정은 생각보다 복잡하다
      • 크게 4단계로 나뉜다: development, integration, staging, production
      1. development: 실제 개발단계, 지금까지 배운 것들, 코드쓰고 테스트하는 것을 로컬에서
      2. integration: 원래 있던 서비스와 충돌하진 않는지, 팀원과 코드를 합쳤을 때 충돌하지 않는지, 지금만든 기능이 다른 기능을 침범하지 않는지를 확인하는 과정
      3. staging: 합쳐진 코드를 배포환경과 가장 유사한 단계에서 다시 한번 테스트(일종의 준배포)
      4. production: 실제 배포
    • 배포된 서비스는 노드버전, dependencies, port number, hostname, urls and file paths, api keys 등이 잘 설정되어야 한다(ex-경로를 절대주소로 쓰지 말것 / package.json에 필요한 dependencies를 잘 명기할 것)
    • 배포 플랫폼: 스프린트에선 AWS 활용

Intro Deploy Strategy

  1. 싱글페이지 앱을 static serve하기 위한 전략(SPA serve strategy)
  • 리액트 : build 스크립트를 사용해서 수많은 js를 하나로 포장
    • 이 파일을 어떻게 serve?
      • build 파일 서브를 위한 cloud : Amazon S3(스프린트에서 활용)
        • 앱스토어에서 앱을 다운 받는 형식과 유사
        • S3의 버킷주소는 파일을 담을 수 있는 주소
        • 그 주소에서 js, html, css 파일을 다운로드
      • node.js + Express의 static file serve 활용
  1. API를 요청할 수 있는 서버애플리케이션을 배포하는 전략(Server Application deploy strategy)
  • 로컬에서 작업할 때는 리액트 → localhost:xxxx // node.js → localhost:yyyy
  • But ****외부인이 내컴퓨터에게 들어오게 해서는 안된다.
  • 외부 컴퓨터를 빌려야 한다 → Amazon EC2
  • Amazon EC2에 있는 컴퓨터에 노드 설치하고 그 위에 서버 애플리케이션을 올려서 구동
  • Amazon EC2란? 원격접속할 수 있는 컴퓨터 가상머신(그냥 다른 컴퓨터)
    • 실제로 아이피가 있고, 그 주소를 할당받은 것
  1. 데이터베이스
  • AWS RDS 서비스 활용(데이터베이스 설정의 고된 과정을 거치지 않기 위함)

Deploy Sprint Architecture

1.Bare minimum(스프린트 수준)

  • 리액트 — 노드(+익스프레스) — MySQL
  • 우리의 전략 :
    1. 리액트는 static file을 제공하는 클라우드 서비스(S3)를 사용해서 리액트 빌드파일을 서브하는 버켓 셋업
    2. 그 버켓에서 클라이언트 애플리케이션을 받아간 유저가 접속할 수 있는 EC2 구축
    3. EC2에 있는 노드 어플리케이션이 배포된 데이터베이스에 접속할 수 있도록 설정(요청을 할 때 필요한 데이터는 RDS ****라고 하는 데이터베이스 인스턴스에서 쿼리함)
  1. Advanced
  • 큰 틀에선 변함없지만, https라고 하는 웹사이트를 만들기 위한 무언가를 해야함
  • 이 스프린트에서 하긴 어렵지만, 프로젝트 진행하면서는 한번 시도해볼만함
  • 복잡한 얘기(나중에 필기)
  1. Nightmare
  • 이게 뭐야..(나중에 필기)
  • 프로젝트 때에도 구축하기 어려울 수도
  • 있다는 것을 아는 것은 좋다
  • 배포의 세계도 어렵구나

Study AWS with Pair

  • S3, EC2, RDS를 각각 조사한다

    • S3(Simple Storage Service) : 핵심개념 → 버킷,

      • 파일 서버 역할을 하는 서비스 → 트래픽 같은 문제를 걱정하지 않아도 된다
      • 인터넷을 위한 저장공간. 웹 어디에서든 데이터를 저장하고 다시 꺼내올 수 있다. AWS management 콘솔을 이용해서 기능들을 사용할 수 있다.
      • 파일을 저장하려면 버킷에 그것을 객체의 형태로 업로드해야 한다
      • 버킷이란: 객체를 담는 그릇. 하나 또는 그 이상의 버킷을 만들 수 있다. 객체형태의 파일을 그룹핑한다. 각각의 버킷에 접근권한을 설정할 수도 있다.
      • https://docs.aws.amazon.com/AmazonS3/latest/gsg/GetStartedWithS3.html 가이드문서
    • EC2(Amazon Elastic Compute Cloud) : 핵심개념 → 이미지

      • '안전하고 크기 조정이 가능한 컴퓨팅 용량을 클라우드에서 제공하는 웹 서비스입니다.'
      • 클라우드 컴퓨터 : 직접 물리적인 서버 시설을 갖추기보다 인터넷으로 접근해서 사용할 수 있는 서버, 가상의 컴퓨터를 빌리는 것,
      • 이미지(아마존 머신 이미지): EC2는 이미지에 실제 컴퓨터처럼 프로그램을 깔 수도 있고 파일을 저장할 수도 있는데 그 기능을 제공하는 것? 이미지를 사용해서 애플리케이션, 라이브러리, 데이터 등의 설정을 한다.
      • https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/concepts.html 가이드문서
    • RDS(Amazon Relational Database) : 핵심개념 → DB 인스턴스

      • 관계형 데이터베이스를 설치, 운영, 확장할 수 있는 서비스
      • 용량을 제공하고 공통적인 데이터베이스 작업을 관리한다
        • 백업, 소프트웨어 패치, 장애감지 등의 기능
        • MySQL, MariaDB, PostgreSQL, Oracle 및 Microsoft SQL Server 같은 데이터베이스 제품을 사용
        • DB 인스턴스 : DB 인스턴스 안에 사용자가 만든 여러 데이터베이스가 포함된다
        • AWS Command Line Interface / Amazon RDS API / AWS Management 콘솔을 사용해 DB 인스턴스를 생성하고 수정 가능
      • https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/Welcome.html 가이드문서

Practice Deploy 'Shortly Express' to Cloud

  1. Client - Shortly Express React Client 빌드 파일을 S3에 배포 한다.
  2. Server Application - Shortly Express API server application을 EC2에 올려서 구동한다.
  3. Database - 로컬 mysql을 RDS로 대체하여, server application과 연결 한다.

React Build

  • 아마존 S3 버켓에 리액트 앱을 빌드해서 배포하는 과정
    • 배포할 간단한 리액트 앱 만들기
    • 이렇게 만든 앱을 퍼블릭링크, 즉 배포하는 것이 목적 → 'npm run build'

Create Bucket

  • AWS Management Console에 접속

  • S3 검색해서 들어가기 → 버킷만들기

  • 설정 :

    • 속성 → 정적 웹사이트 호스팅 → 인덱스 문서, 에러문서 설정

    • 주어진 엔드포인트로 접속 → 404 forbidden! (프라이빗 버킷이기 때문)

    • 누구나 접속할 수 있게 PUBLIC 권한설정 해주어야 한다
      - 권한 → 퍼블릭 엑세스 차단 해제
      - 버킷정책 → 정책 생성기 →s3 bucket policy →정책생성후 복붙
      - principal : 문서참고
      - ARN : 문서참고(내가 만든 이름과 일치해야함)
      - 파일 올릴 때 build폴더 통째로가 아니라 안의 내용물을 복붙해야함


Create Server Application

  • 간단한 노드 서버 애플리케이션 만들기

    • express 프레임워크 사용 npm init → npm install express --save

    • index.js 파일 안에 서버코드 작성 → localhost:5000 들어가면 문자 뜬다

      const express = require('express');
      
      const app = express();
      
      app.use('/', (req, res) => {
          res.send('hello practice node server-deploy')
      })
      app.listen(5000, () => {
          console.log('server on 5000');
      })
    • 우리 목적은 로컬호스트가 아니라 배포된 url에서 작동해야 한다

    • 아마존 컴퓨터는 usb 같은 장치를 꽂을 수 없기 때문에 깃허브 원격저장소를 통해서 index.js파일을 EC2에 업로드해야 한다

0개의 댓글