AWS 배포

KoEunseo·2022년 10월 11일
0

코드스테이츠

목록 보기
43/45

Cloud Computing

이전에는 전산실에서 컴퓨터를 배치하고 인터넷을 연결해 서비스를 제공했다.
이러한 방식은 주기적인 관리가 필요하고 공간의 한계가 있게 된다.
그래서 서버의 자원과 공간 및 네트워크 환경을 빌려 사용하는 데이터 센터가 생기게 되었다.

이러한 환경을 온프레미스라고 부른다.

반면 최근에는 이러한 서비스를 제공할때 가상의 컴퓨터를 사용하는데,
필요할 때마다 컴퓨팅 능력을 유연하게 조절할 수 있고, 사용한 만큼의 요금만 지불하면 된다. 컴퓨터의 스냅샷을 이용해 다른 컴퓨터로 즉시 이주가 가능하다.

운영 환경 자체가 클라우드 제공자에게 종속되어 클라우드 서비스에 문제가 생길 때 영향을 받을 수밖에 없다.

SaaS : Software as a Service

클라우드 제공자가 당장 사용 가능한 소프트웨어를 제공하는 경우 이에 해당
AWS: IaaS

서비스 네트워크 하드웨어 운영체제 플랫폼/DB 어플리케이션
SaaS 👌 👌 👌 👌 👌
PaaS 👌 👌 👌 👌
IaaS 👌 👌

Deploy

Development -> Integration -> Staging -> Production

Development

로칼 컴퓨터 환경에서 개발 및 테스트
sample data 이용

Integration

각자의 환경에서 개발된 부분 취합
코드간 충돌이 없는지 확인
작성한 코드가 다른 코드에 문제를 발생시키지 않는지 확인

Staging

프로덕션 단계와 가장 유사한 환경서 테스트, 다양한 환경서 테스트
복제된 실제 데이터 이용해 테스트
모든 관계자들에게 검증

Production

개발환경과는 구분된 환경
실제 데이터 이용
실제로 서비스가 제공

환경설정과 코드를 분리하는 것이 중요!

작성한 코드가 다른 환경에서도 정상 작동하려면 설정을 환경변수에 저장해야 한다. (.env)
절대경로대신 상대경로를 사용한다.
환경에 따라 포트를 분기할 수 있도록 환경변수를 설정한다.
도커와 같은 개발환경 자체를 통일시키는 솔루션 사용 가능

AWS 서비스

EC2

아마존에서 원격으로 제어할 수 있는 가상의 컴퓨터를 한대 빌리는 것.
Elastic Compute Cloud : 사용한 만큼 지불. 필요에 따라 성능과 용량 조절

인스턴스

아마존에서 빌리는 컴퓨터를 인스턴스라 한다.

AMI

소프트웨어 구성이 기재된 템플릿.
사용 용도에 맞게 운영체제ㅡ 런타임 등이 구성된 셋팅을 선택할 수 있다.
운영체제만 깔려있는 템플릿이나 특정 런타임이 설치되어있는 템플릿이 제공되기도 함(우분투 + node.js, 윈도우 + JVM)

RDS : Relational Database Service

aws에서 제공하는 관계형 데이터베이스 서비스.
DB 유지보수를 RDS에서 자동관리한다. 초기설정을 제외하고 DB에 저장된 데이터를 관리하기만 하면 됨
데이터베이스 엔진을 취사선택해 이용할 수 있다.

S3

Cloud Storage : 인터넷 공간에 데이터를 저장하는 저장소. 하드디스크와 같은 역할을 한다. 웹 환경이라면 어디서든 저장된 데이터에 접근이 가능하다.
aws에서 제공하는 클라우드 스토리지. Simple Storage Servise의 약자인다.
확장성이 높고 스토리지의 용량을 무한히 확장할 수 있다. 내구성이 99.9999..%라 유실될 가능성이 현저히 떨어진다.
여러 지역에 aws 데이터센터가 있다. 한 영역이 가동이 불가능해지더라도 다른 가용 영역에 백업을 해놓은 데이터를 활용해 문제가 없다.

스토리지 클래스

  1. Standard
    범용적인 목적. 빠른 접근, 액세스 요청에 대한 처리 속도가 빠르다. 대신 데이터를 오래 보관하는 목적으로는 효율적이지 못하다. 보관비용이 높기 때문
    즉 자주 액세스해야 할 경우 사용한다.
  2. Clacier
    장기적인 보관 목적으로 사용한다.
    액세스 속도는 느리지만 데이터를 보관하는 비용이 저렴하다.

정적 웹사이트 호스팅이 가능하다.

버킷이라는 저장 공간에 정적파일을 업로드하고 버킷을 정적 웹 사이트 호스팅 용도로 구성시 정적 웹 사이트를 배포할 수 있다.

최상위 디렉토리를 버킷이라 한다.

버킷은 각 리전에서 고유해야 한다.
버킷의 정책을 생성해 액세스 권한을 부여할 수 있다.

버킷에 담기는 파일을 객체라 한다.

저장소에 데이터를 저장할 때 키-값 페어 형식으로 데이터를 저장하기 때문에 객체.
객체 = 파일 + 메타데이터로 구성된다.
파일의 값에는 실제 데이터를 저장한다. (최대 5TB)
파일의 키는 각각의 객체를 고유하게 만들어주는 식별자 역할을 한다.(이 키를 이용해 원하는 객체 검색 가능.)
메타데이터: 객체의 생성일, 크기, 유형과 같은 객체에 대한 정보가 담긴 데이터.
모든 객체는 고유한 URL 주소를 갖는다!
URL 주소는 http://[버킷의 이름].S3.amazonaws.com/[객체의 키]의 형태를 띠고, URL 주소를 통해서도 원하는 데이터에 접근할 수 있다.

배포 전략 개념

프론트

EC2 ? nop
빌드해서 정적파일의 형태로 만든다. (npm run build)
CloudFront 통해 각지의 데이터센터에 데이터 분산 저장

EC2 RDS 사용.

DNS

Route 53 이용.

실습

백엔드

  1. 리전을 서울로 바꾼다.
  2. EC2
    인스턴스를 클릭한다.
    인스턴스 요약 페이지에서 상단에 있는 연결 클릭
    인스턴스에 연결 페이지에서 두번째 탭에 있는 Session Manager 클릭후 연결 버튼 클릭.
    터미널이 열린다.
bash
cd ~
  1. 인스턴스 상에서 서버 실행하기
    환경을 구축해야한다.
sudo apt update

nvm 설치해야한다.

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

nvm 홈페이지에서 보면 install script를 다운받아야 nvm을 다운받을 수있다고 함. 위 코드는 스크립트를 다운받는 코드.
ls -a를 쳐보면 .nvm이 설치되어있는데 nvm --version 하면 다운이 되지 않았지만 비슷한건 있다는 오류가 뜸.
https://www.codegrepper.com/code-examples/shell/Command+%27nvm%27+not+found%2C+but+there+are+13+similar+ones.
여기서 보고 해결.
결론적으로 아래 코드를 쳐서 nvm을 실행시키면 되는 듯.

ls -a | grep .nvm
[[ -s $HOME/.nvm/nvm.sh ]] && . $HOME/.nvm/nvm.sh

설치가 되어있는지 확인하면 버전이 나옴. 그럼 이제 node 설치하고 npm도 설치해준다.

nvm install node 
nvm install node 
  1. 깃을 통해 서버 코드 클론
    ssh 등록을 해야함. ssh-keygen 명령어로 ssh 생성하고 cat ~/.ssh/id_rsa.pub 명령어로 복사.
    깃허브에 해당 ssh를 등록한다.
    이제 깃허브에서 ssh 방식으로 클론한다.
  2. npm i
    클론한 폴더 내 서버 디렉터리로 이동해 필요한 모듈을 다운받는다.
  3. sudo npm start
    관리자권한으로 서버를 실행한다.
  4. 인스턴스 요약 페이지에서 퍼블릭IPv4주소, 퍼블릭 IPv4 DNS를 확인한다.
    실습에서는 DNS 주소를 이용했다.

프론트엔드

최상단에 .env 파일 만들고 REACT_APP_API_URL={서버 주소} 저장
npm i, npm run build
빌드 디렉터리에 있는 모든 파일을 버켓 루트 경로에 넣는다. 빌드 폴더 자체를 넣으면 안됨!!

profile
주니어 플러터 개발자의 고군분투기

0개의 댓글