Deployment & AWS

프최's log·2020년 11월 3일
1

study

목록 보기
38/59
post-thumbnail

 배포(Deployment) 라는 것은 내 컴퓨터 안에서만 작동하던 웹 어플리케이션을 다른 사용자의 컴퓨터에서도 작동할 수 있게끔 진행하는 것으로, 클라우드(Cloud) 시스템을 이용해서 진행할 수 있다.

  • 배포 과정
    • Development : 개발
    • integration : 코드/기능 충돌 검사
    • Staging(준배포) : 배포환경과 유사한 환경에서 테스트 진행
    • Production : 서비스 배포

 내 컴퓨터 안에서 작동할 때는 노드버전이나 모듈, 포트번호 등을 알고 있어서 문제가 없었지만, 다른 컴퓨터에서 진행할 때의 환경은 매우 제한적이다. 이로 인해 내가 만든 코드가 잘 작동할지 보증(guarantee)할 수 없기 때문에 충돌 검사 및 준배포 단계를 거쳐서 먼저 테스트를 진행 해야한다.

  • 환경설정에서 염두해야 할 사항들

    • Node version
    • Dependencies
    • 포트 번호
    • 호스트명(Hostname)
    • URLs and File Paths
    • API Keys
  • 상대주소 활용(root-releative URLs) : <a href="signin">로그인</a>

  • 포트 관리(환경 변수) : app.listen(process.env.PORT || 1234)

  • npm 모듈 --save 옵션 ★★★

    • 원격저장소에는 노드 모듈을 올리지 않기 때문에 우리가 썼던 것들이 무엇인지 잘 적어놔야한다. 배포하기 위해 서버에 올려서 실행했을 때 '특정 모듈을 찾을 수 없다'라고 한다면 그건 누군가가 특정 모듈을 사용하고 Dependencies에 올리지 않았기 때문에 발생하는 에러이다.

배포 플랫폼(Deployment Platforms) : AWS

 배포 플랫폼은 Heroku, Digital Ocean, Amazon Web Services(AWS), Microsoft Azure 등 다양하게 존재한다.

배포 플랫폼을 사용하지 않으면, 각 개인 혹은 기업별로 서버실을 만들어서 서버를 가지고 있어야하는데, 비용면이나 인력면에서 비효율적이다. 배포 플랫폼을 통해 사용할 수 있는 서버 컴퓨터를 임대해서 쓴다고 보면 된다.

 AWS 는 대중화된 클라우드 플랫폼 중 하나이다. 클라우드 컴퓨팅이란 IT 리소스를 인터넷을 통해 온디맨드로 제공하고, 사용한만큼 비용을 지불하는 것을 말한다. 필요에 따라 컴퓨팅 파워, 스토리지, DB 등 AWS 클라우드 제품 을 추가 이용할 수 있다.


배포 전략

 배포를 할 때, 클라이언트/서버/데이터베이스를 무엇으로 진행할지 결정해야한다. 배포 플랫폼으로 AWS를 선택했으니 그 안에서 제공하는 서비스를 이용할 수 있다. 그중 1년 무료로 사용가능한 S3, EC2, RDS에 대해 알아보도록 한다.

Amazon S3 를 이용한 클라이언트 배포전략(SPA server strategy)

 Amazon S3(Amazon Simple Storage Service)는 파일을 저장할 수 있는 클라우드(Cloud) 서비스로 사용자가 앱스토어에서 앱을 다운받는 것과 같은 맥락이다. 여기서는 빌드된 'S3 버킷'에 접속할 수 있다.

버킷은 그룹핑한 최상위 디렉토리('root'와 비슷)로, 버킷 단위별로 지역지정,접속제한 등을 지정할 수 있다. 그리고 그 안에 저장된 파일은 '객체' 형태로 저장이 된다. 파일/데이터 이름은 key, 파일자체는 value 값으로 구분된다.

https방식으로 이용해 요청을 보내서 데이터를 받아올 수 있는데 REST API를 이용한다.

https//유저명.s3.amazonaws.com/mobile 주소로 
GET 요청을 보내서 받아온다.

빌드(build) : 사용자들이 받아야하는 파일은 build이다. 빌드(build)란 수많은 js,css 등을 하나의 static한 파일로 포장해준다. 유저는 이 포장된 것(빌드된 것)을 사용하게 된다.

  • S3 기능
    • 액세스 포인트 : 고유 호스트명

Amazon EC2 를 이용한 서버 배포 전략 (Server Application deploy strategy)

 Amazon EC2(Amazon Elastic Compute Cloud)는 가상의 서버 컴퓨터라고 생각하면 된다. 여기서 인스턴스를 생성해준다고 하는 것은 1대의 가상컴퓨터가 생성된다는 것으로 이해할 수 있다.

이 안에서 OS를 설치하고 프로그램을 설치해서 서버를 만들어낼 수 있다. 원격컴퓨터에 접속할 수 있는 키(.pem file)를 받아서 이미 os가 설치된 컴퓨터를 선택할 수 있고, 이때 .pem 으로 생성되는 파일이 접속 열쇠다. 절대 분실하거나 노출되어선 안 된다.

이 EC2를 통해 여러 작업을 할 수 있지만, 인터넷을 통해서만 접속이 가능하다.

  • ssh(Secure Shell)
    원격 접속을 이용해 터미널 환경을 사용할 수 있는 보안성이 높은 프로토콜이다.

  • pm2

AWS RDS 를 이용한 Database 클라우드 서비스

AWS RDS(Amazon Relational Database Service) 를 이용해서 로컬에 있던 mysql을 대신해 활용할 수 있다.

또한 AWS Database Migration Service를 사용하여 기존 데이터베이스를 Amazon RDS로 손쉽게 마이그레이션 또는 복제할 수 있다.

RDS를 통해 설치/관리/업데이트 관리가 수월해지고, AWS 콘솔이나 AWS API를 통해 백업/복구가 용이하다.

DB 크기는 기본(m4), 메모리 최적화(r3), 마이크로(t2) 3가지 타입이 존재한다.


🌟 관련 추가 포스팅

🔧 AWS가입과 보안설정

참조사이트
S3, EC2, RDS
왕초보를 위한 AWS RDS, EC2, S3 - YOUTUBE
백엔드가 이정도는 해줘야 함 - 11. 배포 자동화
[QA] CI/CD 란?

profile
차곡차곡 쌓아가는 나의 개발 기록

0개의 댓글