우당탕탕 AWS EC2로 Node.js 서버 배포하기

우당탕탕 AWS EC2로 Node.js 서버 배포하기

드디어 AWS 프리티어 계정을 만들고 처음 서버 배포 연습을 해본다. 뭐하나 제대로 되기까지 한 단계 한 단계가 오래 걸렸지만, 그래도 재밌다. 문제가 해결되면 뿌듯하고, 도저히 안되면 한숨 자고 내일 다시 해보면 된다.

AWS EC2(Elastic Compute Cloud)

EC2는 AWS에서 확장 가능한 컴퓨팅 용량을 제공하는 것을 의미한다. 사용자가 필요한 시스템 요구사항에 따라 컴퓨팅 파워 조정이 가능하고, 실제로 인스턴스를 사용한 만큼만 비용을 지불한다.

※ EC2 인스턴스 생성 전, 프리티어 계정 가입 방법은 생활코딩(인프런 강의)을 참조하여 쉽게 가입했다.

EC2 인스턴스 생성하기

1. EC2 콘솔에 접속 → [인스턴스 시작]

- 생성할 인스턴스(=컴퓨터 1대)를 선택한다. 여기서는 Ubuntu를 사용한다.

2. 프리티어 사용가능한 인스턴스 유형을 선택한다.

3. pem 키 생성하기

- [새 키 페어 생성]을 선택하고 원하는 키 페어 이름을 입력한 후, 다운로드한다.

- 다운로드한 pem 키는 [.ssh] 폴더를 생성하여 그 안에 넣는다.

4. 인스턴스 생성 완료 화면

5. 인스턴스 리스트 페이지 이동

- 인스턴스 상태가 '실행 중'으로 변경되면 접속할 수 있는 상태가 된다.

- 처음에 Name이 지정되어 있지 않으므로, 여러 인스턴스를 생성할 때를 대비하여 미리 Name을 지정해준다.

여기까지가 성공적으로 인스턴스 생성 완료

EC2 인스턴스 접속하기

1. 우측 상단 [작업] → [연결]을 클릭하거나, 인스턴스를 우클릭해서 [연결] 탭을 클릭한다.

2. [SSH 클라이언트] 탭에 들어가면 접속할 수 있는 방법이 순서대로 나와있다. 순서대로 해보자.

2-1. 'SSH 클라이언트를 엽니다.'

- 나는 Windows 환경이기 때문에 Microsoft Store에 들어가서 Ubuntu를 설치해야 한다. 그런데 설치하고 나서 Ubuntu를 실행하면, 무슨 에러 때문에 실행이 안될 수가 있다. 어떤 친절한 분이 리뷰에 해결 방안을 적어두셔서 해결할 수 있었다.

*해결 방안: [제어판] - [프로그램 추가/제거] - [windows 기능 켜기/끄기] - [Linux용 Windows 하위 시스템] 체크

Ubuntu에 다시 접속한다. 이제 잘 접속된다.

Ubuntu 계정을 생성한다.

Ubuntu에서 Windows 폴더에 접근하려면 cd /mnt 명령어를 입력하면 된다.

2-2. '프라이빗 키 파일을 찾습니다. 이 인스턴스를 시작하는 데 사용되는 키는 .pem입니다.'

pem 키는 아까 다운로드받아서 [.ssh] 폴더에 잘 넣어두었다. 그러므로 [.ssh] 폴더가 있는 곳으로 이동하자.

2-3. 권한 부여) chmod 400 .pem

[.ssh] 폴더에서 위 명령어를 입력한다. 참고로 chmod는 차례대로 사용자/그룹/전체에 대한 권한을 의미한다. 그리고 read(4), write(2), execute(1)을 의미한다. 그러므로 400은 사용자(나)에게만 읽기 권한을 부여하는 것이다.

2-4. 인스턴스 연결) ssh -i ".pem" ubuntu@

예시에 나와있는 명령어를 그대로 입력해도 된다. 그럼 아래와 같이 인스턴스 접속에 성공하게 된다.

EC2 인스턴스에 서버 배포하기

1.Node.js와 npm 설치하기

- git으로 서버를 클론하기 전에 먼저 Node.js와 npm을 설치한다. (git은 설치되어 있다.)

$ sudo apt update $ sudo pat install nodejs $ sudo apt install npm

2. 원하는 디렉토리에 폴더를 생성하고 git clone 명령어로 프로젝트를 다운로드한다. 그리고 서버 폴더로 이동하여 아래 명령어를 실행시켜 필요한 의존성들을 설치해준다.

$ sudo npm install

3. 마지막으로, 포트를 개방해주는 보안 설정을 한다.

- 인스턴스의 보안 그룹 ID를 확인하고 [네트워크 및 보안] - [보안 그룹]을 클릭한다.

- [보안 그룹]에서 해당 보안 그룹 ID를 선택하고 하단에 [Edit Inbound rules]를 클릭한다.

사용할 포트 번호를 입력하고 규칙을 저장한다.

4. 드디어 서버 실행하기

- 아래 명령어를 입력하여 서버를 실행한다.

$ sudo node app.js

그리고 내 Ubuntu IP + 포트번호를 입력하면 정상적으로 서버가 실행된 것을 볼 수 있다.

5. pm2 설치하기

- pm2를 설치하면 터미널을 종료해도 서버가 계속 실행된다. (인스턴스가 실행 중일 때)

$ sudo pm2 start app.js

끝.

EC2 인스턴스 종료하기

사용을 다 했으면 잊지말고 인스턴스를 종료하자. 인스턴스를 우클릭하여 [인스턴스 중지]를 클릭한다.

[인스턴스 종료]는 인스턴스가 아예 삭제되는 것이다.

더보기 내 프로젝트 서버를 올리려고 했는데, MySQL 외부접속 허용 문제가 발생했다. 이는 해결했는데 이번엔 예외처리 에러가 계속해서 발생한다. async-await에서 에러 핸들링을 해주지 않아서 생기는 문제라고 해서 모든 async-await 구문에 예외처리(try-catch)를 해주었는데도 계속해서 발생한다. 일단 EC2 인스턴스 생성&접속 연습은 해봤으니까 내 프로젝트를 올리는 건 다시 시도해봐야겠다.

Reference

from http://havving-do-it.tistory.com/207 by ccl(A) rewrite - 2021-09-09 08:26:46