간단한 콘솔 명령어 만들기package.json{ "name": "node-cli", "version": "0.0.1", "description": "nodejs cli program", "main": "index.js", ... "bin": { "cli": "./index.js" },}index.js#!/usr/bin/env nodeconsole.log('Hello CLI', process.argv);`#!/usr/bin/env node`는 맥과 리눅스에서 /usr/bin/env에 등록된 node 명령어로 이 파일을 실행하라는 의미다.process.argv는 실행한 명령어의 인자들을 볼 수 있다.해당 모듈 전역 설치npx i -g모듈 실행npx cliCLI로 입력받기index.js#!..
SSEServer Sent Event는 클라이언트에서 요청 없이도 언제든지 서버가 새로운 데이터를 보내는 것이 가능한 방식을 말한다. 경매 시스템 같은 경우 클라이언트에서 경매가 언제 종료되는지 언제 경매가가 업데이트되는지 요청을 보내는 것이 아닌 서버에서 SSE 방식으로 정보를 보내주고 클라이언트는 응답을 받기만하면 된다.sse 모듈 설치npm i ssesse.jsconst SSE = require("sse");module.exports = (server) => { const sse = new SSE(server); sse.on("connection", (client) => { setInterval(() => { client.send(Date.now().toString()); ..
웹 소켓웹 소켓은 HTML5에 새로 추가된 스펙으로 실시간 양방향 데이터 전송을 위한 기술이다HTTP 프로토콜이아닌 WS 프로토콜을 사용한다.웹 소켓 이전에는 폴링 방식을 사용했다. 서버 센트 (SSE) 기술은 클라이언트에서 서버로 전송하는 것이 아닌 서버에서 클라이언트 단방향 통신이다. ws 모듈로 웹 소켓 사용하기ws 모듈 설치npm i wsapp.jsconst express = require("express");const path = require("path");const morgan = require("morgan");const cookieParser = require("cookie-parser");const session = require("express-session");const nunjuc..
테스트 준비하기JestJest는 Meta에서 관리하는 테스트 프레임워크다. Jest는 단순성에 초점을 맞춰 개발돼 별도의 설정없이 바로 사용할 수 있다.Jest 환경 설정Jest 설치하기> npm i -D jestJest를 npm 스크립트로 바로 실행할 수 있게 config.json 수정{ "name": "nodebird", "version": "0.0.1", "description": "익스프레스로 만드는 SNS 서비스", "main": "app.js", "scripts": { "start": "nodemon server.js", "test": "jest", // 추가 }, ...}Jest 기본 사용법테스트용 파일은 파일명과 확장자 사이에 `test`나 `spec`을 넣는다. `..
JWTJWT(JSON Web Token)은 JSON 형식의 데이터를 저장하는 토큰이다.JWT의 구성요소헤더(HEADER): 토큰 종류와 해시 알고리즘 정보가 저장페이로드(PAYLOAD): 토큰의 내용물이 인코딩된 부분시그니처(SIGNATURE): 일련의 문자열로, 시그니처를 통해 토큰이 변조되었는 지 여부를 확인JWT 토큰은 JWT 비밀 키를 알지 않는 이상 변조가 불가능 JWT 토큰의 단점은 용량이 큼 JWT 인증 실습JWT 모듈 설치npm i jsonwebtoken 시크릿 키 env에 저장// .envJWT_SECRET=비밀키임의생성JWT 검증 미들웨어 생성// midlewares/index.jsconst jwt = require('jsonwebtoken')...exports.verifyToken =..
시퀄라이즈를 이용해 도메인 모델을 조회할때 매핑된 유저모델을 함께 가지고오려고 했는데 해당 오류가 발생했다.API서버에 유저가 도메인을 등록하면 API서버는 토큰을 발급해주는 기능으로 유저는 여러개의 도메인을 보유할 수 있고 하나의 도메인은 하나의 유저만 소유할 수 있게 해 일대다 관계로 매핑이 되어있었다.`models/user.js`// models/user.jsconst Sequelize = require("sequelize");class User extends Sequelize.Model { static initiate(sequelize) { User.init( { email: { type: Sequelize.STRING(40), allo..
PassportPassport 모듈은 이름 그대로 우리의 서비스를 사용할 수 있게 해주는 여권 같은 역할을 하는 모듈다.회원 가입과 로그인을 직접 구현할 수도 있지만, 세션과 쿠키 처리 등 복작한 작업을 Passport 모듈이 대신 해준다. Passposrt를 사용해 구글, 페이스북, 카카오톡 같은 기존으 SNS 계정으로 로그인할 수도 있다. Passport는 다양한 인증방식을 전략(Strategy)이라는 플러인을 제공한다. Passport 개념전략 (Strategy)인증로직을 담당하며, 다양한 인증 방식을 구현하기 위해 사용한다.`passport-local`: 이메일/비밀번호 기반 인증`passport-kakao`: 카카오 인증`passport-jwt`: JWT 토큰 기반 인증serializeUser ..
자바스크립트로 엑셀 파일을 생성하거나 수정하는데 자주 사용되는 npm 패키지들이 있습니다. 세 패키지에 대해 알아보고 어느 상황에서 어떤 라이브러리를 쓰면 좋을지 정리해 보겠습니다.sheetJSExcelJSxlsx-populate SheetJS가장 대표적으로 많이 사용되는 라이브러리입니다. 주로 쓰거나 읽기 작업에 사용되는 라이브러리입니다. 가볍고 빠르기 때문에 간단한 작업을 하거나 브라우저를 사용할때 이용하면 좋습니다. ExcelJSSheetJS에 비해 스타일 지정, 차트, 머지 등 엑셀의 레이아웃 요소를 조작할 수 있는 고급 기능들을 더 제공합니다. 데이터 시각화와 포맷 중심의 엑셀 작업에서 주로 활용됩니다. xlsx-populate 엑셀 문서 조작에 초점을 맞춘 라이브러리입니다. 기존 엑셀 파일을 ..