[Node.js 교과서] 섹션 16 - 서버리스 노드 개발
·
Node.js
AWS S3로컬 저장소의 한계업로드된 이미지가 서버의 uploads 폴더에 저장되므로, 다른 서버에 접속한 사용자들은 이미지를 볼 수 없다여러 대의 서버가 동작하는 환경에서는 이미지 접근에 제약이 생긴다EC2는 24시간 요금을 지불해야 하며, 항상 서버를 실행 상태로 유지해야 한다.AWS S3 사용S3 버킷 생성AWS Management Console에 로그인 후 S3 서비스를 선택버킷 만들기 버튼을 클릭하고, 고유한 버킷 이름과 리전을 설정퍼블릭 액세스 차단 설정은 필요한 경우 해제하고, 정책 설정{ "Version":"2012-10-17", "Statement": [ { "Sid":"AddPerm", "Effect": "Allow", "Principal": "*", "Action": ..
[Node.js 교과서]섹션 15 - AWS에 배포해보기
·
Node.js
배포 전 준비사항morganmorgan은 HTTP 요청 로그를 기록하는 미들웨어배포 환경과 개발 환경에 따라 로깅 포맷을 분리하여 설정설치 및 설정:morgan 설치npm install morgan`app.js`에서 환경별 로깅 설정const morgan = require("morgan");if (process.env.NODE_ENV === "production") { app.use(morgan("combined")); // 배포 환경: 자세한 로그} else { app.use(morgan("dev")); // 개발 환경: 간단한 로그}express-sessionexpress-session은 사용자 세션 관리를 위한 미들웨어배포 환경에서는 보안을 위해 HTTPS 설정을 추가하고, Redis를 사용해 ..
[Node.js 교과서] 섹션 14- CLI 프로그램 만들기
·
Node.js
간단한 콘솔 명령어 만들기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#!..
[Node.js 교과서] 섹션 13- 실시간 경매 시스템 만들기
·
Node.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()); ..
[Node.js 교과서] 섹션 12 - 웹 소켓으로 실시간 데이터 전송하기
·
Node.js
웹 소켓웹 소켓은 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..
[Node.js 교과서] 섹션 11 - 노드 서비스 테스트 하기
·
Node.js
테스트 준비하기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`을 넣는다. `..
[Node.js 교과서] 섹션 10 - 웹 API 서버 만들기
·
Node.js
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 =..
[error] Sequelize A is not associated to B
·
Node.js
시퀄라이즈를 이용해 도메인 모델을 조회할때 매핑된 유저모델을 함께 가지고오려고 했는데 해당 오류가 발생했다.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..