TIL # 13 // AWS Deployment

이윤주·2020년 2월 17일
0

Deployment

배포란 내 컴퓨터에서 사용하고 있는 코드를 다른 컴퓨터에서 코드를 돌리고 그 컴퓨터에서 서비스가 구동되어 다른 사용자들이 원격으로 서비스를 이용 할 수 있는 환경을 말한다.

  • 개발 환경 과정
  1. Development
    개발 서버에서 서비스 개발
  2. integration
    개발자들끼리 서로 에러,충돌이 없는지 확인 후 수정
  3. staging
    내부적으로 사용자들에게 배포하기 전 확인
  4. producrtion
    개설

AWS(아마존 웹서비스와 클라우드)

AWS는 대표적인 배포 플랫폼

크게 배포해야 할 부분을 나누면

1.SPA server strategy

리엑트로 만든 Single Page Application 파일을 제공 해야 한다.
전체적인 배포 아키텍처를 구성하기 위해서는 S3 를 활용한다.
[S3사용하기]
[S3소개]

S3(Simple Storage Service)

S3란?

  • 파일을 저장,추출하는 클라우드 서비스 즉, 파일 서버의 역할을 함
  • Build파일 서브를 위한 cloud를 이용한다.
  • 파일을 저장해서 호스팅하는데 특화되어 있다.
  • 객체로 구성되어 있다.
  • 사용자들은 S3(bucket)주소에 접속하게 되면 build를 다운로드 받게 된다
  • S3서비스에서 버킷을 생성(S3에서 생성할 수 있는 최상위 디렉토리)하고 그 버킷에서 정적 웹사이트를 호스팅 가능하도록 설정을 변경.

S3 실습

  1. npm run-script build or npm run build or yarn build
  2. aws사이트에서 s3 서비스를 선택
  3. 버킷 만들기(버킷 이름(전세계에서 고유해야함), 리전(위치: 아시아 태평양(서울)))한다.
  4. 생성한 버킷 - 속성 - 정적 웹 사이트 호스팅 - 이 버킷을 사용하여 웹 사이트를 호스팅하도록 변경
  5. 인덱스 문서: 실행될 html문서,
    오류문서: 오류 발생시 실행될 html문서
  6. 권한 - 퍼블릭 엑세스 차단 - 모든 차단 설정 해제(사용자들이 서비스 접근 가능하도록 public으로 변경)
  7. 버킷 정책 - 정책 생성기를 이용해 생성
  8. 버킷의 권한을 public으로 변경한다. (사용자들의 서비스 접근이 가능하도록)
  9. build파일 내 정적 폴더를 드래그하여 버킷에 업로드
  10. 속성 - 정적 웹 사이트 호스팅 - 엔드포인트에서 호스팅 된 사이트를 확인

if) 클라이언트 폴더에서 api를 호출하려면??
--> EC2 ip랑 port를 사용 할 수 있도록 설정해야 할 것 같다.
기존에 개발해두었던 클라이언트 폴더가 배포되면 api를 호출하는 부분이 EC2 ip와 port를 사용할 수 있도록 설정한다.

2. sever Application deploy strategy

api를 요청할 수 있는 서버 어플리케이션을 배포할 수 있는 전략이 필요. 즉사용자들에게 sever Application을 제공해야 한다.

EC2

EC2란?

  • AWS가 가진 컴퓨터(가상머신?). 유저가 원격 접속 할 수 있다.
  • 컴퓨터의 환경을 원하는 이미지로 구동시켜서 사용 할 수 있다
    즉, 컴퓨터를 사진처럼 똑같은 상태로 찍어서 배포하게 만들어 준다.

EC2 실습

  1. 서버 폴더를 깃험 저장소에 올려둔다
  2. aws사이트에서 EC2 서비스를 선택
  3. 인스턴스 - 인스턴스 시작 - 다양한 os 중 ubuntu 18.04선택(가장최신)
    (다른 위치에 있는 가상 컴퓨터가 생성됨)
  4. 시작하기 - (컴퓨터에 접속할 수 있는 퍼블릭 키 생성)기존 키 페어 선택 - 키 페어 이름(본인이 설정) - 인스턴스 시작
    (한번 키 다운받으면 다시 생성 안되므로 주의!, 키는 항상 pem키로 끝남)
  5. 인스턴스 - 내가 만든 인스턴스 이름 지정해줌
  6. 인스턴스 - '연결' 들어가서 인스턴스 엑세스 방법따라 설정해 줘 우분투 서버에 접속
    1) terminal - root에서 cd .ssh
    2) 우리가 받은 pem key를 .ssh폴더로 옮겨야 함
    : mv ~/Downloads/<pem key 이름> ./
    3) SSH가 작동하려면 키가 공개적으로 표시되지 않아야 한다.
    :chmod 400 <pem key 이름>
    4) 퍼블릭 DNS을(를) 사용하여 인스턴스에 연결
    : ssh -i ~/.ssh/<pem key 이름> ubuntu@<EC2 퍼블릭 ip>
  7. nodejs, nvm, mysql 등등 내가 필요한 것들 설치
  8. 깃헙에 올렸던 서버폴더를 clone한다.
  9. 서버 보안 설정
    1) aws에서 네트워크 및 보안그룹 - 보안 - 인바운드 - 편집 -
    SSH, HTTP 프로토콜을 위치와 무관하게 허용함(소스: 사용자 지정)
    2) 사용자 지정 TCP은 소스: 사용자 지정, PORT:서버가 사용하는 port
  10. node로 서버를 키지않아도 계속 서버가 켜지게 하기위해
    1) terminal cd clone한 레포 - sudo npm install pm2 -g
    2) pm2 start index.js

그럼 서버에서 DB는 어떻게?

서버코드를 통하지 않더라도 client를 통해 데이터가 접속이 가능해야 한다.

RDS(Relational Database Service)

DB 구축은 RDS(관계기반 데이터베이스를 제공하는 서비스)을 이용한다.

RDS?

  • 서버사이드 중 DB를 운영 서버에 구현
  • mysql setup이 되어있는 DB를 장착한 최적화 된 컴퓨터를 대여하는 느낌으로 이해
  • 관계형 모델이므로 각 테이블들이 하나이상의 관계를 맺고 있어야 한다.

RDS 실습

  1. aws RDS - 데이터베이스 생성을 누른다.
  2. 엔진유형 : MySQL, 버전도 선택가능
  3. 템플릿 - 무료사용할시 프리티어
  4. DB 인스턴스 식별자, 마스터암호 생성
  5. 데이터 베이스 생성
  6. 생성 후 셋업이 완료되면 수정버튼 누르고
    1) 퍼블릭 엑세스 사용 가능성 - 허용(개발 초기시 프로그램 테스트 해야하므로.. 다 하고나서는 허용 x으로 변경)
    2) 포트는 기본이 3306이므로 그 이외의 값으로 변경해준다(ex) 13306)
  7. 터미널에서 생성한 DB접근을 위해
    : terminal -
    mysql -u <RDS master name> --host <RDS endpoint> -P <RDS port> -p - 비밀번호 입력

: Shortly Express에서는
하나의 url을 여러 사용자가 가지고 있다
즉, url: user = 1: n관계
--> 관계를 userID를 외래키로 두어야 할거 같아요

0개의 댓글