인턴 Study #2. Node.js Tool

beoms96·2020년 6월 4일
0

인턴 공부

목록 보기
2/11
post-thumbnail

원래는 인턴 공부 중 3월에 진행한 비트코인 및 비트코인 SV에 대해서 진행하려 했지만, Node.js를 공부하면서 배운 다양한 툴에 대해 한번 정리하고자 한다.

1. Postman

개요

A powerful GUI platform to make your API development faster & easier, from building API requests through testing, documentation and sharing.

개발한 API를 테스트하고, 테스트 결과를 공유해 API 개발의 생산성을 높여주는 플랫폼.

유용한 기능

  1. Collections: 북마크 기능
  2. Code generate: 다양한 언어별로 해당 API를 호출하는 source code 생성
  3. manage enviroments: 환경별 설정 가능
  4. Interceptor: 크롬 브라우저를 이용해 브라우저 내에서 발생한 Request 를 자동으로 Postman History 에 등록해주는 기능, 크롬 확장 프로그램 필요

2. PM2

개요

Node.js 애플리케이션은 단일 CPU 코어에서 실행되기 때문에 CPU의 멀티코어 시스템은 사용할 수 없다.
이 문제를 해결하기 위해 클러스터 모듈을 통해 단일 프로세스를 멀티 프로세스 (Worker)로 늘릴 수 있는 방법을 제공한다.
클러스터 모듈을 사용해서 마스터 프로세스에서 CPU 코어 수만큼 워커 프로세스를 생성해 모든 코어를 사용하게끔 개발하면 됨.

마스터 프로세스 생성 후 CPU 개수만큼 워커 프로세스 생성하고 각각 수행해야 할 일들을 정리해서 구현하면 된다.

하지만 이 과정을 직접 개발하기에는 번거로운 작업이기 때문에 PM2 라는 Node.js 프로세스 매니저를 통해 무중단 운영을 할 수 있다.

기능

  1. 앱에서 충돌이 발생할 경우 앱을 자동으로 다시 시작
  2. 런타임 성능 및 자원 소비에 대한 통찰력을 획득
  3. 성능 향상을 위해 설정을 동적으로 수정
  4. 클러스터링 제어

설치

npm install -g pm2

사용법

  1. 기본 모드 실행 (fork 모드)
pm2 start app.js --name app --time
pm2 list
pm2 show app
pm2 monit
pm2 stop app
pm2 restart app
pm2 delete app
pm2 delete all
  1. 클러스터 모드 (CPU 활용 가능)
    Load Balancing (LB) 를 통해 부하를 분산시켜줌.
    Round Robin (RR) 방식으로 동작.
    PM2 실행 시 -i 옵션을 사용하면 클러스터 모드로 실행
    -i 뒤에 0을 지정하면 사용 가능한 CPU 모두 실행
pm2 delete app && pm2 start app --name "API" -i 3 -o ./test.log`

클러스터 3개 등록함을 의미.

운영 도중에 클러스터 개수를 조절할 수도 있다.

pm2 scale app 5

3개로 돌고 있던 app 을 클러스터 5로 지정한다.

  1. 쉘 스크립트 PM2 제어
#!/bin/bash

pm2 reload node_yun;
echo 'Reload pm2 demon...';
sleep 1;
sudo service nginx restart;
echo 'Restart nginx server...';
echo 'All Done!'
exit;

과 같은 쉘 스크립트로 작업 가능

추가

pm2-logrotate 라는 pm2 log 관리 툴을 활용해 불필요한 데이터를 쌓지 않는 걸로 하자.

3. JEST

인턴 Study #2-1. Node.js Tool - Jest 참고

4. Express.js

인턴 Study #1. Node.js 참고

5. Sequelize ORM

개요

Node.js는 보통 MongoDB + Mongoose 조합을 함께 사용하지만 RDB 와 연결해 사용할 때는 Sequelize ORM(Object-Relational-Mapping) 을 사용한다.

공식적으로 PostgreSQL, MySQL, MariaDB, SQLite, MS-SQL 을 지원한다.

설치

npm install sequelize
npm install mysql2
npm install -g sequelize-cli

sequelize init

이 명령어들을 통해 config, models, migrations, seeders 폴더가 생성되고 프로젝트 기본 세팅이 끝나게 된다.

테이블 정의

tx.js

module.exports = (sequelize, DataTypes) => {
  return sequelize.define("transactions", {
      txId: {
        field: 'tx_id' // column 이름
        type: DataTypes.STRING(100), // 데이터 타입
        allowNull: false // Null 허용
      },
      value: {
        type: DataTypes.INTEGER,
        allowNull: false
      }, 
}, {
      timestamps: true,
      underscored: true,
      paranoid: true
   });
};

models 안 index.js 파일에서

db.transactions = require('./tx.js')(sequelize, Sequelize);

을 붙여주면 데이터베이스에 테이블이 생성된다.

CRUD 관련

https://velog.io/@cadenzah/sequelize-document-1
글을 참고하는 것이 제일 좋을 것 같다. 엄청 잘 쓰셨기 때문이다.

6. Axios

개요

Promise based Http Client for the browser and node.js

Node.js 와 브라우저를 위한 Http 통신 javascript 라이브러리

주요 기능

  1. 브라우저에서는 XMLHttpRequests, Node.js에서는 Http 요청
  2. Promise API 지원 - Async/Await 문법 사용해 요청 매우 쉽게 가능하다.
  3. 요청과 응답을 중단
  4. JSON 데이터 자동 변환
  5. 요청 취소
  6. XSRF/CSRF (사이트 간 요청 위조)로부터 보호하기 위한 클라이언트 측 지원

설치

npm install axios

사용법

axios.get('[url]', {
  params: {
  	id: 1
  },
});
// query parameter 로 들어감.

axios.post('[url]', {
  params: {
   	id: 2
  },
});
// body 로 들어감.

이외에도 put, delete 등 다양한 메소드들이 존재한다.

7. Websocket & Socket.io

인턴 Study #3. WebSocket & Socket.io 참고

출처:
Postman 공식 홈페이지, PM2 github, Sequelize 공식 홈페이지, Axios github

profile
beoms96 개발 노트

0개의 댓글