01. 준비하기
- 환경 설정하기
- AWS 가입하기(기본 사양의 서버(EC2)를 1년 동안 무료로 사용할 수 있다.)
- 가비아 가입하기 & 도메인 구입하기 (결제 기간을 1년, 금액은 최대한 싼 가격으로 구입 추천)
02.시작하기
- EC2 Instance 생성
- 웹 서버 개념
- 웹 클라이언트(브라우저) - 웹 서버:
==> 웹 클라이언트는 웹 서버에 요청을 해서 원하는 데이터를 받아가는 일방적인 관계 - 서버 컴퓨터 - 웹 서버(프로그램) :
==> API 서버, 웹 서버, 앱 서버 등이 모두 프로그램, 서버 컴퓨터는 서버 프로그램을 실행하고 웹 서비스에 접속할게 도와준다. - EC2는 AWS에서 제공하는 서버 컴퓨터 대여 서비스라 생각하면 된다.
- 웹 클라이언트(브라우저) - 웹 서버:
- EC2 Instance 생성
- AWS Console 주소로 이동 (지역은 서울로 선택)
- EC2 검색 > 첫번째 선택
- 인스턴스 Click > 인스턴스 시작 Click > Ubuntu Sever 선택(20.04 LTS 무료 제공 선택)
- "프리 티어 사용 가능" t2.micro 탑입을 체크하고 "검토 및 시작" > 시작하기 Click
- "새 키 페어 생성" 선택 > 키 페어 name 설정 > 키 페어 다운로드 Click > "인스턴스 시작" >
- EC2 Instance 종료
- 대상 인스턴스에 마우스 우클릭 > '인스턴스 상태'를 Click. 중지 또는 종료 중 하나를 Click
- EC2 Instance 접속
- 방화벽이란?
==> 컴퓨터에 아무나 연결할 수 없도록 "Security Group" 또는 "보안 그룹"으로 방화벽을 제공. - SSH 개념 정리
==> Secure Shell은 다른 컴퓨터에 연결할 때 사용되는 프로그램 , 다른 접속 방법보다 보안이 뛰어나 서버 연결을 위해 일반적으로 사용된다. - AWS EC2에 접속하기(Windows)
==> git bash 프로그램 이용
==> gitbash 실행 > ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피 입력 > Key fingerprint 메시지 나올 경우 Yes 입력
==> git bash 종료할 떄는 exit 명령어를 입력하여 ssh 접속을 먼저 끊어준다.
- 간단한 명령어
- cd [ 위치 ] : 지정한 폴더로 이동시킨다.
cd . . : 상위 폴더로 이동
sudo [실행 할 명령어] : 명령어를 관리자 권한으로 실행
sudo su : 관리자 권한이 있는 계정으로 접속
- cd [ 위치 ] : 지정한 폴더로 이동시킨다.
- 간단한 명령어
- 방화벽이란?
- 웹 서버 개념
ssh -i (키페어) ubuntu@AWS에적힌내아이피
예) ssh -i ./sparta_keypair.pem ubuntu@54.180.88.11
03. Node.js 및 MongoDB 설치
- EC2 Instance에 Node.js 설치하기
// Node.js 설치 명령어
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs
// 설치 확인
node -v
npm -v
- EC2 Instance에 MongoDB 설치하기 (인스턴스 생성에서 ubuntu 서버 선택에서 '20.04 LTS 무료'로 설정했는지 확인하기 - 다른 부분을 선택할 경우 error가 발생한다.)
// MongoDB 설치 명령어
wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
echo "deb [ arh=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
sudo apt-get update
sudo apt-get install -y mongodb-org
// MongoDB 실행 명령어
sudo service mongod start
04. 서버 프로그램 실행 및 웹사이트 접속
- EC2 Instance에서 서버 실행
생성한 레포지토리 HTTPS(URL) 복사하기 > EC2 Instance 터미널에 아래와 같이 붙여넣기
git clone https://github.com/archepro84/nodejs_spa_mall.git
- cd (프로젝트 파일 이름)
- npm install
- node app.js
- 웹 사이트 접속
- EC2 Instance IP 복사 > 브라우저에 주소 입력(복사한 IP:3000)
==> 접속할 시에 연결할 수 없음이 뜬다. - IP 주소
==> 통신이 가능한 모든 기기가 통신할 수 있도록 가지고 있는 특수한 주소( 각 기기가 있는 좌표(Coordinate)와 비슷하다 생각하면 쉽다)
==> 공인 IP 주소와 사설 IP 주소가 나뉜다. 일반적으로 인터넷을 사용하기 위해 하나 이상의 공인 주소가 필요하다. - 포트
==> IP를 가진 모든 기기는 Port라고 불린다. 데이터가 드나들 수 있는 통로라 생각하면 된다.
==> 통신할 때 프로그램이 통로를 사용할 때 데이터가 섞이지 않게 다른 프로그램은 사용할 수 없게 막아주는게 원칙이라 할 수 있다.
- EC2 Instance IP 복사 > 브라우저에 주소 입력(복사한 IP:3000)
- EC2 Instance 포트 설정
- EC2 > 인스턴스 > 설정한 인스턴스 클릭하면 밑에 Security > Security groups
- Security groups > 인바운드 규칙 편집 > Add rule(유형: HTTP, 소스: Anywhere-IPv4) >
Add rule(유형: 사용자 지정 TCP, 포트 범위: 3000, 소스: Anywhere-IPv4) > 규칙 저장
- EC2 Instance 포트 설저이 iptables
- iptables
==> 리눅스 운영체제 내부에서의 방화벽 역할을 하는 프로그램, 리눅스로 들어오는 모든 요청은 iptables에 의해 정의된 규칙을 따라 처리된다. 우리는 이를 이용해 80포트로 들어오는 요청을 리눅스 내부에서 사용되는 3000포트로 전달하도록 규칙을 설정 - iptables 규칙 변경 명령어(80 ㅡ> 3000 전달)
- iptables
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
==> 터미널에 입력
- 영원히 꺼지지 않는 서버 실행 프로그램, PM2
- 서버 컴퓨터에 계속해서 서버 프로그램이 켜져 있어야 프로그램이 실행된다. 실행중인 Node.js 프로그램을 끄면 웹 사이트에 접속할 수 없는 상황이 된다.
==> 이런 상황을 방지하기 위해 pm2 프로세서 매니징 도구를 이용한다.
==> 터미널을 종료하더라도 웹 서버가 실행될 수 있게 하거나 Log 정보들을 실시간으로 확인 가능
- 서버 컴퓨터에 계속해서 서버 프로그램이 켜져 있어야 프로그램이 실행된다. 실행중인 Node.js 프로그램을 끄면 웹 사이트에 접속할 수 없는 상황이 된다.
- pm2
// super 관리자
sudo -s
// npm 설치
npm install -g pm2
// pm2 app.js 실행
pm2 start app.js
// 프로젝트 종료
pm2 delete 0
// pm2 서비스 재시작
pm2 restart [idNumber]
// pm2를 이용에 관리중인 서비스들의 목록 출력
pm2 list
// 실행한 서비스들의 로그를 출력할 때 사용(에러 메시지까지 출력, 디버깅에 유용)
pm2 log
// number 만큼 마지막으로 발생했던 로그들을 순서대로 출력
pm2 logs --lines [number]
05. 서버와 도메인 연결하기
- 내 서버에 고메인 연결하기
- DNS 관리툴 클릭 > 도메인 연결 클릭 > DNS 설정 클릭 > 호스트 이름에 @, IP주소에 EC2 Instance의 IP입력, 저장 > DNS 서버에 내 서버 주소를 전파해주는데 시간 필요(10분)
- DNS 란?
==> 흔히 사용하는 주소(URL)는 알아보기 쉽게 하는 등의 이유로 IP주소에 별명을 붙인다. 이게 도메인이다.
==> 도메인을 실제 서버를 찾을 수 있도록 변환해주는 시스템을 DNS라 한다.
http://내도메인/
==> 약간의 시간 뒤에 도메인에 접근하면 접속이 된다.
'JavaScript Dev. > Node.js' 카테고리의 다른 글
미들웨어(Middleware) (0) | 2023.05.01 |
---|---|
JWT 토큰이란? (0) | 2023.04.30 |
Git 이용하기 (0) | 2023.04.24 |
MongoDB, mongoose (0) | 2023.04.24 |
Express.js 란? (0) | 2023.04.22 |