node 서버 배포시 확인

국물빌런·2020년 10월 1일
0

해당 글은 제로초 노드교과서를 참고함

환경변수 production으로 변경시 적용 사항

if (process.env.NODE_ENV == 'production')
{
	// morgan 옵션 'combined'로 변경
	app.use(morgan('combined'));
    //proxy 설정 추가
    app.enable('trust proxy');
    //기본 보안 정책 적용
    app.use(helmet({policySecurityPolicy: false}));
    app.use(hpp());
	// sessionOption 변경
	sessionOption.proxy = true;
    sessionOption.cookie.secure = ture;
}

sequelize 설정

config.json => config.js로 변경
민감 정보는 환경변수로 빼기 위함

npm start 명령스크립트 수정

"scripts": {
    "start": "cross-env NODE_ENV=production PORT=80 node server",
    "dev": "nodemon server",
    "test" "jest"
}

OS별로 환경변수 적용 방법이 다름, 통일시키기 위해 cross-env모듈 적용

XSS 공격 방어

sanitize-html을 적용
사용자 입력 데이터를 검사

const sanitizeHtml = require('sanitize-html');
var dirty = `<h1>링크</h1>`;
var clean = sanitizeHtml(dirty); console.log(clean); //result : 링크

CSRF 공격 방어

csurf모듈 사용
jwt토큰 인증방식으로 하면 굳이..?

SQL INJECTION 공격 방어

sequelize가 기본적인건 다 막아줌
자세한건 나중에..귀찮

원활한 운영을 위한 PM2 적용

서버가 에러로 인해 꺼졌을때 다시 켜줌
멀티 프로세싱 지원
로드밸런싱 지원
프로세스간 메로리 자원 공유를 위해 redis같은 db를 같이 연동하여 사용하곤 함
백그라운드로 실행됨
실행 스크립트에 pm2 적용
node명령어를 pm2로 변경, server.js파일 확장자까지 적어줘야함
i옵션으로 코어갯수만큼 프로세스를 띄움(-1은 코어갯수에서 -1개만큼 프로세스 실행)

"scripts": {
    "start": "cross-env NODE_ENV=production PORT=80 pm2 server.js -i -1",
    "dev": "nodemon server",
    "test" "jest"
}

npx pm2 list로 현재 서버 상태 확인
기타 명령어는 책을 참고바람.유용한게 정말 많음
따로 공부할 가치가 있음
노드는 코어갯수를 늘리는것보다 싱글코어로 오토스케일링이 더 효율적이라고 하는데.뭐 이건 테스트 해보고 적용해보기 바람

서버 로그를 보관하기 위해 winston 적용

console.log, console.error은 휘발성 정보임
파일로 남기기 위해 winston으로 logger모듈을 만들어서 사용
자세한건 검색으로 알아볼것..지침

  • 근데 요즘엔 aws 환경에서 운영하면 클라우드 와치 같은 콘솔프린트도 잡아내는 서비스가 있어서 그런 서비스로 대체 가능
    날짜별로 로그파일 변경하고 싶을시 winston-daily-rotate-file모듈 추가적으로 사용

메모리 공유가 필요할 시 redis사용

무료로 사용이 필요할시 redislabs에서 30m무료로 클라우드형태로 사용가능
node에서는 connect-redis redis모듈 설치후 클라우드로 연동가능
자세한 사항은 노드교과서 참고

node update

노드 버전을 관리할때
windows - nvm
linux/mac - n
패키지를 사용하여 버전을 관리하자

사용량 제한

express-rate-limit모듈로 가능
사용량 제한을 둠으로서 dos공격도 어느정도 방어

profile
국물을 달라

0개의 댓글