본문 바로가기
내일배움 강의/강의- Node.js 입문, 숙련

입문 2주차 11 AWS 배포하기

by GREEN나무 2024. 11. 24.
728x90

1. AWS EC2를 대여하여 Node.js 서버를 배포할 수 있습니다.
2. AWS의 방화벽 역할을 담당하는 보안 그룹을 설정할 수 있습니다.
3. 배포한 Node.js 서버와 도메인을 연결할 수 있습니다.


01. 환경 설정하기

1) AWS 가입하기 (승인까지 최대 24시간이 걸리니, 미리 해주세요!)

가입 승인에 시간이 소요될 수 있으니, 미리 가입해주세요!
AWS 가입하기 : https://portal.aws.amazon.com/billing/signup#/start
​EC2 확인하기 : https://ap-northeast-2.console.aws.amazon.com/ec2/home?region=ap-northeast-2
​AWS는 개인에게 클라우드 환경의 가상서버를 제공합니다. 기본 사양의 서버(EC2)를 1년 동안 무료로 사용할 수 있습니다.

2) 가비아 가입하기 & 도메인 구입하기

접속하기 & 가입하기: https://www.gabia.com
가비아에서 할인이벤트(500원/1년)를 진행하는 도메인을 구매해서 진행 할 예정입니다.
기억하기 - 무통장입금(가상계좌)으로 결제하시기를 추천드립니다!
로그인 후, 메인 페이지에서 원하는 도메인을 검색해주세요.

500원/1년으로 할인중인 도메인이 있으니, 추천드립니다.
결제 기간을 1년으로 맞춰주세요. 그래야 500원으로 이용할 수 있습니다.


1000원 이하는 카드 결제가 불가합니다. 무통장입금을 선택하세요

마이페이지(링크)에 접속하면 구매한 도메인이 추가됩니다.

 


02. AWS EC2 Instance 생성

1) EC2 Instance 생성

AWS EC2에서는 컴퓨터 하나의 단위를 Instance 라는 이름으로 부릅니다.
   AWS EC2 : EC2란 Amazon Elastic Compute Cloud의 줄임말로서 AWS에서 제공하는 클라우드 컴퓨팅입니다. 독립된 컴퓨터를 임대해주는 서비스로서 AWS의 대표적인 서비스 입니다.

그래서 EC2 Instance를 생성한다는건, 서버 컴퓨터를 하나 대여한다는것과 같습니다.
AWS Console 주소 : https://console.aws.amazon.com/console/home

AWS Console 페이지로 이동
만약 로그인을 하지 않았다면 로그인을 한 뒤 콘솔콘솔 홈으로 이동하세요


Region 선택
우리가 앞으로 만들 EC2 Instance가 어떤 지역에서 켜질지 선택할 수 있습니다.
이 지역이 가까울수록 접속 속도가 빠르니 우리는 서울(ap-northeast-2)을 선택합니다!

EC2 Instance 생성: EC2 서비스 페이지로 이동

   상단 검색창에서 EC2 를 입력해 서비스 부분의 맨 위에 나온것을 누릅니다.


EC2 Instance 생성: 운영체제 선택
   왼쪽 메뉴에서 “인스턴스” 를 눌러 아래 페이지로 이동합니다.


우측 상단에 있는 주황색 “인스턴스 시작” 버튼을 눌러 아래 페이지로 이동합니다.



“애플리케이션 및 OS 이미지”에서 Ubuntu를 선택하고, Ubuntu Server 22.04 LTS(HVM)을 선택합니다. (아키텍처는 64비트(x86)으로 지정해주세요.)


EC2 Instance 생성: 인스턴스 유형 선택
“프리 티어 사용 가능” 이라고 적혀있는 t2.micro 타입을 선택합니다.


EC2 Instance 생성: 키 페어(keypair) 이름 지정 및 다운로드
“새 키 페어 생성” 선택


키 페어 이름, 키페어 유형, 프라이빗 키 파일 형식을 설정합니다.

“키 페어 생성” 선택


“키 페어 생성” 버튼을 누르면 생성한 키 페어 파일이 다운로드 됩니다.
키 페어(Keypair)는 여러분의 서버에 접속할 수 있도록 해주는 신분증입니다!
당연히 누군가에게 공유해서도 안되고, 잃어버리면 다시는 발급 받을수 없으니 EC2 Instance를 지우기 전까지는 절대 잃어버리지 않도록 소중하게 보관하세요

 

 

8gib, gp2로 하기


EC2 Instance 생성: EC2 Instance 시작
“인스턴스 시작” 선택


“인스턴스 ID” 선택


생성한 인스턴스를 확인할 수 있습니다.

 


2) EC2 Instance 종료하는 방법

인스턴스 종료는 인스턴트 삭제입니다. 종료말고 중지시키세요


무료 기간(1년) 후 결제가 되기 전에, 이렇게 종료하세요!
대상 인스턴스에 마우스 우클릭 > 인스턴스 중지 또는 종료 중 하나를 클릭하면 명령을 실행합니다.

1. 인스턴스 상태(실행중)를 우클릭 -> 중지
2. 상단 우측의 인스턴스 상태 -> 중지


3) EC2 Instance에 접속하기

◆ 방화벽이란?

방화벽은 여러분의 컴퓨터에 아무나 연결할 수 없도록 해주는 역할을 수행합니다.
AWS에서는 “Security Group” 또는 “보안 그룹”이라는 이름으로 방화벽을 제공합니다.
만약, 방화벽이 없으면 아무나 서버 컴퓨터에 접속을 시도 할 수도 있고, 우리가 모르는 사이 해킹을 당할 수 있는 상태가 됩니다.

 

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

SSH(Secure Shell)는 일반적으로 다른 컴퓨터에 연결할 때 사용되는 프로그램입니다.
   다른 접속 방법보다 보안이 뛰어나 서버 연결을 위해 일반적으로 사용됩니다.
   로컬 저장소에서 Github의 원격 저장소를 사용하기 위해 SSH Key를 발급했던 것과 동일합니다.
접속 할 EC2 Instance의 방화벽에서 22번 포트가 열려있어야 접속 가능합니다.
   AWS EC2 Instance의 경우, 기본적으로 22번 포트가 열려있습니다. 



◆ AWS EC2에 접속하기

macOS

더보기

Mac은 ssh가 기본 설치되어 있어, 명령어로 바로 접근 가능
터미널을 열기 (⌘ + Space로 Spotlight 에서 터미널 입력)

EC2 Instance를 생성하면서, 다운로드 받은 키 페어의 접근 권한을 바꿔줘야합니다.

# 다운로드 폴더로 접근합니다.
cd Download

# sparta_keypair.pem 파일의 권한을 읽기만 가능하도록 수정합니다.
sudo chmod 400 sparta_keypair.pem


SSH로 접속하기

ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피

예)

ssh -i sparta_keypair.pem ubuntu@13.125.253.21

 

Windows: ssh가 없으므로, git bash라는 프로그램을 이용!
gitbash를 실행하고, 아래를 입력!

# 키페어 파일이 있는 폴더로 접근합니다.
# cd "V:\내일배움 개임서버\aws 키페어"
cd Download

# sparta_keypair.pem 파일의 권한을 읽기만 가능하도록 수정합니다.
$ chmod 400 strobus_keypair.pem

# enter

# 연결
$ ssh -i strobus_keypair.pem ubuntu@3.39.248.253

# Enter

# 답변 yes

 

# ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
 ssh -i strobus_keypair.pem ubuntu@3.39.248.253

내 IP는 퍼블릭 IPn4주소를 복사해오세요


Key fingerprint 관련 메시지가 나올 경우 Yes를 입력해주세요!


git bash를 종료할 때는 exit 명령어를 입력하여 ssh 접속을 먼저 끊어주세요.


4) 간단한 리눅스 명령어 연습하기

일반적으로 리눅스 서버에서는 마우스(GUI) 대신 쉘 명령어(CUI)를 통해 운영체제의 기능을 이용합니다.
리눅스는 왜 마우스를 사용하지 않을까요?
서버에서 자주 필요하지 않은 화면을 그려내기 위해 CPU, Memory(RAM)를 사용하는것보다 서버 프로그램을 운영하는데 사용하는게 훨씬 비용 효율적이기 때문에 이와 같이 사용하는것이 기본이자 관습이 되었습니다.
화면을 사용하지 않으니 당연히 마우스도 사용하지 않게 되었습니다. 


[가장 많이 쓰는 몇 가지 명령어]

ls -l 파일명 : 파일 권한을 확인

ls: 내 위치의 모든 파일을 보여준다.
ls -la : 숨겨진 파일도 포함한 내 위치의 모든 파일을 보여준다.

pwd: 내 위치(폴더의 경로)를 알려준다.

mkdir [폴더 이름]: 내 위치 아래에 새 폴더를 만든다.

cd [폴더 이름]: 나를 해당 폴더로 이동시킨다.

cd .. : 나를 현재 위치의 상위 폴더로 이동시킨다.

cp -r [복사할 파일/폴더] [붙여넣기 할 위치]: 복사 붙여넣기

rm -rf [지울 파일/폴더]: 지우기 (이 명령은 매우 위험합니다. 신중히 사용하세요)

# 명령어 사용 당시에만 관리자 권한이 부여됩니다.
sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다.

# 명령어 사용 이후 모든 명령이 관리자 권한으로 실행됩니다.
sudo su: 관리자 권한이 있는 계정으로 접속한다. (exit 입력하면 관리자 계정에서 로그아웃)

Tip! 위로 향하는 방향키를 ☝🏻 누르면 바로 전에 썼던 명령어가 나옵니다.


03. AWS EC2 Node.js 설치

1) EC2 Instance에 Node.js 설치하기

우리가 사용중인 EC2 Instance에서는 모든 것을 명령어로 조작합니다.
그래서 Node.js 설치 또한 명령어로 간단히 설치할 수 있습니다.

 

git bash 터미널에서 AWS EC2에 접속합니다.
아래에 있는 설치 명령어는 Node.js v18을 설치해주는 명령어입니다!
[코드스니펫] Node.js 설치 명령어

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

Node 설치 확인

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

# 설치된 npm 버전 확인하기
npm -v

정상 작동화인


apt-get : 
apt-get 명령어는 yarn을 통해 사용하는 것 처럼, 리눅스 운영체제에서 지원하는 패키지 매니저에서 원하는 패키지를 설치하는 명령어입니다.
여기서, apt(Advanced Package Tool)는 리눅스 운영체제의 대표적인 패키지 관리 도구 중 하나랍니다. 😉​
설치 및 설치 확인 명령어
설치: EC2 Instance에 접속이 된 상태라면 위에서 복사한 명령어를 붙여넣고 엔터를 누르고 기다리면 됩니다.
설치 확인: 이전에 아래와 같은 명령어로 확인했던것처럼 확인할 수 있습니다!

04. 서버 프로그램 실행 및 웹사이트 접속

1) EC2 Instance에서 서버 실행

GitHub에 있는 Repository Clone
Github의 원격 저장소로 부터 코드를 가져오는것이 Clone이라고 이해할 수 있습니다.
1. 이전 수업에서 만든 GitHub 레파지토리 페이지로 들어가 초록색 “Code” 버튼을 눌러 HTTPS의 클론 웹 URL을 복사하세요


EC2 Instance 터미널에 접속해 복사한 내용을 붙여 넣어주세요.
아래와 같은 형식으로 나타나야 합니다.

# 원격 저장소로 부터 코드 가져오기
git clone <Github Repository URL>

# 예시
git clone https://github.com/BlueStrobus/Node.Js_study.git

프로젝트 실행

프로젝트 실행 순서
   1. cd 레퍼지토리이름 : 원격 저장소로부터 가져온 프로젝트로 이동합니다.

            cd Node.Js_study
   2. sudo npm install -g yarn : yarn을 사용하기 위해, 전역으로 yarn을 설치합니다.
   3. yarn : 원격 저장소로 부터 가져온 프로젝트의 의존성 및 패키지를 설치합니다.
   4. node app.js : 프로젝트를 실행합니다.

더보기

웹 사이트 접속

EC2 Instance IP 복사( ID눌러서 들어가고 퍼블릭IPv4를 복사하세요)
브라우저에 주소 입력

http://<복사한IP>:3000

http://3.39.248.253:3000

아직 서버 방화벽에서 우리가 접속하는것을 허용하지 않았기 때문에 접속이 안됩니다. (위에서 말했듯이 22번 포트만 연결가능)


2) IP Address(IP 주소)와 Port(포트)


IP 주소(IP Address)

IP 주소(IP Address)는 컴퓨터가 통신할 수 있도록 컴퓨터마다 가지는 고유한 주소입니다. 정확히는 통신이 가능한 모든 기기가 통신할 수 있도록 가지고 있는 인터넷 세상의 특수한 주소입니다.
각 기기가 어디에 있는지 알려주는 좌표(Coordinate)와 비슷하다고 생각하면 쉽습니다.
이 주소는 공인 IP 주소와 사설 IP 주소가 나뉘어져 있는데,
일반적으로 인터넷을 사용하기 위해서는 반드시 하나 이상의 공인 주소가 있어야만 합니다.
공인 IP주소(Public IP Address)는 인터넷 전체에서 유일하며, 이 주소를 통해 외부에서도 접근이 가능합니다.
사설 IP주소(Private IP Address)는 하나의 네트워크 내부에서만 사용되며, 외부에서는 접근이 불가능합니다.


포트(Port)

통신이 가능한(IP를 가진) 모든 기기는 포트(Port)라고 불리우는 데이터가 드나들 수 있는 통로가 있습니다. 
하나의 포트는 여러 프로그램이 같이 사용할 수 없다는 의미가 됩니다.
만약, IP 주소를 집 주소에 비유하자면, 포트는 그 집 안의 특정한 방에 해당하는 것으로 생각하면 쉽게 이해할 수 있습니다.


3) EC2 Instance 포트 설정: AWS 보안 그룹(Security Group)

기반 지식이 생겼으니 접속이 안되는 이유를 다시 설명을 드리자면,
저희가 대여한 EC2 Instance의 방화벽에서 3000번 포트를 막고 있기 때문에 Node.js로 서버를 아무리 켜도 접속을 할 수 없는것 입니다.
 EC2 Instance가 접근을 허용하도록 방화벽을 수정하기
AWS Console 주소 : https://console.aws.amazon.com/console/home

보안 그룹(Security Group) 설정 페이지 접속
   AWS에서는 “Security Group” 또는 “보안 그룹”이라는 이름으로 방화벽을 제공합니다.

‘인스턴스’ 페이지 접속
   생성된 EC2 선택하면 노출되는 하단 창에서 ‘보안’ 탭 선택
   이후 ‘보안 그룹’ 이라는 이름을 가진 링크를 누릅니다.

 

인바운드 규칙 변경
   ‘인바운드 규칙 편집’ 버튼 클릭



정보 입력 후 저장
   ‘규칙 추가’ 버튼을 눌러 아래의 정보를 추가로 입력합니다.
      유형: 사용자 지정 TCP
      포트 범위: 3000 ← 여러분들의 Node.js 서버 포트번호 입니다. 
      소스: Anywhere-IPv4

   0.0.0.0/0는 나중에 개인 pc로 바꾸기(모든 접근을 허용하면 해킹당기 쉬워짐)

브라우저에서도 정상작동.

http://3.39.248.253:3000


4) 영원히 꺼지지 않는 서버 실행 프로그램, PM2

에러로 인한 서버꺼짐 방지하기


현재 상황 검토하기
여러분은 지금 EC2 Instance에 ssh 명령어로 접속한 상태일텐데요, 이 접속이 끊기는 순간 웹 사이트의 접속은 불가능해집니다.
서버 컴퓨터에서는 항상 서버 프로그램이 켜져 있어야 들어온 요청을 처리해 응답을 보낼 수 있기 때문인데요, 지금은 ssh 접속이 끊기거나 실행중인 Node.js 프로그램을 끄면 웹 사이트에 접속할 수 없는 상황입니다.


이 상황을 해결하기 위해 우리는 Node.js를 실행하고 관리하도록 만들어진 pm2를 이용할 예정입니다. 


pm2란 프로세스 매니징 도구로 Node.js를 편하게 관리할수있게 도와주는 라이브러리입니다.

pm2는 대표적으로 터미널을 종료하더라도 웹 서버가 실행될 수 있게 하거나 Log 정보들을 실시간으로 확인하여 현재 서버의 상황을 더욱 빠르고 명확하게 관리할 수 있습니다.


pm2 설치

pm2는 관리자 권한이 필요하기 때문에 관리자 계정으로 전환합니다.

# Linux의 관리자 계정으로 전환합니다.
sudo -s


yarn으로 설치
global 옵션은 특정 폴더나 프로젝트에 설치하는게 아닌 전역 프로그램으로 설치하겠다는 의미입니다.

# pm2 라이브러리를 global로 설치합니다.
yarn global add pm2

 


여기에서 exit를 명령하면 관리자권한에서 일반적인 Ubuntu 계정으로 나가집니다.

 

여기에서 pm2로 app.js 실행

# pm2 로 app.js 파일을 실행합니다.
pm2 start app.js



위 명령어를 실행한 뒤 아래처럼 보인다면 성공적으로 실행된것입니다!

vscode 에서  exit으로 서버에서 나와도 브라우저애서 서버가 유지됩니다,

 

서버 종료하기

# pm2 id 조회
pm2 list

# pm2의 id가 0인 프로세스를 종료합니다.
# pm2 delete id번호
pm2 delete 0


pm2 명령어 맛보기

# 깃허브의 app.js 위치에 pm2로 실행학세요
ubuntu@ip-172-31-15-140:~/Node.Js_study$ pm2 start app.js

pm2 restart [idNumber]
현재 실행중인 pm2 서비스를 재시작합니다.

# app.js를 재시작합니다.
pm2 restart app.js

# 0번 ID의 서비스 (app)을 재실행합니다.
pm2 restart 0



pm2 list : pm2로 관리되는 모든 서비스의 목록을 출력합니다.

# 모든 서비스들의 목록을 출력합니다.
pm2 list


pm2 delete [pid number] : 실행중인 pm2 서비스를 종료합니다.

# 0번 ID의 서비스를 종료합니다.
pm2 delete 0


pm2 log :
실행한 서비스들의 로그를 출력할 때 사용합니다.
에러 메시지까지 확인할 수 있어 디버깅에 유용하게 사용할 수 있습니다.

# 모든 서비스의 로그를 출력합니다.
pm2 log


pm2 logs --lines [number] : 가장 최근에 발생한 로그 중에서 지정한 수만큼 출력합니다.

# 마지막으로 발생한 로그 순서대로 100개를 출력합니다.
pm2 logs --lines 100

 

로그화면에서 나가기 : ctrl + c


 pm2 CLI 명령어 : https://pm2.keymetrics.io/docs/usage/process-management/

 

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

1) 내 서버에 도메인 연결하기

[코드스니펫] 가비아 마이페이지 주소
https://my.gabia.com/service#/

DNS 관리툴 클릭


DNS 설정 클릭


레코드 수정 클릭 -> 레코드 추가 클릭


호스트 이름에 @, IP주소에 EC2 Instance의 Public IP 입력 -> 확인, 저


저장한 뒤 아래처럼 보이면 됩니다!


2) 10분 정도 기다려주세요!

전 세계에 있는 DNS 서버에 내 서버 주소를 전파해주는데, 이 과정에서 시간이 조금 필요합니다.

3) DNS란?

우리가 접속하는 컴퓨터는 숫자로 되어있는 주소(IP Address)가 붙어있습니다.
우리가 흔히 사용하는 주소(URL)는 우리가 알아보기 쉽게 하는 등의 이유로 IP 주소에 별명을 붙이는데, 이것이 도메인입니다.
도메인을 실제 서버를 찾을수 있도록 변환해주는 시스템 DNS 라고 합니다.

 

4) 도메인으로 접속

내 IP주소로 지금 node 서버가 잘 돌고 있나요? 먼저 확인해봅니다.
http://내AWS아이피:3000/


약간의 시간을 가진 후, 내 도메인으로 접근하면, 접속이 됩니다. 🙂​
http://내도메인:3000/

내 도매인 : strobus.store


이 외에도, insomnia API Client를 통해 API를 테스트할 수 있니다. ​

 



 

GitHub - BlueStrobus/Node.Js_study: 스파르타 노드js7기 Node.js입문, 숙련

스파르타 노드js7기 Node.js입문, 숙련. Contribute to BlueStrobus/Node.Js_study development by creating an account on GitHub.

github.com