Seongwon Lim

[AWS] EC2에 Node.js 서버 배포하기 본문

AWS

[AWS] EC2에 Node.js 서버 배포하기

limsw 2022. 5. 10. 13:59
반응형

해당 포스팅 글에서는 AWS EC2의 개념을 이해하고 있다는 가정 하에 진행된다.
따라서 EC2의 개념 설명은 따로 하지 않으며 인스턴스 생성 과정부터 다루고자 한다.

EC2 인스턴스 생성하기

1. AMI 선택

EC2 → 인스턴스 → 인스턴스 시작

맨 위에 위치한 Amazon Linux 2 AMI.. 를 선택한다.

2. 인스턴스 유형 선택


프리티어에서 사용 가능한 t2.micro 유형을 선택한다.

3. 인스턴스 구성

사용자 요구사항에 맞는 인스턴스를 구성할 수 있는 파트이다. 필자는 별다른 구성 없이 다음 단계로 이동했다.

4. 스토리지 추가


크기를 8GB로 설정했다.

5. 태그 추가

다음 단계로 이동한다.

6. 보안 그룹 구성

생성한 인스턴스에 어떤 PORT를 열어두고, 그 PORT에 어떤 IP 대역이 접근할 수 있는지를 정의하는 부분이다.

모든 IP 주소에서 접근 가능하도록 하기 위해 0.0.0.0/0 으로 설정했다.
위와 같이 보안 그룹 구성이 끝난 후 검토 및 시작 버튼을 클릭 → 시작하기 클릭


키 페어 생성

시작하기 버튼을 누르면 아래와 같은 팝업창이 뜬다.

필자는 기존 키 페어를 사용하지 않고 새로운 키 페어를 만들어 사용하기 위해 다음과 같이 수정했다.


키 페어 다운로드 버튼을 클릭하여 키 페어를 다운받은 후 인스턴스 시작 버튼을 클릭한다.

이제 인스턴스 페이지로 돌아간 뒤 조금 기다리면 생성한 인스턴스가 실행 중 상태로 바뀐 것을 확인할 수 있다.


EC2에 애플리케이션 배포하기

EC2에 Node.js 서버를 배포할 예정이다. 그러기 위해서는 먼저 터미널 창에서 EC2에 접속해야 한다.

조금 전에 생성한 인스턴스를 체크하고 하단에 퍼블릭 IPv4 를 찾아서 해당 주소를 복사

keypair 권한 설정하기

  • chmod 400 keypair.pem

SSH를 통해서 인스턴스에 접속하기

  • ssh -i keypair.pem ec2-user@복사한 퍼블릭 IPv4 값
    • ec2-user : linux 유형의 ami 를 생성할 때 사용하는 값
    • ami 유형이 우분투 일 경우에는 ubuntu로 사용한다.

아이피 주소 부분에는 이전에 복사한 퍼블릭 IPv4 값을 입력한 뒤 인스턴스에 접속한다.

인스턴스에 Node.js 설치하기

공식 문서를 참고하여 인스턴스에 Node.js를 설치한다.

// nvm(노드 버전 관리자)을 설치
curl -o- [https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh](https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh) | bash

// nvm을 활성화
. ~/.nvm/nvm.sh

// Node.js의 최신 버전을 설치
nvm install node

// Node.js 실행 테스트
node -e "console.log('Running Node.js ' + process.version)"

Node.js 서버 구축하기

로컬에 디렉토리(필자는 nodejs-aws-example로 디렉토리명을 설정)를 생성 후 npm init  npm install express —-save 를 통해서 express 환경을 구성

index.js 파일을 만들고 아래와 같이 코드를 작성

// index.js
const express = require('express');
const app = express();

app.get('', (req, res, next) => {
    res.send("Hello world\n");
});

app.listen(3000, () => {
    console.log("App is listening 3000 port");
});

로컬 폴더를 인스턴스로 옮기기

새로운 터미널을 실행 후 아래와 같이 입력한다.

 

  • scp -i ./keypair.pem -r ./nodejs-aws-example ec2-user@15.164.98.203 :/home/ec2-user

이 때 필자는 Downloads 안에 keypair 및 옮기고자 하는 폴더(nodejs-aws-example)를 넣어놓은 상태에서 진행했다.

실행중인 인스턴스에 폴더가 잘 저장된 것을 확인할 수 있다.

인스턴스에서 서버 실행하기

nodejs-aws-example 폴더로 이동 후 node index.js 를 입력하면?

위와 같이 인스턴스 상에서 서버가 실행되는 것을 확인할 수 있다.

새로운 터미널을 실행한 뒤 똑같은 인스턴스에 접속 후 curl 15.164.98.203:3000 명령을 통해서 GET 요청을 보내보면?

위와 같이 인스턴스에서 실행 중인 서버에 요청에 대한 응답이 잘 이루어진 것을 확인할 수 있다.

그러면 로컬에서 해당 서버에 요청하기 위해서는 어떻게 해야할까?


로컬에서 인스턴스 서버에 요청하기

인스턴스 생성 시 보안 그룹을 설정할 때 3000번 PORT를 따로 설정하지 않았으므로 15.164.98.203:3000 주소에 요청을 보내도 응답받을 수 없다. 따라서 사용하는 인스턴스의 인바운드 규칙을 수정해야 한다.

  • AWS 홈페이지에서 왼쪽 탭의 네트워크 및 보안 탭에 있는 보안 그룹을 클릭한다.
  • 이전에 생성한 test-security-group 을 체크 후 아래 인바운드 규칙을 클릭한다.
  • 인바운드 규칙 편집을 클릭 후 아래와 같이 3000PORT 규칙을 추가한다.

규칙 저장 후 15.164.98.203:3000 주소로 GET 요청을 보내면 로컬에서 인스턴스에서 실행중인 서버에 접근할 수 있다. 아래 결과는 포스트맨을 통해서 GET 요청을 수행한 결과이다.

 
Comments