목록
'node js' 122건
-
nvm, n노드 버전을 업데이트하기 위한 패키지입니다. 윈도에서는 nvm-installer를 사용하고, 리눅스나 맥에서는 n 패키지를 사용하면 편리합니다. 윈도에서는 https://github.com/coreybutler/nvm-windows/releases에 접속하여 nvm-setup.zip을 내려받습니다. 내려받은 파일을 압축 해제한 후 실행시켜 설치합니다. 이제 콘솔에 nvm 명령어를 입력할 수 있습니다. 설치된 노드 버전을 확인하는 명령어는 nvm list입니다.$ nvm list * 23.11.1 (Currently using 64-bit executable) 새로운 버전을 설치하고 싶다면 nvm install [버전]을 입력합니다. nvm install 23.11.0처럼 특수 버전을 입력하거나 nvm ..
-
connect-redis멀티 프로세스 간 세션 공유를 위해 레디스와 익스프레스를 연결해주는 패키지입니다. 기존에는 로그인할 때 express-session의 세션 아이디와 실제 사용자 정보가 메모리에 저장됩니다.따라서 서버가 종료되어 메모리가 날아가면 접속자들의 로그인이 모두 풀려버립니다. Warning: connect.session() MemoyStore is not designed for a production environment, as a will leak memory, and will not scale past a single process라는 경고 메시지도 발생합니다.이를 해결하기 위해 세션 아이디와 실제 사용자 정보를 데이터베이스에 저장합니다. 이때 사용하는 데이터베이스가 레디스입니다. 다른 데이터베이스를 사용해도..
-
helmet, hpp서버의 각종 취약점을 보완해주는 패키지들이며, 익스프레스 미들웨어로서 사용할 수 있습니다.이 패키지들을 사용한다고 해서 모든 취약점을 방어해주는 것이 아니므로 서버를 운영할 때는 주기적으로 취약점을 점검해야 합니다.$ npm i helmet hpp 개발 환경에서는 사용할 필요가 없으므로 배포 환경일 때만 적용하면 됩니다.const express = require("express");const cookieParser = require("cookie-parser");const morgan = require("morgan");const path = require("path");const session = require("express-session");const nunjucks = require("nunjuc..
-
pm(2)백그라운드에서 돌고 있는 노드 프로세스를 확인할 방법이 필요한데, npx pm2 list 명령어를 사용하면 됩니다.$ npx pm2 list npm start를 실행했을 때처럼 현재 프로세스 정보가 표시됩니다. 프로세스 아이디(pid), CPU와 메모리 사용량(mem) 등이 보여 편리합니다. optime과 status 사이에 재시작된 횟수가 나오는데, 0이 아니라면 서버가 재부팅된 적이 있다는 것을 의미합니다. 이 경우에는 왜 재시작되었는지 확인해봐야 합니다. npx pm2 logs로 로그를 확인할 수 있습니다. 에러 로그만 보고 싶다면 위에 -err을 붙이면 됩니다. 출력 줄 수를 바꾸고 싶다면 --lines 숫자 옵션을 사용합니다.나중에 pm2 프로세스를 종료하고 싶다면 콘솔에 npx pm2 kill..
-
sanitize-html, csurfsanitize-html, csurf 패키지는 각각 XXS, CSRF 공격을 막기 위한 패키지입니다.$ npm i sanitize-html$ npm i csurf XSS는 악의적인 사용자가 사이트에 스크립트를 삽입하는 공격입니다. 악성 사용자가 게시글이나 댓글 등을 업로드할 때 자바스크립가 포함된 태그를 올리면, 나중에 다른 사용자가 그 게시글이나 댓글을 볼 때 그 스크립트가 실행되어서 예기치 못한 동작을 하게 됩니다.따라서 서버에서는 사용자가 게시글을 업로드할 때 스크립트가 포함되어 있는지 검사해서, 존재하면 제거해야 합니다. 다만, 공경성 스크립트 유형이 많으므로 라이브러리의 도움을 받는 것이 좋습니다.사용법은 간단합니다. const sanitizeHtml = require('sanitize-html..
-
시퀄라이즈: cross-envcross-env 패키지를 사용하면 동적으로 process.env(환경 변수)를 변경할 수 있습니다. 또한, 모든 운영체제에서 동일한 방법으로 환경 변수를 변경할 수 있게 됩니다.기존 package.json을 다음과 같이 바꿉니다. package.json{ "name": "nodebird", "version": "0.0.1", "description": "익스프레스로 만드는 SNS 서비스", "main": "server.js", "scripts": { "start": "NODE_ENV=production PORT=80 node server", "dev": "nodemon server", "test": "jest" }, ...} 서버 실행을 위한 npm 스크립트를 두 개로 나누..
-
AWS와 GCP로 배포하기 - 서비스 운영을 위한 패키지(2)시퀄라이즈데이터베이스도 배포 환경으로 설정합니다. 시퀄라이즈의 경우 수정이 필요합니다. 시퀄라이즈에서 가장 큰 문제는 비밀번호가 하드 코딩되어 있다는 것이며, JSON 파일이므로 변수를 사용할 수 없습니다. 다행히 시퀄라이즈는 JSON 대신 JS 파일울 설정 파일로 쓸 수 있게 지원합니다. config 폴더에서 config.json을 지우고 config.js를 생성합니다.require("dotenv").config();module.exports = { development: { username: "root", password: process.env.SEQUELIZE_PASSWORD, database: "nodebird", host: "127.0.0.1", dialect: "m..
-
AWS와 GCP로 배포하기 - 서비스 운영을 위한 패키지morgan과 express-session현재 익스프레스 미둘웨어 중 일부가 개발용 설정되어 있습니다. 이 미들웨어들을 배포용으로 설정할 것입니다.const express = require("express");const cookieParser = require("cookie-parser");const morgan = require("morgan");const path = require("path");const session = require("express-session");const nunjucks = require("nunjucks");const dotenv = require("dotenv");const passport = require("passport");dotenv.config();const p..
-
commander, inquirer 사용하기(3)마지막으로 chalk 패키지를 사용합니다. 이 패키지가 특별한 기능을 가진 것은 아니며, 검은색과 흰색밖에 없는 터미널에 색과 스타일을 추가합니다.#!/usr/bin/env nodeconst { program } = require("commander");const fs = require("fs");const path = require("path");const inquirer = require("inquirer");const chalk = require("chalk");const htmlTemplate = ` Hello CLI`;const routerTemplate = `const express = require('express');const router = express.Router();router...
-
commander, inquirer 사용하기(2)commander가 기본적으로 제공하는 옵션인 -v와 -h를 입력해보겠습니다.$ cli -v$ cli -h$ npx cli template -h$ npx cli template 명령어에 -h 옵션을 붙이면 명령어 설명서가 나옵니다. 조금 전에 usage나 name, description, option 메서드에 적었던 설명이 그대로 표시됩니다.cli template 명령어를 입력했을 때는 필수 요소인 을 빠뜨렸으므로 에러를 표시합니다. 이렇게 설명과 에러 검증을 자동으로 해줘서 편리합니다.이제 실제로 동작하는 코드를 작성해보겠습니다. template.js의 코드를 대부분 가져옵니다.#!/usr/bin/env nodeconst { program } = require("commander");const fs =..
-
commander, inquirer 사용하기(1)commander를 사용하여 예제 프로그램을 제작합니다. commander와 더불어 CLI 프로그램과 사용자 간의 상호작용을 돕는 inquirer 패키지, 콘솔 텍스트에 스타일을 추가하는 chalk 패키지도 함께 사용합니다.commander와 inquirer, chalk을 설치합니다.$ npm i commander@5 inquirer chalk 프로그램을 commander와 inquirer로 재작성할 것입니다. 먼저 commander 사용법부터 간단히 알아봅시다.#!/usr/bin/env nodeconst { program } = require("commander");program.version("0.0.1", "-v, --version").name(cli);program .command("templa..
-
간단한 콘솔 명령어 만들기(5)이를 위해 CLI 프로그램이 사용자가 원하는 것을 단계별로 질문하게 하겠습니다. 먼저 템플릿을 생성할지를 묻고, 그 다음에 파일명과 경로를 물어봅니다. cli 명령어만 입력했을 때는 단계적으로 질문하도록 만들어보겠습니다. template.js#!/usr/bin/env nodeconst fs = require("fs");const path = require("path");const readline = require("readline");let rl;let type = process.argv[2];let name = process.argv[3];let directory = process.argv[4] || ".";const htmlTemplate = ` Hello CLI `;const r..