노드 프로젝트 AWS에 배포하기 (ec2, rds)

유석현(SeokHyun Yu)·2022년 12월 18일
1

Node.js

목록 보기
28/29
post-thumbnail

1. AWS에 로그인 (계정이 없다면 회원가입)


2. AWS 지역(Region) 변경

현재 AWS 지역이 버지니아 북부로 되어있다.

우리는 서울 지역에 있는 AWS를 사용할 것이기 때문에 표시된 곳을 클릭하여 지역을 서울로 바꿔주자.


3. ec2 인스턴스 생성하기

  1. 콘솔 홈에서 위에 있는 검색창에 "ec2"를 검색하여 ec2 서비스 페이지로 이동한다.



  1. "인스턴스 시작" 버튼을 누르고 그 밑에 나오는 "인스턴스 시작"을 눌러서 인스턴스 생성 페이지로 이동한다.



  1. "이름 및 태그"에서 인스턴스의 이름을 설정해준다.


  1. "키 페어(로그인)"에서 인스턴스에 접속할 때 필요한 키 페어를 생성해준다. 생성하고 나면 pem 파일이 하나 다운받아지는 걸 볼 수 있다.




  1. "네트워크 설정"에서 SSH를 "위치 무관"에서 "내 IP"로 설정해주고 HTTPSHTTP 트래픽 허용을 모두 체크해주자.


  1. 마지막으로 오른쪽의 "인스턴스 시작"버튼을 클릭하여 ec2 인스턴스를 생성하면 된다.




4. RDS 생성하기

  1. ec2 때와 마찬가지로 검색창에 "rds"를 검색하여 RDS 서비스 페이지로 이동한다.



  1. "데이터베이스 생성' 버튼을 클릭하여 데이터베이스 생성 페이지로 이동한다.


  1. "엔진 옵션"에서 MySQL을 선택한다.

  1. "템플릿"에서 프리 티어를 선택한다.

  1. "설정"에서 DB 인스턴스 식별자, 마스터 사용자 이름, 마스터 암호를 설정해준다.

  1. "연결"에서 EC2 컴퓨팅 리소스에 연결을 선택한 뒤 EC2 인스턴스에서 위에서 생성한 ec2 인스턴스를 선택해준다.


  1. 맨 밑에 있는 "데이터베이스 생성" 버튼을 눌러 데이터베이스 생성을 완료한다. 데이터베이스 생성까지는 몇 분 정도 걸린다.


5. 터미널에서 SSH로 ec2 연결

  1. ec2 서비스 페이지로 이동하여 인스턴스 목록을 확인한다. 그리고 위에서 생성한 인스턴스의 ID를 클릭하여 인스턴스 상세 페이지로 이동한다.


  1. "연결" 버튼을 클릭하여 "인스턴스에 연결"로 이동한다. 여러가지 연결 방법 중 "SSH 클라이언트"를 클릭한다.



  1. 터미널을 열고 아까 다운로드 받았던 "deploy-test.pem" 키 페어가 있는 위치로 이동한다. 이동한 위치에서 chmod 400 deploy-key.pem 명령으로 키 페어의 접근권한을 수정해준 뒤, ssh -i "deploy-key.pem" ec2-user@ec2-13-209-49-76.ap-northeast-2.compute.amazonaws.com 명령으로 ec2 인스턴스에 연결한다.

6. DBeaver와 RDS 연결

  1. DBeaver를 실행한다(없으면 DBeaver를 설치해주자).

  1. 아래 사진에 표시된 버튼을 클릭한다. DBeaver에서 관리할 새로운 DB를 연결하는 역할의 버튼이다.


  1. MySQL을 선택한 뒤 다음을 클릭한다.

  1. 데이터베이스를 연결하기 위해 여러가지를 설정하는 창이 나온다. 먼저 "Main"탭에서는 Server Host, Username, Password를 설정해주면 된다. 이를 설정하기 위해서는 AWS의 RDS 서비스 페이지에서 아까 생성했던 DB의 상세 페이지로 들어간 뒤 엔드포인트를 복사하여 Server Host에 붙여넣고 UsernamePassword는 RDS를 만들 때 설정했던 마스터 사용자 이름, 마스터 암호를 각각 입력해주면 된다.



  1. 현재 RDS는 외부에서 접속할 수 없고 ec2 인스턴스를 통해서만 접속할 수 있다. 따라서 "SSH"탭으로 이동한 뒤 Use SSH 터널을 체크해주고 Host/IP, User Name에 ec2 연결 페이지에 있는 퍼블릭 IP 주소사용자 이름을 각각 입력해주고, Authentication Method"Public Key"로 설정한 뒤 위에서 다운로드 받았던 deploy-test.pem 키 페어를 설정해준다.



  1. "Test tunnel configuration" 버튼을 눌러 ec2와의 연결을 테스트한다.


  1. "Test Connection" 버튼을 눌러 RDS와의 연결을 테스트한다.


  1. "완료" 버튼을 눌러 설정을 끝내고 새로 연결된 RDS를 더블클릭 하여 연결해준 뒤 데이터베이스 목록을 확인한다. 아직 생성한 데이터베이스가 없기 때문에 sys를 제외하고는 아무것도 뜨지 않는다.



  1. 데이터베이스 목록에서 오른쪽 마우스를 눌러 "Create New Database"를 클릭한 뒤 노드 서버에서 사용할 데이터베이스를 하나 생성한다.





7. ec2에 Node 설치하기

  1. 위에서 ec2 인스턴스와 연결했던 터미널을 준비한다.

  1. 명령줄에 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash를 입력하여 nvm(노드 버전 관리자)을 설치한다.

  1. 명령줄에 . ~/.nvm/nvm.sh를 입력하여 nvm을 활성화한다.

  1. nvm install 16.0.0를 입력하여 16.0.0 버전의 Node를 설치해준다.

8. ec2에 Git 설치하기

  1. sudo yum install git -y를 입력하여 Git을 설치해준다.

9. Git 레포지토리에 있는 폴더 가져오기

  1. git clone으로 레포지토리를 복사한다.

  1. 만들어진 폴더로 이동한다.

  1. npm i 명령으로 패키지를 다운받는다.

  1. vim으로 .env 파일을 설정해준다. 데이터베이스 host는 위에서처럼 RDS의 엔드포인트로 해주면 된다.


10. 포트 리디렉션

서버가 http 프로토콜을 이용하여 외부와 통신하려면 서버의 포트를 http 포트인 '80'로 열어야 하지만 포트 번호를 '1024' 밑의 숫자로 설정하려면 과정이 복잡하다.

따라서 서버를 '8080' 포트로 연 뒤 '80' 포트로 들어오는 요청들을 '8080' 포트로 리디렉션하여 받을 것이다.

그러기 위해서는 sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 명령을 ec2와 연결된 터미널에 입력하면 된다.

만약 위 명령으로 했는데 ERROR error: err_connection_refused 에러가 발생한다면 sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 명령을 입력해보자.

참고로 ec2 인스턴스를 중지했다가 다시 시작할 경우, 포트 리디렉션 설정을 다시 해주어야 한다.


11. 코드 빌드 후 pm2로 서버 실행

  1. 설정한 스크립트로 빌드 후 서버를 실행한다.

  1. npx pm2 log로 서버가 잘 돌아가고 있는지 확인한다.

  1. DBeaver에서 테이블이 잘 생성되었는지 확인한다.

12. Postman으로 테스트

  • host는 ec2의 퍼블릭 IPv4 주소를 이용하면 된다.
  • 로컬에서 http://localhost:8080/tweet 이런식으로 요청을 보냈었다면, 이제는 http://{퍼블릭 IPv4 주소}/tweet로 요청을 보내면 된다.

  1. 회원가입

  1. 로그인

  1. CRUD
profile
Backend Engineer

0개의 댓글