Node express 서버 배포 패키지
✒️ 2025-05-26 14:47 내용 수정
Node.js 교과서 개정 3판 내용 정리
- 팀 프로젝트를 최종 배포하기로 결정하여 서버와 클라이언트 모두 배포 설정을 진행했다.
- 배포 설정은 서버와 클라이언트 배포를 위한 AWS EC2 설정 참고.
- 배포 설정은 Node.js 교과서 개정 3판의 15장 내용을 참고하여 진행했다.
1. cross-env
process.env를 동적으로 변경할 수 있는 패키지
dotenv로process.env를 관리할 수 있지만.env파일은 정적 파일이기 때문에 동적으로 관리할 수 있는cross-env패키지가 필요하다.
npm install cross-env
- server의 package.json 파일에 script 부분에
"start" : "cross-env NODE_ENV=production start"형식으로 작성하면process.env.NODE_ENV환경 변수를 배포용으로 가동 시 동적으로 설정할 수 있다.
{
"name": "test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"server": "node ./server/server.js",
"client": "npm start --prefix client",
"dev": "concurrently \"npm run server\" \"npm run client\"",
"start": "cross-env NODE_ENV=production start ./server/server.js"
},
// 생략
}
2. sanitize-html
XSS 공격을 막기 위한 패키지
3. csurf
CSRF 공격을 막기 위한 패키지
4. pm2
서버 운영을 위한 패키지로, 서버에 에러가 생겨 꺼졌을 때 재실행 해주고, 멀티 프로세싱을 지원
- pm2 참고.
5. winston
실제 서버 운영 시 console.log와 console.error를 대체하는 모듈
6. helmet, hpp
Express 취약점 보완 middleware
- helmet : HTTP response header 설정으로 express를 보완하는 middleware
- helmet 공식 문서 : https://www.npmjs.com/package/helmet
- 참고 자료 : Antonello Zanini's Using Helmet in Node.js to secure your application
- 보안 확인용 Security headers : https://securityheaders.com/
- 아직 이 부분의 상세 항목에 대한 이해가 부족해 기본 설정으로 적용했다.
- hpp : HTTP parameter pollution 공격을 방지하는 middleware
- hpp 공식 문서 : https://www.npmjs.com/package/hpp
- 만약
path?name=jack&name=jack과 같은 요청이 오면req.query.name=['jack', 'jack']으로 정보가 들어오기에 이를 악용하는 것을 방지하기 위해 마지막 parameter 값만 추출한다.
npm install helmet hpp
// server.js
const helmet = require('helmet');
const hpp = require('hpp');
if (process.env.NODE_ENV === 'production') {
app.use(helmet()); // 기본 설정 사용
app.use(hpp()); // 다른 middleware와 route가 이 구문 뒤에 오는 것이 좋음
}