엘리스 AI트랙 4기/프로젝트

AWS EC2에 프로젝트 배포하기_2탄

남쪽마을밤송이 2022. 5. 30. 16:55

1탄에서 이어지는 내용입니다.

 (4) pm2 설정하기 

  • pm2는 Node.js 프로세스 관리자이다.
  • BackEnd 서버를 무중단 배포하기 위해 이 pm2 모듈을 사용할 것이다.
  • 먼저 pm2를 Global로 설치한다.

  • pm2를 사용하기 전에  npm start 를 통해 문제없이 서버가 시작되는지 확인한다.
    • 나는 또 여기서 자꾸 아래와 같은 오류가 떴는데 nodejs의 버전 문제였다. (참고)
    • 그래서 다음과 같이 버전을 업그레이드 해줬다.
       nodejs -v / node -v 
        - 현재 버전 확인

       sudo npm cache clean --force 
       sudo npm install -g n 
       sudo n stable 
        - n 플러그인을 이용해 버전 업그레이드

       nodejs -v / node -v 
        - 업그레이드 된 버전 확인
    • 버전 업그레이드 후에는 정상적으로 서버가 시작되는 걸 확인했다.
  • 문제없이 작동하는 걸 확인하면 백엔드 코드가 있는 폴더로 들어가서 pm2에 프로세스를 등록해준다.
     pm2 --name back-server start npm -- start 

  • 여기까지 하면 이제 백엔드쪽 배포도 끝이 났다.

 [04 도메인 연결 ] 

  • 이 부분은 지금 해도 되고 VM 세팅 전 인스턴스 생성 직후에 해도 된다.
  • 나는 무료 도메인 이용 사이트 중 Freenom내도메인.한국을 고민하다가 내도메인.한국이 최상위 도메인(kro.kr)이 더 깔끔해서 여길 이용했다.
  • 대부분 설정 환경은 비슷할텐데 도메인 관리 탭에 들어가서 IP연결(A)에 Public IP를 연결해주면 된다.
    • IP연결(AAAA)는 IPv6를 위한 것이라고 한다.
    • 나는 AWS 인스턴스 상세에  퍼블릭 IPv4 주소 라고 되어 있길래 IP연결(A)를 이용했다.
    • 나머지 연결 방식 개념은 여기를 참고하자.

 [05 방화벽 정책 추가 ] 

 (1) 도메인 접속 

  • 도메인 연결까지 하고 해당 도메인으로 접속하자 익숙한 우리 프로젝트의 메인 페이지가 떴다!

  • 그런데 여기서 문제, 백엔드와 통신이 전혀 되지 않았다. 모든 요청에 위와 같이  ERR_CONNECTION_TIMED_OUT  에러가 났다. CONNECTION_REFUSED가 아닌 TIMED_OUT이길래 또 프리티어 사양이 너무 구린탓인가 했는데 그게 아니었다.

 (2) AWS 방화벽 설정 

  • 위 에러에 대해서 또 열심히 구글링을 해보니 방화벽 문제일 수 있다는 의견이 많았다.
  • 그래서 "방화벽? 무슨 방화벽 나 방화벽 설정은 하지도 않아서 다 열려있을텐데..." 하다가 "아! AWS 자체 방화벽 정책에서 막혀있나 보구나" 거의 뭐 유레카였다.
  • 바로 AWS 인스턴스 설정을 찾아갔다. 보안 탭에서 아래로 내리면 인바운드, 아웃바운드 방화벽 정책을 확인할 수 있는데 VM으로 요청이 들어오는 게 문제니까 인바운드 정책을 추가하면 된다. 보안 그룹을 클릭해서 정책 설정 화면으로 넘어가자.

  • 기존에는 SSH(22), HTTP(80), HTTPS(443)번 포트만 열려있었는데 거기에 백엔드 통신시 사용하는 5001번 포트를 추가해줬다.

 [06 배포 완료 ] 

  • 이렇게 방화벽 설정을 마쳐주었더니 바로 응답을 잘 받아오는 것 확인!!!!!! 이거지 이거지~😆

 [07 느낀점] 

  • 1, 2차 프로젝트 모두 내가 배포를 진행해서 AWS로 옮기는 작업도 해보고 싶었는데, 사실 프로젝트가 끝나고 코딩 테스트 스터디에 집중하느라 좀 미루다가 3차 프로젝트 직전에 배포를 끝마쳤다.
  • 다행히 이제는 구글에 정보가 너무 많아서 약 6시간 만에 (내 기준 빠르게) 배포를 성공할 수 있었다.
  • 하지만 여전히 HTTP로 동작하기 때문에 카카오맵에서 내 위치 사용은 되지 않을 것이다. 다음번에(이제 프로젝트 시작하면 언제가 될까😅) SSL을 적용하여 자물쇠 채우는 과정을 수행하고 포스팅해야지..!