Deployment
배포란 내 컴퓨터에서 사용하고 있는 코드를 다른 컴퓨터에서 코드를 돌리고 그 컴퓨터에서 서비스가 구동되어 다른 사용자들이 원격으로 서비스를 이용 할 수 있는 환경을 말한다.
- Development
개발 서버에서 서비스 개발
- integration
개발자들끼리 서로 에러,충돌이 없는지 확인 후 수정
- staging
내부적으로 사용자들에게 배포하기 전 확인
- 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 실습
npm run-script build
or npm run build
or yarn build
- aws사이트에서 s3 서비스를 선택
- 버킷 만들기(버킷 이름(전세계에서 고유해야함), 리전(위치: 아시아 태평양(서울)))한다.
- 생성한 버킷 - 속성 - 정적 웹 사이트 호스팅 - 이 버킷을 사용하여 웹 사이트를 호스팅하도록 변경
- 인덱스 문서: 실행될 html문서,
오류문서: 오류 발생시 실행될 html문서
- 권한 - 퍼블릭 엑세스 차단 - 모든 차단 설정 해제(사용자들이 서비스 접근 가능하도록 public으로 변경)
- 버킷 정책 - 정책 생성기를 이용해 생성
- 버킷의 권한을 public으로 변경한다. (사용자들의 서비스 접근이 가능하도록)
- build파일 내 정적 폴더를 드래그하여 버킷에 업로드
- 속성 - 정적 웹 사이트 호스팅 - 엔드포인트에서 호스팅 된 사이트를 확인
if) 클라이언트 폴더에서 api를 호출하려면??
--> EC2 ip랑 port를 사용 할 수 있도록 설정해야 할 것 같다.
기존에 개발해두었던 클라이언트 폴더가 배포되면 api를 호출하는 부분이 EC2 ip와 port를 사용할 수 있도록 설정한다.
2. sever Application deploy strategy
api를 요청할 수 있는 서버 어플리케이션을 배포할 수 있는 전략이 필요. 즉사용자들에게 sever Application을 제공해야 한다.
EC2
EC2란?
- AWS가 가진 컴퓨터(가상머신?). 유저가 원격 접속 할 수 있다.
- 컴퓨터의 환경을 원하는 이미지로 구동시켜서 사용 할 수 있다
즉, 컴퓨터를 사진처럼 똑같은 상태로 찍어서 배포하게 만들어 준다.
EC2 실습
- 서버 폴더를 깃험 저장소에 올려둔다
- aws사이트에서 EC2 서비스를 선택
- 인스턴스 - 인스턴스 시작 - 다양한 os 중 ubuntu 18.04선택(가장최신)
(다른 위치에 있는 가상 컴퓨터가 생성됨)
- 시작하기 - (컴퓨터에 접속할 수 있는 퍼블릭 키 생성)기존 키 페어 선택 - 키 페어 이름(본인이 설정) - 인스턴스 시작
(한번 키 다운받으면 다시 생성 안되므로 주의!, 키는 항상 pem키로 끝남)
- 인스턴스 - 내가 만든 인스턴스 이름 지정해줌
- 인스턴스 - '연결' 들어가서 인스턴스 엑세스 방법따라 설정해 줘 우분투 서버에 접속
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>
- nodejs, nvm, mysql 등등 내가 필요한 것들 설치
- 깃헙에 올렸던 서버폴더를 clone한다.
- 서버 보안 설정
1) aws에서 네트워크 및 보안그룹 - 보안 - 인바운드 - 편집 -
SSH, HTTP 프로토콜을 위치와 무관하게 허용함(소스: 사용자 지정)
2) 사용자 지정 TCP은 소스: 사용자 지정
, PORT:서버가 사용하는 port
- 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 실습
- aws RDS - 데이터베이스 생성을 누른다.
- 엔진유형 : MySQL, 버전도 선택가능
- 템플릿 - 무료사용할시 프리티어
- DB 인스턴스 식별자, 마스터암호 생성
- 데이터 베이스 생성
- 생성 후 셋업이 완료되면 수정버튼 누르고
1) 퍼블릭 엑세스 사용 가능성 - 허용(개발 초기시 프로그램 테스트 해야하므로.. 다 하고나서는 허용 x으로 변경)
2) 포트는 기본이 3306이므로 그 이외의 값으로 변경해준다(ex) 13306)
- 터미널에서 생성한 DB접근을 위해
: terminal -
mysql -u <RDS master name> --host <RDS endpoint> -P <RDS port> -p
- 비밀번호 입력
: Shortly Express에서는
하나의 url을 여러 사용자가 가지고 있다
즉, url: user = 1: n관계
--> 관계를 userID를 외래키로 두어야 할거 같아요