AWS EC2 + API Gateway + Node Express + Postgresql 로 백엔드 배포하기

버들비·2021년 7월 16일

1. EC2 설정하기

  1. AWS ec2 콘솔에서 인스턴스 시작을 클릭. 우분투 64비트 x86 LTS 서버를 선택.

  1. 설정은 다른거 건들 필요없고, 보안그룹 편집으로 포트번호를 추가해줌. 0.0.0.0 은 모든 ip 에서 접속을 허용한다는 것인데, 일단은 그대로 둘것임. SSH와 HTTP, HTTPS에 더해, 난 서버에서 8천번 포트를 사용할 것이기에 사용자 지정 TCP 로 8000 포트를 추가해줬다.

  1. 인스턴스를 생성하려면 키페어 파일(.pem) 파일이 필요하다. 없으면 새로 생성. 이 .pem 파일은 ssh 로 ec2 컴퓨터에 원격접속할때마다 필요한 것이므로 유출되지 않게 잘 보관해야 한다.

  2. EC2 인스턴스를 생성한뒤 탄력적 IP 를 인스턴스에 부여해 줄것이다. EC2 인스턴스는 껐다 켜질때마다 IP 가 새로 생기는데, 이런 바뀌는 IP에 대해 탄력적으로 대응하고, 사용자에게는 고정적인 IP 를 제공하는 탄력적 IP를 부여해 줄것이다.
    EC2 콘솔 사이드메뉴의 네트워크 보안 탭-> 탄력적 IP 를 선택.
    탄력적 IP 할당 버튼 클릭. 별다른 설정 건들지 말고 생성.

  1. 탄력적 IP 를 인스턴스와 연결

  1. 탄력적 IP 를 연결했으면 해당 탄력적 IP로 SSH 접속을 해본다. 첫 접속이면 yes 해준다.

  1. ssh 로 ec2 우분투 컴퓨터에 접속됐으면 업데이트부터 하란다. sudo apt update 해준다.

  2. 그외에 필요한것들을 설치할 것이다. nodejs랑, npm이랑, pm2랑, postgresql 설치하고 환경설정할 것이다.

sudo apt-get install nodejs
sudo apt-get install npm
입력하면 다른 필수 패키지도 같이 설치할거냐 묻는데 Y 해주면 된다. 설치 이후엔 nodejs --version 으로 설치됐는지 체크해준다.
pm2 는 노드 서버를 백그라운드에서 실행되게 하고 모니터링, 멀티코어 컴퓨팅 등을 도와주는 npm 패키지이다. 글로벌로 설치해 준다.
sudo npm install -g pm2

그다음엔 postgresql 설치
sudo apt-get install postgresql postgresql-contrib

postgresql 은 설치하면 기본 사용자 postgres 가 생성된다.
sudo -i -u postgres psql
명령어를 입력하면, postgres 라는 사용자로 postgresql 을 실행한다.

psql 실행 상태에서, postgres 사용자의 비밀번호 바꾸는 명령어
ALTER ROLE postgres WITH PASSWORD 'your-password'

참고로 리눅스 계열의 경우 postgresql의 설정파일 경로는 /etc/postgresql//main 에 있다.

git clone 저장소주소 입력해서 서버 코드를 ec2에 다운받는다. 그다음 npm install 로 패키지들을 설치하고, 환경변수 파일 .env 파일을 만들어서 적절한 환경변수를 넣어준다.

touch .env
ls -a. -a 옵션을 붙이면 숨김파일(.env 같은것)도 다 보여준다.
vim .env

그다음 서버가 8000번 포트를 입력으로 받는데, http 입력은 80번 포트이므로 80번 포트를 8000번으로 포워딩 해줘야한다. 다음 명령어를 ec2 ssh 상에서 입력

sudo iptables -t nat -L
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8000

서버 코드의 Package.json 부분의 실행 스크립트에 다음과 같은 내용을 추가한다.

"start": "cross-env NODE_ENV=production PORT=80 pm2 start index.js"

그다음 npm run start 를 하면 서버가 pm2 로 인해 백그라운드에서 돌아간다.

마지막으로 ec2 콘솔 탄력적 ip 항목으로 돌아가서, 우리가 부여한 탄력적 ip 권한의 inbound 와 outbound 설정을 수정한다. ssh, http, https 의 22, 80, 443번 포트에 더해 custom tcp 로 8000번 포트를 추가한다. 아이피는 0.0.0.0/0 으로한다.

여기까지 진행했으면 해당 탄력적 아이피 주소를 브라우저에 입력하면 서버와의 통신이 된다.

pm2 monit 을 입력하면 서버에 대한 모니터링이 가능하다. 누군가가 접속하면 로그가 뜬다.

2. API Gateway 와 EC2 연결

EC2에 https 를 적용하려면 로드밸런서를 추가하고 로드밸런서에 ssl 을 적용하고... 등등 귀찮은 과정이 많다. API gateway 랑 EC2를 연결하는게 더 편하다.

https://codethief.io/ko/awsapi-gateway와-ec2-연결하기/

API gateway는 크게 HTTP-API와 REST-API 로 나뉘는데, REST 쪽이 더 복잡하고 기능이 많다. 여기선 HTTP 를 사용할 것이다.

주의할점은 경로에서는 /{proxy+} 로 만들지만, 통합할 HTTP URI 에서는 ip주소/{proxy} 로 입력해야된다.

0개의 댓글