본문 바로가기

Node.js

(25)
Node.js - 자식 프로세스 돌리기 (Run child_process) 최근 Node 환경에서 Julia의 REPL을 돌려야하는 케이스가 생겨서 이를 실현 시키기 위해서 child_process 모듈을 사용해봤다. 구현 const spawn = require('child_process').spawn; function spawnTest() { return new Promise(function(resolve, reject) { let process = spawn('python'); const command1 = 'num1 = 1 \n'; const command2 = 'num2 = 2 \n'; const command3 = 'print(num1 + num2) \n'; process.stdout.on('data', data => { console.log(data.toString(..
Node.js - Socket.IO ws 패키지는 간단하게 웹 소켓을 사용하고자 할 때 좋다. 그러나 구현하려는 서비스가 좀 더 복잡해진다면 Socket.IO를 사용하는 것이 더 편하다. ws 모듈 또한 잘 구현하면 Socket.IO와 같은 기능을 하도록 만들 수 있지만, Socket.IO는 편리한 기능을 많이 지원하여 쓰기 좋다. 이전 포스트에서 연결된다. 2020/08/20 - [Node.js] - Node.js - ws로 웹 소켓 사용해보기 (Web Socket Using ws Module) npm i socket.io 이제 socket.js의 ws 패키지의 웹소켓 객체를 Socket.IO로 대체해준다. const SocketIO = require('socket.io'); module.exports = (server) => { con..
Node.js - ws로 웹 소켓 사용해보기 (Web Socket Using ws Module) 먼저 gif-chat이라는 새로운 프로젝트를 다음과 같이 만들어주고 패키지들을 설치해주자. { "name": "gif-chat", "version": "0.0.1", "description": "GIF CHATTING", "main": "app.js", "scripts": { "start": "nodemon app" }, "author": "Effort", "license": "ISC", "dependencies": { "cookie-parser": "^1.4.5", "dotenv": "^8.2.0", "express": "^4.17.1", "express-session": "^1.17.1", "morgan": "^1.10.0", "nunjucks": "^3.2.2" }, "devDependencies"..
Node.js - Jest 를 이용한 테스팅 (Testing using Jest) Jest 서비스를 개발 완료한 후, 개발자나 QA들은 자신이 만든 서비스가 제대로 동작하는지 테스트해본다. 그러나 기능이 많다면 일일이 수작업으로 테스트하기엔 작업량이 너무 많을 수 있다. 이런 경우엔 테스트를 자동화하여 프로그램에 프로그램을 테스트하도록 할 수 있다. 테스트 기법에는 여러 가지가 있지만, 그 중 유닛 테스트, 통합 테스트, 부하 테스트, 테스트 커버리지를 살펴보자. Jest 는 페이스북에서 만든 오픈소스 라이브러리로, 테스팅에 필요한 툴들을 대부분 갖추고 있어 편리한 라이브러리다. 먼저 jest 패키지를 개발 전용으로 다운로드 받아놓자 (테스팅 툴은 개발 시에만 사용하므로). > npm i -D jest 이후 package.json 의 test 커맨드로 jest를 넣어두자. 앞으로 np..
Node.js - CORS (Cross-Origin Resource Sharing) CORS를 제대로 이해해 보자. Access-Control-Allow-Origin Access-Control-Allow-Origin 에러는 Access-Control-Allow-Origin이라는 헤더가 없다는 내용의 에러이다. 브라우저와 서버의 도메인이 일치하지 않으면 기본적으로 요청이 차단이 된다. 이 현상은 브라우저에서 서버로 요청을 보낼 때 만 발생을 하고, 서버에서 서버로 요청을 보낼 때는 발생하지 않는다. 위 로그는 실제 Access-Control-Allow-Origin 에러가 뜨는 경우이다. 보면 토큰의 Method가 POST 대신 OPTIONS로 표시되는 것을 볼 수 있다. OPTIONS 메서드는 실제 요청을 보내기 전 서버가 이 도메인을 허용하는지 체크하는 역할을 한다. CORS 문제를 해..
Node.js - API 사용량 제한 구현, express-rate-limit (API Limit) 일차적으로 인증된 사용자 (토큰을 발급받은 사용자) 만 API를 사용할 수 있게 필터를 두더라도, 인증된 사용자가 과도한 API 사용을 하게 되면 API 서버에 무리가 갈 수 있다. 따라서 일정 기간 내에 API를 사용할 수 있는 횟수를 제한하여 서버의 트래픽을 줄이는 것이 좋다. 유료 서비스라면 과금 체계별로 횟수에 차이를 둘 수도 있을 것이다. 이 기능은 express-rate-limit 패키지로 구현할 수 있다. api 서버의 미들웨어로 다음 기능을 추가해준다. const RateLimit = require('express-rate-limit'); ... exports.apiLimiter = new RateLimit({ windowMs: 60 * 1000, max: 1, delayMs: 0, han..
Node.js - API 서버를 위한 도메인 등록 (Domain for API Server) 도메인과 CORS API 서버 쪽에선 원하지 않는 사용자 또는 서비스가 자신의 API 서비스에 접속하는 것을 막기 위하여 도메인을 등록할 수 있다. 웹 브라우저에서 요청을 보낼 때, 응답을 하는 곳과 도메인이 다르면 CORS (Cross-Origin Resource Sharing) 에러가 발생할 수 있다. CORS 문제를 해결하려면 API 서버 쪽에서 미리 허용할 도메인을 등록해야 한다. 서버에서 서버로 요청을 보내는 경우엔 CORS 문제가 발생하지 않는다. CORS는 브라우저에서 발생하는 에러이기 때문이다. NodeBird의 경우를 예로 들어 사용해보자. 먼저 models/domain.js를 만들어준다. const Sequelize = require('sequelize'); class Domain ex..
Node.js - Passport 모듈 (Passport Module) Passport Passport는 이름 그대로 서비스를 사용할 수 있게끔 해주는 여권 같은 역할을 하는 모듈이다. 회원가입과 로그인은 직접 구현할 수도 있지만, 세션과 쿠키 처리 등 복잡한 작업이 많으므로 검증된 모듈을 사용하는 것이 좋다. Passport는 사용하기 좋은 검증된 모듈이다. 요즘에는 서비스에 로그인할 때 아이디와 비밀번호 이외에 구글, 페이스북, 카카오 같은 기존의 SNS 서비스 계정을 이용하여 로그인하기도 한다. 이 또한 Passport로 해결할 수 있다. Passport 모듈을 이용하여 자체 회원가입 및 로그인 외에도 카카오톡을 이용해 로그인하는 방법을 알아보자. 먼저 passport 관련 패키지들을 설치한다. > npm install passport passport-local pas..