'Back-end/Node.js' 카테고리의 글 목록

Back-end/Node.js 9

[Node.js] PM2 Clustering(클러스터링) 시 특정 instance 지칭하기

Node의 PM2로 서버를 배포시, 클러스터 모드를 많이 이용하게 될텐데 (Node는 싱글 스레드를 가지기 때문에 멀티 프로세싱이란 개념으로 접근하여 자원을 효율적으로 이용할 수 있게 해주는 것. ) 이렇게 클러스터링을 하게 될 경우 클러스터의 인스턴스의 갯수만큼 서버가 올라간다. 이때 만약 배치성 함수를 서버에 적용했다면 인스턴스의 갯수만큼 해당 함수가 실행될 것이다. 여기다가 이중화서버 등을 이용했을 경우 이 실행 함수의 갯수는 두 배로 늘어나게 될 것 예를 들어, 주기적으로 메일을 발송하는 함수를 서버에 내장하게 됐다면, 동시에 같은 메일이 여러 개가 발송될 수 있을 것. 이런 일은 비효율적일 수 있다. (혹은 일어나선 안될 수도..) 이에 대응하여 서버 실행 스크립트를 분리하여 해당 함수를 실행하..

Back-end/Node.js 2022.05.01

[Node.js] 커스텀 에러 만들기/분석해보자

회사를 다니면서 계속 노드 서버를 만들어오신 동료분께서 잘 만들어 놓으신 에러 객체를 응용하면서 계속 분석해서 쓸 필요가 있다고 생각해 분석을 해보려 한다. 노드의 에러 객체를 상속 받아 에러를 만들어서 쓰게 되면 각종 에러에 대해서 개별적 처리가 가능하다.(데이터 베이스인지.. 암복호화, 파라미터 유효성 에러 등..) 이미 각종 오픈 소스들은 이렇게 쓰고 있다! 에러 리포트를 하는 시스템을 구축할 때에도 꼼꼼하게 파악해 놓으면 좋을 듯 싶다. 꾸준히 정리해서 올려 놓으려 한다. 기본적으로 에러 객체를 상속받아 작성하는 건 이런 식으로 작성하면 된다. class CustomException extends Error{ constructor(errorname){ super(errorname); } } 상속 ..

Back-end/Node.js 2022.04.09

Mocha 테스트 후, 테스팅 터미널 종료하기+ Mocha default timeout 시간 재설정

지난번에 토이프로젝트 배포시에 predeploy script 에 Mocha 테스트를 하도록 했더니 터미널 종료 문제와 타임아웃 시간 재설정이 필요하더라.. 갑자기 생각나서 포스팅 Mocha 테스트완료 후 스스로 종료하게 하기 테스트 코드 실행 후 해당 프로세스 종료 시키고 deploy 하고 싶었는데 프로세스 종료가 안 되서 찾아보니 해당 입력 스트림을 직접 꺼주지 않으면 계속 프로세스가 유지된다고 한다. https://stackoverflow.com/questions/50372866/mocha-not-exiting-after-test Mocha not exiting after test I'm starting with tests in Node. Using mocha, chai and nock (to in..

Back-end/Node.js 2022.03.27

Sequelize 사용하기

시퀄라이즈 사용법 꿀팁 대공개 대방출 (?) 계속 긁어모으고 사용법 찾아내고 있는데 길 잃은 분들 검색어에 걸릴 수 있길 빌며... Sequelize Node에서 데이터베이스를 ORM형식으로 쉽게 다룰 수 있으려면 Sequelize란 ORM이 유명하고 이걸 이용하면 좋다. 시퀄라이즈는 기본적으로 커넥션객체를 재사용한다. 개발자가 신경쓰지 않아도 커넥션 풀을 잘 관리해준다. 클로즈시에는 sequelize.close()를 이용한다. (비동기, 프로미스 함수를 리턴한다.) 시퀄라이즈를 배우기 쉽게 해주려고 GitHub - papb/sequelize-sscce: Base repository for creating and sharing Sequelize SSCCEs 이런 깃헙 레파지토리를 제공한다. 공부할거면 이..

Back-end/Node.js 2021.10.18

multipart/form-data를 처리하는 패키지 비교

파일 업로드를 구현 중 다양한 multipart/form-data 형태를 처리하는 다양한 노드 패키지가 있음을 알게 되었고 각각의 구현된 목적과 특징을 알아보기 위해 이런 저런 서칭을 해보았다. 그러다가 한 글을 발견하여 내용을 정리해보았다. https://bytearcher.com/articles/formidable-vs-busboy-vs-multer-vs-multiparty/ Choose between Formidable, Busboy, Multer and Multiparty for processing file uploads NAVIGATION Breakdown of most popular packages Use Formidable or Multer for proof of concepts and lo..

Back-end/Node.js 2021.10.07

Node에서의 Module

모듈 ? 특정한 기능을 하는 함수나 변수들의 집합. 노드는 코드를 모듈로 만들 수 있다는 점에서 브라우저의 자바스크립트와 다르다. 그자체로 프로그램이자, 프로그램의 부품. variables.js const odd = '홀수'; const even = '짝수'; module.exports= { odd, even }; // module 생략 가능하다. 외부에서 변수 사용 가능 해당 모듈의 odd, even을 import (require) import {odd, even} from "./variables.js"; console.log(odd); -> '홀수' exports module.exports. = () => {} // -> imports imports import 모듈이름 from "모듈경로"; 노드 ..

Back-end/Node.js 2021.08.09

PM2로 무중단 배포하기

React.js로 만든 서버를 배포해야 하는 상황. foreground process인 노드의 특성상 터미널이 꺼지면 서버도 꺼지게 된다. 이러한 점을 관리해 주는 것이 PM2, Forever와 같은 것들이다. foreground process를 background process로 바꿔준다. PM2를 사용해본 경험이 있어 사용해 보기로 한다. PM2에 대해서는 간단히만 알고있다. 하나는 서버가 에러로 인해 꺼졌을 때 서버를 다시 켜주는 것, 그리고 클러스터링. 또는 멀티 프로세싱이다. (클러스터링이라는 개념은 노드에서 제공하는 것으로 알고있다.. ) 싱글 스레드인 노드의 특성상 프로세스를 하나씩 사용할 수 있는데 CPU의 코어수만큼 최대한 프로세스를 사용할 수 있게 해주는 기능도 있다.,,,고는 알고있지..

Back-end/Node.js 2021.07.17

Node란? 이벤트 루프, 논블로킹

Node란 Node란? Chrome V8 engine으로 빌드된 Javascript 런타임 서버 노드를 통해 다양한 자바스크립트 애플리케이션을 실행할 수 있지만, 노드는 서버 애플리케이션을 실행하는 데에 제일 많이 사용된다. 기존에는 자바스크립트 프로그램을 브라우저 위에서만 작동시킬 수 있었다. 브라우저 외의 환경에서 자바스크립트를 실행시키기 위한 노력이 많이 있었으나, 자바스크립트의 실행 속도 문제 때문에 모두 큰 호응을 얻지 못했다. 하지만 2008년 구글이 v8엔진을 사용하여 크롬을 출시하자, 기존의 브라우저 엔진과 비교해 상당히 빠른 속도로 인해 많은 호응을 얻었고, 라이언 달은 2009년 노드프로젝트를 시작하였다. 노드는 v8과 더불어 libuv 라는 라이브러리를 사용한다. v8과 libuv 는..

Back-end/Node.js 2021.06.04

Node-sass 6.0.0 incompatible with ^4.0.0.

node.js를 14버전(현재 가장 안정성 있는 버전) 으로 업데이트 한 후 node-sass가 있던 서버를 돌리니 node 14버전이 기존 버전과 맞지 않아서 sass 를 최신 버전으로 업데이트했더니 Node-sass 6.- 버전이 아직 node 14버전과 호환이 안된다고 한다. 깃헙에도 비슷한 이슈가 많았고 노드 버전에 맞는 node-sass 버전을 재설치 했더니 해결되었다. npm install node-sass@4.14.1

Back-end/Node.js 2021.05.20