더북(TheBook)

process.env.NODE_ENV는 배포 환경인지 개발 환경인지를 판단할 수 있는 환경 변수입니다. 저는 주로 배포 환경일 때는 morgan을 combined 모드로 사용하고, 개발 환경일 때는 dev 모드로 사용합니다. combined 모드는 dev 모드에 비해 더 많은 사용자 정보를 로그로 남기므로 추후 버그를 해결할 때 더 유용하게 사용할 수 있습니다.

참고로 process.env.NODE_ENV는 .env에 넣을 수 없습니다. 개발 환경인지 배포 환경인지에 따라 값이 변해야 하는데, .env 파일은 정적 파일이기 때문입니다. NODE_ENV를 동적으로 바꾸는 방법은 cross-env에서 알아봅니다.

이번에는 express-session을 배포용으로 설정합니다. 단, express-session은 사용자의 환경에 따라 설정이 달라지므로 설명을 주의 깊게 읽어주세요.

app.js

...
app.use(cookieParser(process.env.COOKIE_SECRET));
const sessionOption = {
  resave: false,
  saveUninitialized: false,
  secret: process.env.COOKIE_SECRET,
  cookie: {
    httpOnly: true,
    secure: false,
  },
};
if (process.env.NODE_ENV === 'production') {
  sessionOption.proxy = true;
  // sessionOption.cookie.secure = true;
}
app.use(session(sessionOption));
app.use(passport.initialize());
...

배포 환경일 때는 proxycookie.securetrue로 바꿉니다. 하지만 무조건 이렇게 적용해야 하는 것은 아닙니다. proxytrue로 적용해야 하는 경우는 https 적용을 위해 노드 서버 앞에 다른 서버를 뒀을 때입니다. cookie.secure도 https를 적용할 때만 true로 바꿉니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.