Node 강의/입문

2-6 AWS EC2를 이용한 서버 실행

kagan-draca 2024. 9. 4. 23:55

먼저, AWS에서 EC2를 생성해야 한다.

 

생성이 완료 됐다는 가정하에 작업을 진행하도록 하겠습니다.

 

1. EC2 Instance에 접속하기

 

1) EC2에 접속하기 전

 

방화벽이란 : 컴퓨터에 아무나 연결할 수 없도록 해주는 역할을 수행한다.

 

만약, 방화벽이 없다면 아무나 서버 컴퓨터에 접속을 시도 할 수도 있고,

         우리가 모르는 사이에 해킹을 당할 수 있는 상태가 됩니다.

 

2) EC2 Instance에 접속하기 위한 도구, SSH 개념 정리

 

SSH(Secure Shell)은 일반적으로 다른 컴퓨터에 연결할 때 사용되는 프로그램입니다.

 

- 다른 접속 방법보다 보안이 뛰어나 서버 연결을 위해 일반적으로 사용됩니다.

- 로컬 저장소에서 Github의 원격 저장소를 사용하기 위해서 SSH Key를 발급했던 것과 동일합니다.

 

접속 할 EC2 Instance의 방화벽에서 22번 포트가 열려있어야 접속이 가능합니다.

AWE EC2 Instance의 경우, 기본적으로 22번 포트가 열려있습니다.

 

3) AWE EC2에 접속하기

 

Windows Git bash라는 프로그램을 이용합니다.

 

Git bash에서 키 페어가

 

존재하는 폴드로 

 

cd (경로)

 

로 이동 후,

 

ls -la

 

로 경로에 잘 도착했는지 확인해줍니다.

 

이후,

 

ss -i sparta_keypair.pem ubuntu@ Public IP 4 주소

 

로 Linux의 Ubuntun에 접속해봅시다.

 

이때, Public IP4 주소는

 

EC2 Instance가 실행 상태일 때,

 

 

주소 입니다.

(보안을 위해 IPv4 주소 안 보이게 함)

 

 

그럼 위와 같이 Linux의 Ubuntu접속하게 됩니다.

 

2. AWS EC2 Node.js 설치하기

 

Ubuntu에서 Node.js설치하기 위해

 

curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt-get install -y nodejs

 

위와 같은 명령어를 작성하고 Enter 키를 누릅니다.

 

 

그럼 보기와 같이 Node JS가 설치되는 과정을 볼 수 있습니다.

 

설치가 완료되면,

 

sudo apt-get install -y nodejs

 

명령어로 Node JS의 버전을 최신 버전으로 만들어줍니다.

 

최신 버전으로 바뀌었는지 확인하기 위해

 

# 설치된 Node.js 버전 확인하기

 

node -v

 

# 설치된 npm 버전 확인하기

 

npm -v

 

위와 같은 코드를 작성해줍니다.

 

그럼 버전을 확인할 수 있습니다.

 

3. EC2에서 Todos 서버 열기

 

일단 Todos를 Git에 올리고,

 

 

Git 주소를 복사합니다.

 

그 후, Ubuntu 환경에서 Git 을 Clone 받기 위해

 

git clone <Github Repository URL>

 

입력해줍니다.

 

외부 사진 참조

그럼 위와 같이 Git이 Clone 되는걸 볼 수 있습니다.

(현재 외부 사진을 가져온 상태지만 동일한 결과를 볼 수 있습니다.)

 

그리고 yarn과 관련된 패키지를 받기 위해서는

 

Sudo npm install -g yarn

 

으로 yarn을 다운 받고,

 

 

Clone 받은 Git Repository

 

cd (경로)ls -la이동확인

해당 경로에서 

 

yarn

 

을 입력해 패키지를 import 받습니다.

 

그 결과,

node_modules가 설치된 걸 확인할 수 있습니다.

 

 

node app.js로 서버를 실행시킵니다.

 

4. Clinet 3000번지 포트로 접속 시도

 

이제 Client에서 접속을 시도해보면,

 

 

위와 같이 사이트가 안 열리는 걸 볼 수 있습니다.

 

왜냐하면, 3000번 포트로 퍼블릭한 접속을 시도했지만

 

EC2는 22번 포트로 프라이빗한 접속만 허용하고 있기 때문입니다.

 

따라서,

 

AWS에 접속해 EC2 Instance 페이지에서 3000번지 포트의 접속을 Public하게 해줘야 합니다.

 

먼저 보안 항목에서 보안 그룹 링크클릭해줍니다.

 

그 후, 인바운드 규칙 편집에서 위와 같이 작성해줍니다.

 

 

그럼 IPv4 주소 : 3000번지 주소를 통해 접속이 가능해집니다.

 

5. Ubuntu 에서 영원히 꺼지지 않는 서버 실행 프로그램, PM2

                  (게임 서버는 365일 24시간 내내 켜져 있어야 한다)

 

1) 현재 상황 검토하기

 

EC2 Instance에 ssh 명령어로 접속한 상태에서 접속이 끊기면

웹 사이트의 접속이 불가능해집니다.

 

서버가 끊기지 않게 하기 위해 어떻게 해야할까요?

 

2) Node.js를 실행하고 관리하도록 만들어진 PM2 이용하기

 

먼저, pm2를 설치하기 위해 관리자 권한 계정으로 전환합니다.

 

sudo -s

 

 

 

root@ ~~~~ 형식으로 관리자 계정에 접근한 것을 볼 수 있고

 

yarn global add pm2

 

pm2를 설치한 것을 볼 수 있습니다.

 

 

관리자 권한에서 나오기 위해서는

 

 

exit

 

 

관리자 권한종료할 수 있습니다.

 

이제,

 

pm2 start app.js

 

 

pm2를 바탕으로 app.js를 실행시킵니다.

 

만약 EC2나 Ubuntu를 종료한다면 Client는 Web 페이지에 접속할 수 있을까요?

 

 

보는 바와 같이 계속 접속되는 걸 볼 수 있습니다.

 

PM2를 바탕으로 서버를 실행시키면

EC2나 Ubuntu를 종료하더라도

서버를 계속 유지시킬 수 있습니다!!

 

(게임 서버는 365일 24시간 내내 켜져 있어야 한다)

 

 

 

6. (중요)PM2 기능 확인해보기

 

1) 실행 파일 조회(list) 및 종료(delete index)

 

그런데 만약 서버를 종료해야 한다면

 

pm2 list

 

명령어로 서버의 JS 파일명id를 확인한 후

 

pm2 delete [id 번호] 또는 pm2 delete [파일명.js]

 

로 종료시킬 수 있습니다.

 

2) JS 파일 재실행

 

pm2 restart [id 번호]  또는 pm2 restart [파일명.js]

 

만약, JS 파일을 재실행시켰다면

실행시킨 횟수를 나타내는 U가 점점 증가하는

모습을 볼 수 있습니다.

 

2) Client Web 접속 Log 출력

 

pm2 log

 

로 Client가 접속한 Web Log를 출력할 수 있습니다.

 

pm2 log -- lines [출력 하고 싶은 개수]

 

로 입력하면 개수만큼 로그가 출력됩니다.

 

 

6. 서버와 도메인 연결하기

 

가비아 사이트에서 구매한 도메인을 환인하고

 

DNS 관리툴을 클릭해줍니다.

 

DNS 관리툴에서 도메인이 "설정된 DNS 레크드 정보가 없습니다"를 확인하고,

 

설정을 눌러줍니다.

 

 

레코드 수정을 누르고

 

 

레코드 추가 버튼을 눌른 후,

 

AWS의 EC2 Instance의 퍼블릭 IPv4 주소를 가져옵니다.

 

 

 

위와 같이 작성 후, 확인 및 저장 버튼을 누르면 됩니다. 

 

이제 Web에서 확인해보면,

 

도메인으로 Client가 서버에 접근한 것을 볼 수 있습니다.

 

만약, Insomnia에서 도메인을 사용해 DB에 데이터를 조작한다면(현재는 POST로 확인)

 

 

정상적으로 잘 DB에 데이터가 잘 저장된 걸 확인할 수 있고

 

 

Client에서도 새로운 데이터를 확인할 수 있습니다.