해당 글은 [AWS] React + Express 프로젝트 배포하기 - 1에 이어 작성되었습니다.
따라서 Github에 배포 가능한 상태인 프로젝트 코드가 업로드 되어 있는 것을 전제로 합니다.
이제 AWS에서 인스턴스를 생성하고 실제 배포를 해봅시다.
저는 학교에서 Classroom에 초대해주었기 때문에, Education 계정으로 접속해 주었습니다.

Classrooms에서 Go to classroom을 눌러 Workbench로 들어가주면, 크레딧 등의 정보들과 AWS Console 버튼이 보입니다.
버튼을 클릭해 console로 들어갑니다.
모든 서비스 > 컴퓨팅 > EC2로 들어가준 뒤,
인스턴스 > 인스턴스에 들어가서 인스턴스 시작을 눌러줍니다.

저는 Ubuntu 18.04 LTS를 사용해주었습니다.
프리티어를 선택하고 보안그룹까지 넘어가줍니다.

보안 그룹은 규칙 추가를 눌러 HTTP, HTTPS를 추가해줍니다.
검토 및 시작 > 시작하기를 누르면 키 페어 생성이 나옵니다.
새로운 키페어를 생성해주고 꼭 키페어 다운로드를 눌러서 다운해줍니다.
인스턴스가 생성되면 편의에 따라 인스턴스 name을 변경해줍니다. 저는 프로젝트명인 duzzle로 바꾸어주었습니다.
만약 인스턴스를 중단했다가 재실행할 상황이 생긴다면, 원래 부여되었던 public IPv4가 변경되기 때문에 도메인을 연결해 배포하려면 꼭 탄력적 IP를 설정해주어야 합니다.
모든 서비스 > 컴퓨팅 > EC2 > 네트워크 및 보안 > 탄력적 IP
로 들어가줍니다.

탄력적 IP 주소 할당을 눌러 생성해줍니다.
생성한 IP를 선택하고 작업 > 탄력적 IP 주소 연결을 눌러줍니다.
아까 생성한 인스턴스를 선택하고 연결해주면 인스턴스의 Public IPv4가 탄력적 IP로 바뀐 것을 확인할 수 있습니다.
이제 인스턴스 환경에 접속해 코드를 다운받고 배포해야 합니다.
먼저 ssh로 접속하는 방법입니다.
Windows 설정 > 앱 및 기능 > 선택적 기능 > 기능 추가 > OpenSSH 클라이언트
위 기능을 추가해 줍니다.
명령 프롬포트(cmd)를 열어 pem 파일을 저장한 경로로 이동해줍니다.
ssh -i pem파일 ubuntu@public ipv4로 접속이 가능합니다.
위 사진과 같이 뜨면 성공!
PuTTY를 사용해 접속하는 방법도 존재합니다.
구글 검색창에 iPuTTY를 검색해 Github에서 다운로드를 해줍니다.

다운로드 후 압축을 해제하면 프로그램들을 확인할 수 있습니다.

아까 생성한 키페어(.pem)을 .ppk로 변환해주기 위해 puttygen을 실행해줍니다.
개인 키 파일(키페어)을 불러온 뒤 개인키 저장을 통해 .ppk 파일을 저장할 수 있습니다.
putty를 실행합니다.

호스트 이름에 인스턴스의 퍼블릭 IPv4와 세션명 입력한 뒤 저장합니다.
* 저장하지 않으면 매 접속 때마다 설정해주어야 합니다.

연결 > SSH > Auth에서 인증 개인키 파일에 변환한 .ppk 키파일을 업로드 하고 세션을 저장합니다.
열기를 누르면 터미널 창이 실행됩니다.
login as:
위와 같은 메시지가 뜨면 ubuntu를 입력해 연결할 수 있습니다.
드디어 코드를 서버에 띄워봅시다!
먼저 관리자 계정으로 접속합니다.
sudo su
npm을 설치해줍니다. docs

네 개의 명령어를 차례로 입력하면 npm 설치가 완료됩니다.
git을 설치합니다.
sudo apt-get install git
프로젝트를 clone합니다.
git clone [url]
프로젝트 디렉토리로 들어가줍니다.
cd projectName
저는 client와 server로 폴더가 나누어져 있었기 때문에 각각의 폴더에서 관련 패키지들을 설치하고 client에서 build를 실행하였습니다.
cd client/
npm install
npm run build
cd ..
cd server/
npm install
서버를 실행하기 전, production mode를 적용해줍니다.
export NODE_ENV=production
MongoDB 사용자라면 Network Access도 추가해주어야 합니다.
IP Address에 퍼블릭 IPv4를 넣어줍니다.

app.js를 실행시켜줍니다.
npm start
인스턴스의 퍼블릭 IPv4 DNS 혹은 퍼블릭 IPv4로 접속했을 때 제대로 뜬다면 성공!
이대로 서버를 종료시킨다면 접속할 수 없게 되기 때문에 pm2를 설치해 실행시켜줍니다.
npm install -g pm2
pm2 start app.js
pm2 stop [id]로 종료할 수 있습니다.