[SOPT 세미나] 서버 파트 4차 세미나 회고, AWS 그리고 배포

SSO·2022년 5월 19일
0

SOPT 30기

목록 보기
5/9

👩‍💻 4차 세미나 회고

4차 세미나에서는 AWS에서 인스턴스를 만들고 연결하여 API를 배포하는 것을 배우고, 추가로 영화 리뷰 API를 만드는 것도 배워보았다. 다른 프레임워크로도 API만 조금 만들어봤지 제대로 배포해본 적은 없었기에 설렜다!!

배포까지는 잘 따라가다가 영화 리뷰 API를 만드는 것에서 삐끗..ㅇㅁㅇ!! OB 한 분이 잘 도와주셔서 세미나 후에 혼자서 다시 잘 만들어볼 수 있었다 ㅎㅁㅎ



💜 AWS EC2

Elastic Compute Cloud
클라우드에서 확장 기능 컴퓨팅 용량을 제공
가상 컴퓨터 위에서 애플리케이션을 실행할 수 있게 한다.

배포를 하기 위해 EC2가 필요하다는 것만 알았지, 가상 컴퓨터이고 또 그 위에서 개발한 애플리케이션을 실행시키는 것은 세미나를 통해 배울 수 있었다.

이제 AWS에 접속하여 EC2 서비스에서 인스턴스를 생성하고 연결해야 한다.
이 부분은 AWS 스터디 1-2주차에서 진행한 부분이어서 굳이 여기서 다시 기록하지는 않겠다.


🛠 EC2 기본 세팅

인스턴스로 잘 접속했으면, 이제 프로젝트를 받아와 실행할 수 있게 몇가지 세팅을 해주자. VS Code에서도 Node.js를 사용하기 위해 몇가지 명령어로 세팅했던 것처럼 인스턴스에서도 Node.js 프로젝트를 사용할 수 있도록 몇가지 세팅이 필요하다.

Node 설치

sudo apt-get install curl
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y node.js
sudo apt-get install build-essential

위 명령어를 입력해주자. 중간에 입력을 요구하는 것이 뜨면 모두 y로 입력해주고 넘어가면 된다. (y는 yes라는 뜻)

모두 잘 설치했으면 node -v 명령어를 통해 잘 설치되었는지 버전을 확인한다.


NVM(Node Version Manager)및 yarn 설치

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.39.1/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

nvm install --lts
npm install -g yarn

위 명령어를 입력하자.


🛠 서버 업로드

모든 세팅이 끝났으면 이제 ec2에 서버를 올려보자. ec2에서 3차 세미나까지 열심히 했던 플젝을 실행시켜보는 것이다.

git clone <레포지토리 url>

해당 깃허브 레포지토리 링크로 프로젝트를 clone 해온다.

깃허브에는 .env 파일을 보안 문제로 올리지 않았기 때문에 인스턴스 내부에 파일을 직접 다시 만들어줘야 한다. 그럼 파일을 작성할 수 있는 편집기가 필요하다. vim editor를 설치하자!

sudo apt-get install vim
vim .env

설치한 후 vim editor로 .env 파일을 생성하고 작성하자. (vim <파일명> 명령어 사용)

MONGODB_URI=mongodb+srv://<사용자ID>:<비밀번호>.w6r1r.mongodb.net/<DB이름>?retryWrites=true&w=majority
PORT=<포트번호>

3차 세미나 때와 마찬가지로 .env 파일에 위와 같이 내용을 작성해주자.

모두 작성했으면 ESC 키를 누른 후 :wq 를 입력하여 저장하고 나가기를 해주자. (vim editor 방식)

yarn
yarn run dev

거의 다 했다! 이제 yarn을 입력하여 프로젝트의 초기 패키지를 설치해주자
설치 후, 프로젝트를 실행시키자! (yarn run dev) 그러면 VS Code에서 봤을 때와 같은 결과를 볼 수 있다.

ec2에서 성공적으로 프로젝트를 실행했다! 젤 마지막에 초록색 글씨로 로그인한 표시가 뜨면 된다.


🛠 보안 그룹 설정

네트워크에서 해당 API로 접근하고 싶으면, 보안 그룹을 설정해줄 필요가 있다.

AWS의 EC2 서비스에서 인스턴스로 들어가서, 보안 -> 보안 그룹으로 이동하자.

인바인드 규칙 클릭!!

2개를 추가해주면 된다. 우선 모두 사용자 지정 TCP로 선택하고, 각자 설정한 포트번호 (8000)를 적어주고, Anywhere IPv4, Anywhere IPv6을 하나씩 선택해주면 된다.

이제 배포한 API를 테스트 하러 가보자 ~.~
해당 인스턴스에서 퍼블릭 IPv4 주소를 복사한다. 이 주소가 localhost:8000 대신 쓰일 친구 !

thunder client나 Postman 등 API를 테스트할 수 있는 서비스에서 퍼블릭 주소로 테스트했을 때 정상적으로 작동한 것을 확인할 수 있었다 😊

52.79.85.108/user

예를 들어 위와 같이 매핑해주면 localhost 때와 같은 결과를 볼 수 있었다.



💜 PM2

EC2에 배포는 했는데..! 인스턴스에서 나오면 바~.~로~.~ 접속이 끊긴다 ㅇㅁㅇ!! 그럼 다른 서비스들은 어떻게 24시간 돌아가는 거지..!! 했는데 무중단 배포라는 것을 배웠다.

Process Manager
Node.js 애플리케이션을 쉽게 관리할 수 있게 해주는 무중단 배포 지원
Node.js 애플리케이션을 멀티 스레드로 구동 가능

쉽게 말해서 프로젝트 실행을 종료해도 PM2로 무중단 배포를 해주면 배포한 API는 언제 어디서든 접속할 수 있게 된다는 것이었다.

완전 좋아~ PM2를 설치해보자!

🛠 PM2 설치

npm install -g pm2
pm2 -v

설치 후 버전을 확인하여 잘 설치되었는지 확인해준다.

yarn run build
pm2 start <폴더 이름>

그리고 프로젝트 build 명령어를 실행한다. 그리고 ls로 확인해보면 build 폴더 (dist)가 생성된 것을 확인할 수 있었다. 이 폴더를 pm2 start dist 명령어로 입력하여 pm2 서비스로 실행시킨다.

그럼 EC2 연결을 끊고 API를 실행시켜도 잘 돌아간다 ㅎㅎㅎㅎ


🛠 PM2 명령어

// 프로세스 별 상태 확인
pm2 monit

// 로그 확인
pm2 logs

// 라인 수 지정 로그 확인 (지정한 라인 수만큼 볼 수 있음)
pm2 log --lines 100

pm2로 실행시킨 후 monit 할 수 있는 다양한 명령어가 있었다. 메모메모

pm2 list

프로세스 리스트를 확인할 수 있다.

pm2 stop dist // dist 자리에 pm2 올린 폴더 이름

무중단 배포로 실행한 dist를 중지한다.

pm2 delete dist

pm2에서 dist를 삭제한다.

pm2 restart dist

중지한 dist를 재시작 시킨다.



💜 AWS S3

AWS에서 이미지를 업로드하는 서비스인 S3도 배웠다. 🤩

AWS에서 제공하는 온라인 스토리지 웹 서비스
데이터를 버킷 내에 객체로 저장

DB에 이미지 파일 등의 데이터를 효율적으로 저장하기 위해 클라우드 스토리지에 파일을 올려두고, 서버는 해당 url만을 보관한다.

AWS에 S3 서비스에 이미지 파일을 보관하면 해당 이미지 링크를 주고, DB는 그 링크를 저장하여 이미지 파일을 관리한다.

AWS에서 S3 서비스에 들어가서 버킷 만들기를 클릭한다.

클릭 후 나오는 창에서 고유한 버킷 이름을 작성하고, 리전을 선택한다. (ex. 아시아 태평양 (서울))

퍼블릭 액세스 차단은 접근 가능하게 하기 위해 풀어준다. 모든 퍼블릭 액세스 차단 해제 및 동의 체크!!

모두 설정해줬으면 버킷 만들기를 해주면 버킷이 생성된다 :)

버킷 들어가서 권한 -> 버킷 정책란의 편집을 클릭해주자.
들어간 후 오른쪽 상단의 정책 생성기로 이동한다.
다음과 같이 설정해주자.
Actions은 원하는 기능은 모두 체크해주면 된다. 여기서는 GetObject만 체크하여 조회만 가능하도록 했다. 또한 ARN은 버킷 정책 창에서 ARN을 복사해서 붙여주고, 끝에 /*까지 붙여주면 된다.
그리고 Add Statement -> Generate 클릭
하면 만들어진 JSON 내용을 복사하여 버킷 정책에 고대로 복붙해준다 ^!^ 복붙 후 변경사항 저장!
권한 개요에 퍼블릭이라고 뜨면 성공이다! 오예!


이제 버킷에 들어가서 이미지 파일을 업로드 한 후 해당 파일에 들어가서 객체 URL을 들어가보면 사진을 정상적으로 확인할 수 있다 🎉



💜 Validation (유효성 검사)

영화 리뷰 CRUD API를 생성하는 것을 배웠다. 추가로 express-validator도 배웠다.

validation을 위한 npm 라이브러리
여러가지 validation 함수를 제공한다.
yarn add express-vaildator

유효성 검사 해주는 라이브러리다! yarn add 해주자-!

다음과 같이 라우터 파일에서 입력값으로 들어오는 필드의 유효성 검사를 쉽게 실행할 수 있다.

notEmpty() : 비어있으면 안됨
isEmail() : 이메일 형식을 체크해주는 기능



💜 Populate

document의 경로를 다른 collection의 실제 document로 자동으로 바꾸는 방법

리뷰를 쓰려면 영화 정보와 유저 정보가 필요하다. 그럼 리뷰 정보를 추가할 때, Movie Collection과 User Collection의 해당 Id를 불러오면 된다. 그런데 영화와 유저의 Id 외의 정보도 필요하다면..?

Populate를 사용한다! 특정 객체의 Id를 실제 객체로 치환해주는 역할을 한다.

이를 통해 리뷰 생성에서 손쉽게 영화와 유저 정보의 객체를 가져올 수 있게 되었다 >.<




👩‍💻 Concluding

API 부분에서 한번 실수해서 끝에는 거의 못 들었었다 ㅠㅠ 실수한 부분은 OB 한 분이 잘 도와주셔서 잘 마무리 했고, 못 들은 부분은 개인적으로 녹화 영상을 보며 다시 따라해보며 복습해볼 수 있었다! 배포부터 API를 만드는 과정에서 추가적으로 다루는 기능까지! 아직 많은 연습이 필요하겠지만 많은 것을 얻어갈 수 있어 뿌듯했다 :)

profile
쏘's 코딩·개발 일기장

0개의 댓글