NodeJS

[NodeJS] Node + express api server (노드 + 익스프레스 API 서버 만들기)

allempty_sheep 2024. 9. 6. 10:00
반응형

오늘은 node + express 서버를 올려서 리액트와 통신 할 API 서버를 만들어 볼 것이다.

 

먼저 AWS 에 서버를 만들어야 한다.

EC2 에서 인스턴스 시작 버튼을 눌러 인스턴스를 만들어 보자.

 

이름 및 태그에는 해당 서버의 이름을 써주자.

 

이제 어떤 서버를 올릴지 찾아 볼 것인데 더 많은 AMI 찾아보기를 눌러 서버를 찾아보자.

 

ubuntu 를 검색 해 보면 여러가지 서버가 나오는데 여기서 

프리티어가 사용 가능한 Ubuntu Server 22.04 LTS (HVM) 서버를 선택 해 준다.

 

보안 설정은 SSH, HTTPS, HTTP 모두 선택을 해준다.

 

스토리지는 변경 없이 그대로 만들어 준다.

 

이제 오른쪽의 인스턴스 시작을 눌러 인스턴스를 생성 해 보자.

 

인스턴스가 생성된 후 네트워크 및 보안에서 보안그룹을 들어가서 포트를 열어 줄 것이다.

 

기본으로 사용할 포트 외에 API 로 이용할 3000번 포트를 열어 주자. 

인바운드 규칙 편집에서 아래와 같이 적어 주면 된다.

 

 

 

저장을 하고 keyfile을 이용하여 git 과 filezilla 에서 접속을 해줄 것이다.

git 으로 하는 작업은 폴더, 파일 권한 설정과 업데이트, 라이브러리 다운 등의 작업들을 해 줄 것이다.

FileZilla 로 접속은 간편하게 파일 구조를 확인하고 코드를 수정하기 위해서이다.

인스턴스를 선택 후 연결을 클릭한다.

 

이후 SSH 클라이언트에 들어가보면 ss -i 로 시작하는 예제 연결 코드가 있을 것이다.

 

복사에서 git에  입력 해 준다.

그대로 붙여넣고 키파일 경로만 지정 해 주면 된다.

ex: "C:\Users\Mycomputer\Downloads

ssh -i "키파일경로" ubuntu@ec2주소변경없이복사한그대로사용

 

이제 filezilla 에서 연결을 해보자.

SFTP 를 설정해서 

호스트에는 서버의 퍼블릭 IPv4 주소를 넣고

로그온 유형은 "키 파일" 을 선택,

사용자 명은 ubuntu 

키 파일 경로를 지정 해 준다. 여기의 경로를 깃 연결 경로에 넣으면 된다.

 

이제 서버를 업데이트 해주고 기본 라이브러리를 받아줄 것이다.

 

깃으로 들어갔다면 다음과 같은 모습이 나올것이다.

 

여기는 /home/ubuntu 의 경로에 해당하는 가장 기본 경로이다.

업데이트 후 모듈을 받아주자.

sudo apt-get update
sudo apt-get install nodejs
sudo apt-get install npm
sudo npm install -g express
sudo npm install -g express-generator@4
sudo npm install -g nodemon

 

이제 깃에서 폴더를 하나 만들어 그 안에 npm 환경을 구성 해 줄 것이다.

mkdir 폴더이름

 

생성 후 해당 폴더로 이동한다.

cd 폴더이름

 

폴더를 이동한 후 입력

sudo express -e
sudo npm install
sudo npm install cors

 

 

폴더와 하위 파일의 권한을 바꿔 줄 것이다. (FileZilla 를 이용하기 위함)

보안을 위해서는 수정할 파일 하나만 권한을 변경 후 수정하고 나중에 되돌리는 것이 좋다.

하지만 예제이니 모두 권한을 주도록 하겠다.

ex ) sudo chmod -R 777 /test

cd
sudo chmod -R 777 폴더경로

 

이제 파일 질라로 들어가보자. 해당 폴더안에 파일들이 설치되어 있을 것이다.

 

먼저 package.json 을 들어가 아래와 같이 변경 해주자.

  "scripts": {
    "start": "nodemon app.js"
  },

 

이후 app.js 에서 아래를 추가해줄 것이다.

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
const cors = require("cors");                   // 추가.

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

app.use(cors());                                // 추가.
app.set('port', process.env.PORT || 3000);      // 추가.
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use("/users", usersRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

// 추가.
var server = app.listen(app.get('port'), function() {  
  console.log('Express server listening on port ' + server.address().port);  

  });

 

git 에서 "npm start" 를 입력 해보자.

아래와 같이 어느 경로에서 어떤 포트가 실행되었는지 나온다면 잘 된 것이다.

 

아래를 입력하면 Express 기본 페이지를 확인 할 수 있다.

ec2주소:3000

 

백그라운드에서 해당 서버를 계속 켜둘 것이다.

sudo npm install -g pm2

 

프로젝트를 등록한다.

pm2 start npm --name "<app-name>" -- start

 

 

다음과 같이 백그라운드에서 실행되는 것을 볼 수 있다.

백그라운드 실행 리스트 목록을 보려면

pm2 list

 

재시작

pm2 restart <app-name>

 

로그확인

pm2 logs <app-name>

 

정지

pm2 stop <app-name>

 

삭제

pm2 delete <app-name>

 

실행 후 홈페이지를 들어가보면 잘 들어가지는 것을 확인 할 수 있다.