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
를 입력하여 진행했습니다.
결과

- F / C : PM2 fork 모드와 cluster 모드 입니다
- D / P : Development와 Production 모드 입니다
- CD / CB : Compress Default, Compress Best 입니다.
결과를 보시면 극적인 차이를 결정하는 것은 cluster 모드 뿐인 것으로 보입니다. production 환경이 가장 큰 차이를 보여줄 것으로 예상했던 것과 달리 유의미한 차이를 내지 않습니다.
이 소스코드 저장소를 보시고 의견 주시면 좋을 것 같습니다.
참고자료 :