배포 전 준비사항
morgan
- morgan은 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-session
- express-session은 사용자 세션 관리를 위한 미들웨어
- 배포 환경에서는 보안을 위해 HTTPS 설정을 추가하고, Redis를 사용해 세션을 저장
설정
- express-session 설치
npm install express-session
- `app.js`에서 세션 설정
const session = require("express-session"); const sessionOption = { resave: false, saveUninitialized: false, secret: process.env.COOKIE_SECRET, cookie: { httpOnly: true, secure: process.env.NODE_ENV === "production", }, }; if (process.env.NODE_ENV === "production") { sessionOption.proxy = true; // 프록시 허용 } app.use(session(sessionOption));
sequelize
설정
- sequelize와 관련 패키지 설치
npm install sequelize sequelize-cli mysql2
- models/index.js에서 Sequelize 초기화
const Sequelize = require("sequelize"); const config = require("../config/config")[process.env.NODE_ENV || "development"]; const sequelize = new Sequelize(config.database, config.username, config.password, config); sequelize .sync({ force: false }) // 개발 모드에서만 true 사용 .then(() => console.log("데이터베이스 연결 성공")) .catch((err) => console.error(err));
cross-env
cross-env는 환경 변수를 운영체제에 따라 동적으로 설정할 수 있게 도와줌
설정
- cross-env 설치
npm install cross-env
- `package.json`에서 스크립트 추가:
"scripts": { "start:dev": "cross-env NODE_ENV=development node app.js", "start:prod": "cross-env NODE_ENV=production node app.js" }
sanitize-html
sanitize-html은 XSS(Cross-Site Scripting) 공격을 방지하기 위해 HTML 입력을 필터링
설정
- sanitize-html 설치
npm install sanitize-html
- 입력값을 필터링하는 코드 예시
const sanitizeHtml = require("sanitize-html"); const cleanInput = sanitizeHtml(userInput, { allowedTags: [], // 허용할 태그 설정 allowedAttributes: {}, // 허용할 속성 설정 });
csurf
csurf는 CSRF(Cross-Site Request Forgery) 공격을 방지하는 미들웨어
설정
- csurf 설치
npm install csurf
- CSRF 토큰 생성 및 검증
const csrf = require("csurf"); const csrfProtection = csrf({ cookie: true }); app.use(csrfProtection); app.get("/form", (req, res) => { res.render("form", { csrfToken: req.csrfToken() }); // CSRF 토큰 전달 }); app.post("/submit", csrfProtection, (req, res) => { res.send("데이터 제출 성공"); });
pm2 사용하기
PM2는 서버 운영 시 안정성을 제공하며, 프로세스 관리와 자동 재시작 기능을 지원
설치 및 사용
- pm2 설치
npm install -g pm2
- pm2로 애플리케이션 실행
pm2 start app.js
- 실행 중인 프로세스 확인
pm2 list
- 모든 프로세스 종료
pm2 kill
`package.json`에 PM2 실행 스크립트를 추가할 수도 있다.
"scripts": {
"start": "pm2 start app.js"
}
winston 사용하기
winston은 애플리케이션의 로그를 체계적으로 관리할 수 있도록 함
설정 및 사용
- winston 설정 파일(`logger.js`) 작성
const { createLogger, format, transports } = require("winston"); const logger = createLogger({ level: "info", format: format.json(), transports: [ new transports.File({ filename: "combined.log" }), new transports.File({ filename: "error.log", level: "error" }), ], }); if (process.env.NODE_ENV !== "production") { logger.add(new transports.Console({ format: format.simple() })); } module.exports = logger;
- `app.js`에서 로거 사용
const logger = require('./logger'); logger.info('서버 시작'); logger.error('에러 발생');
Redis에 세션 저장하기
Redis를 사용해 세션 데이터를 저장하면 멀티 프로세스 환경에서도 세션 관리가 가능함
설정 및 사용:
- connect-redis 설치:
npm install redis connect-redis
- Redis 클라이언트 설정:
const redis = require("redis"); const RedisStore = require("connect-redis")(session); const redisClient = redis.createClient({ url: `redis://${process.env.REDIS_HOST}:${process.env.REDIS_PORT}`, password: process.env.REDIS_PASSWORD, legacyMode: true, }); redisClient.connect().catch(console.error); app.use(session({ resave: false, saveUninitialized: false, secret: process.env.COOKIE_SECRET, store: new RedisStore({ client: redisClient }), cookie: { httpOnly: true, secure: process.env.NODE_ENV === "production", }, }));
Git과 GitHub 사용하기
Git과 GitHub를 사용해 소스 코드 버전 관리와 원격 저장소에 업로드를 진행
설정 및 사용:
- 프로젝트 디렉토리에서 Git 초기화
git init
- 모든 파일 추가 및 커밋
git add . git commit -m "Initial commit"
- GitHub 원격 저장소에 코드 푸시
git remote add origin <repository-url> git push origin main
`.gitignore` 파일을 작성하여 관리 대상에서 제외할 파일을 설정할 수 있다:
node_modules/
.env
AWS에 배포하기
AWS Lightsail 설정
- AWS Lightsail 콘솔에 로그인
- Linux/Node.js 인스턴스를 생성
- $5/월 플랜(첫 3개월 무료)을 선택
SSH로 서버 접속
- Lightsail 콘솔에서 SSH 버튼을 클릭하여 서버에 접속
- 서버에서 Node.js와 npm 설치
sudo apt update sudo apt install nodejs npm
애플리케이션 배포
- GitHub에서 소스 코드 클론
git clone <repository-url> cd <project-folder>
- 의존성 설치
npm install
- pm2를 사용해 서버 실행
pm2 start app.js
'Node.js' 카테고리의 다른 글
[Node.js 교과서] 섹션 16 - 서버리스 노드 개발 (0) | 2025.01.11 |
---|---|
[Node.js 교과서] 섹션 14- CLI 프로그램 만들기 (1) | 2024.12.15 |
[Node.js 교과서] 섹션 13- 실시간 경매 시스템 만들기 (0) | 2024.12.13 |
[Node.js 교과서] 섹션 12 - 웹 소켓으로 실시간 데이터 전송하기 (0) | 2024.12.08 |
[Node.js 교과서] 섹션 11 - 노드 서비스 테스트 하기 (3) | 2024.12.05 |