원래는 인턴 공부 중 3월에 진행한 비트코인 및 비트코인 SV에 대해서 진행하려 했지만, Node.js를 공부하면서 배운 다양한 툴에 대해 한번 정리하고자 한다.
A powerful GUI platform to make your API development faster & easier, from building API requests through testing, documentation and sharing.
개발한 API를 테스트하고, 테스트 결과를 공유해 API 개발의 생산성을 높여주는 플랫폼.
Node.js 애플리케이션은 단일 CPU 코어에서 실행되기 때문에 CPU의 멀티코어 시스템은 사용할 수 없다.
이 문제를 해결하기 위해 클러스터 모듈을 통해 단일 프로세스를 멀티 프로세스 (Worker)로 늘릴 수 있는 방법을 제공한다.
클러스터 모듈을 사용해서 마스터 프로세스에서 CPU 코어 수만큼 워커 프로세스를 생성해 모든 코어를 사용하게끔 개발하면 됨.
마스터 프로세스 생성 후 CPU 개수만큼 워커 프로세스 생성하고 각각 수행해야 할 일들을 정리해서 구현하면 된다.
하지만 이 과정을 직접 개발하기에는 번거로운 작업이기 때문에 PM2 라는 Node.js 프로세스 매니저를 통해 무중단 운영을 할 수 있다.
npm install -g pm2
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
pm2 delete app && pm2 start app --name "API" -i 3 -o ./test.log`
클러스터 3개 등록함을 의미.
운영 도중에 클러스터 개수를 조절할 수도 있다.
pm2 scale app 5
3개로 돌고 있던 app 을 클러스터 5로 지정한다.
#!/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 관리 툴을 활용해 불필요한 데이터를 쌓지 않는 걸로 하자.
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);
을 붙여주면 데이터베이스에 테이블이 생성된다.
https://velog.io/@cadenzah/sequelize-document-1
글을 참고하는 것이 제일 좋을 것 같다. 엄청 잘 쓰셨기 때문이다.
Promise based Http Client for the browser and node.js
Node.js 와 브라우저를 위한 Http 통신 javascript 라이브러리
npm install axios
axios.get('[url]', {
params: {
id: 1
},
});
// query parameter 로 들어감.
axios.post('[url]', {
params: {
id: 2
},
});
// body 로 들어감.
이외에도 put, delete 등 다양한 메소드들이 존재한다.
출처:
Postman 공식 홈페이지, PM2 github, Sequelize 공식 홈페이지, Axios github