프로젝트를 마무리하고 AWS를 통해 프로젝트 업로드 하기
먼저 AWS에 가입을 한다. 이때 신용카드 정보가 필요함으로 카드 준비 후, 가입 진행하는 것이 좋다.
로그인을 하면 관리 콘솔에서 AWS에 대한 전반적인 정보를 얻을 수 있다.
인스턴스를 시작하기 전, Region을 오하이오로 설정한다. 여러 조건들과 비교해보았을 때 오하이오가 가장 나은 옵션이라고 한다.
우분투, 64비트를 선택한다. 명확히는 모르지만 우분투가 다른 OS비해 합리적이라고 이야기를 들었던것 같다.. 아시는 분 계시다면...! 알려주셔요 Why 우분투..?
CPU, 메모리 등 서버의 규모를 선택해야한다. 프리 티어로 진행할 예정이기 때문에, t2.micro에서 시작한다. EC2에서는 컴퓨터와 데이터 전송에 따른 과금이 되기 때문에 이 부분에 유의하여야 한다.
키와 값 형태로 태그를 정의한다.
보통 키는 계정 이름, 값은 프로젝트 이름으로 한다.
EC2에서는 http, https 의 접속을 허용해야한다. 그러기 위해선 규칙 추가를 해야한다. 나는 포트범위 8000로 웹 서버를 돌려야하기 때문에 규칙을 추가해주었다. 이때 포트범위를 8000으로 적고, 소스를 위치 무관으로 설정해주어야한다.
키페어를 생성해야한다. 이때 키페어는 단 한번만 다운로드 할 수 있기 때문에 이점에 유의하여 안전한 곳에 저장해야한다고 한다!
우리가 만든 프로젝트를 서버에 올리려면 어떻게 해야할까 ?
- 소스 코드가 필요하다.
- git
- npm
AWS 폴더를 만들어 키페어를 저장해두고, 우분투 서버를 연다.
ssh -i key이름.pem ubuntu@나의 aws ip주소
git clone 프로젝트_repo_주소
원래는 직접 node, npm 페이지에서 다운을 받아서 소스 코드에 적용시켰지만, 터미널에서는 그렇게 진행하기가 어렵기 때문에 명령어를 통해 npm을 설치해야한다.
curl -sL https://deb.nodesource.com/setup_10.x | sudo bash -
sudo apt-get update // 선택사항
sudo apt-get install nodejs
node가 설치되었으니 npm도 설치 !
cd 프로젝트_repo_주소
npm install
버전을 확인해보니 잘 설치된 것 같으니, 해당 프로젝트에 필요한 dependecies들이 설치 되도록 npm install을 시작한다.
지금까지 실행한 npm start는 개발모드로, 콘솔로그나 디버깅을 하는 과정 중 브라우저의 스크립트에 모든 소스 코드가 나와있었다. 하지만 배포가 될 때는 소스코드가 다 노출되면 안되며 html, css, javascript 하나로 결과물이 나와야 한다. 즉 프로덕트 모드를 실행해야하는데 이때 npm run build를 해주어야 하는 것이다.
빌드 한 후, 확인을 해보면 build라는 폴더가 생겼고 이 안에는 하나의 html, css, javascript가 있다.
웹 서버는 백앤드의 영역이기 때문에, 프론드 앤드 용 웹서버가 필요하다. 따라서 node.js로 웹서버를 띄우려면 외부 라이브러리인 npm install express
를 설치해야한다.
npm install express --save
package.json의 dependencies
에 남겨야하니까 --save 잊지말기!!
npm install express 설치만 한다고 되는 것이 아니다!
vi server.js
server 라는 이름은 임의로 설정할 수 있다.
// insert 모드로 아래 코드 복사 붙여넣기
const http = require("http");
const express = require("express");
const path = require("path");
const app = express();
const port = 8000;
app.get("/ping", (req, res) => {
res.send("pong");
});
app.use(express.static(path.join(__dirname, "build")));
//어떤 경로로 들어오건 간에, build폴더 안의 index.html을 응답해라
app.get("/*", (req, res) => {
res.set({
"Cache-Control": "no-cache, no-store, must-revalidate",
Pragma: "no-cache",
Date: Date.now()
});
res.sendFile(path.join(__dirname, "build", "index.html"));
});
http.createServer(app).listen(port, () => {
console.log(`app listening at ${port}`);
});
⬆️ 백엔드 코드이지만, 자바스크립트로 되어있다. 브라우저에서 돌아가는 것이 아니라, 서버 환경에서 돌아가는 자바스크립트이다.
설치 완료 ! cosnt port = 8000
은 인스턴스에서 설정한 포트 범위이다. 이렇게 하면 서버 코드가 준비가 되었다.
node code를 실행하기 위해서는 node + 파일 경로를 입력해주면 된다.
npm run build
node server.js
우와 ! 8000 띄우기 성공
터미널을 종료하게 되면 서버가 종료되기 때문에, 컴퓨터를 종료하더라도 해당명령하게 돌아갈 수 있게 처리를 해주어야한다.
현재 서버는 잘 연결되지만, 로그인 하기 전엔 제품 목록을 볼 때 보이지가 않는다. 이 부분에 대해서 리팩토링을 진행해보아야겠다 !!