Express의 NODE_ENV 설정은 성능에 영향을 줄까?

Express를 사용하는 앱을 운영에 배포해본 경험이 있는 개발자라면 NODE_ENV=production 을 당연하게 사용하게 됩니다. 이 NODE_ENV가 실제로 운영서버에서 실질적인 성능 향상에 역할을 하는지 알아 보았습니다.

Express를 사용하는 앱을 운영에 배포해본 경험이 있는 개발자라면 NODE_ENV=production 을 당연하게 사용하게 됩니다. 이 NODE_ENV가 실제로 운영서버에서 실질적인 성능 향상에 역할을 하는지 알아 보았습니다.

Express의 가이드에는 운영시NODE_ENV=production 을 사용하기를 권장하고 있습니다. 그 이유는 아래와 같습니다.

  • View 템플릿 캐싱
  • CSS 파일 캐싱
  • 에러 메시지 단순화

그렇다면 API 서버의 경우에는 어느정도 효과가 있을까요?

결론부터 말하자면 거의 성능향상에 도움이 되지 않습니다. 다른 시각으로 보면 개발 중에도 최상의 성능을 내고 있다 라고 볼 수 있습니다. (도움을 주신 comfuture님께 감사의 말씀을 전합니다)

테스트한 API는 매우 큰130kb 정도의 JSON입니다. 이 정도 크기의 JSON을 테스트 데이터로 선택한 이유는 실제 개선해야할 API와 유사한 환경을 만들기 위함입니다. 물론 JSON 크기를 줄이는 것이 가장 좋습니다.

테스트는 다음 과정으로 진행했습니다.

변경되는 조건은 아래와 같습니다.

  • NODE_ENV : development / production
  • 데이터 압축 (compression): 사용안함 / 기본 압축 / 최대 압축
  • 클러스터모드 사용 유무

테스트 도구는 wrk 입니다. 스레드와 요청량, 요청 시간을 제어할 수 있어 선택했습니다.

터미널에서 wrk -t12 -c400 -d1m http://127.0.0.1:3000 를 입력하여 진행했습니다.

결과

조건에 따른 Request / Response 그래프
  • F / C : PM2 fork 모드와 cluster 모드 입니다
  • D / P : Development와 Production 모드 입니다
  • CD / CB : Compress Default, Compress Best 입니다.

결과를 보시면 극적인 차이를 결정하는 것은 cluster 모드 뿐인 것으로 보입니다. production 환경이 가장 큰 차이를 보여줄 것으로 예상했던 것과 달리 유의미한 차이를 내지 않습니다.

소스코드 저장소를 보시고 의견 주시면 좋을 것 같습니다.

참고자료 :

Subscribe to Half-Built Life

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe