본문으로 바로가기

최근 Frontend에는 grunt, gulp를 거쳐서 webpack이 대세가 되었다.

그러면 이제 backend는 뭘로 해야 하는가라는 생각이 들기 시작했다.

어떻게 build하고, 어떻게 production에서 실행시키켜야 할까?


Process managers for Express apps

친절하게도 Express에서 Express app을 production에 적용할때 사용가능한 process manager들을 정리해 놓았다.

process manager를 이용해서 얻을 수 있는 장점들
  • Restart the app automatically if it crashes.
  • Gain insights into runtime performance and resource consumption.
  • Modify settings dynamically to improve performance.
  • Control clustering.
대표적인 process manager들

Compare StrongLoop Process Manager, pm2, forever

StrongLoop에서 StrongLoop PM과 pm2, forever를 해 놓았는데 역시 StrongLoop PM이 더 좋다는 결론을 내리고 있다.

이 시점에서 GitHub의 star라던가, 최근까지 지속적으로 개발이 되고 있는지를 살펴보았다.
  • StrongLoop PM - 601 Star,2016년 이후로 commit되는 것들이 별로 없다.
  • pm2 - 19,729 Star, 최근까지 많은 commit이 이뤄지고 있다.
지금까지만 봐서는 주변에서도 pm2를 사용하는 사람들이 있어서 pm2를 process manager로 사용하는 게 좋을 것 같다는 개인적인 결론을 내렸다.


PM2 for development?

다른 process manager들과 마찬가지로 pm2는 production을 위한 것이라고 할 수 있다. 

그럼 개발할때는 grunt나 gulp를 쓸때와 마찬가지로 watch를 해야 할지 궁금해져서 찾아보니,

pm2에서는 pm2-dev라는 도구를 지원해주고 있었다.


pm2와 함께 제공되는 pm2-dev는 file이 변경되는 경우에 재시작시키는 기능을 제공하지만 --interpreter와 같은 기능을 제공하지 않는 것으로 보여서 실제 개발에 유용하지 않다. (pm2-dev는 pm2에 비해 제공하는 옵션이 거의 없어 보임)

(pm2 자체는 --interpreter 옵션을 제공해서 babel-node를 이용해 실행이 가능하다.)

pm2 start --interpreter babel-node server.js //(server.es6)

Refactor Watch System(https://github.com/Unitech/pm2/issues/2629) 이슈를 통해서 개발에 적합한 기능을 제공할 계획은 있어 보이지만 언제될지 알 수 없는 상태.



그러면 개발환경은 낡은 grunt나 grunt보다는 최신이긴 하지만 webpack에 비해서는 오래된 gulp를 이용하기보다

package.json에 babel, nodemon을 이용하도록 설정해서 해보자 생각이 들어서 방법을 찾아보았다.


Example Node Server w/ Babel

babel + nodemon example project

development인 경우에는 babel-node를 사용해도 괜찮지만 production인 경우에는 좋지 않다. 

precompile을 한 후에 실행하는 것을 권장. => production에서는 precompile된 것을 pm2같은 process manager로 실행시키는 것이 좋을 것 같다.



Webpack Hot Module Replacement (HMR) Example

server-side Hot Module Replacement with Webpack & Express

nodemon도 필요없고, webpack을 이용하니 client와 유사한 개발환경을 구축할 수 있고,

bundling까지 되니 production에 deploy할때 simple할 것 같다.

=> 나쁘지는 않은 것 같은데 굳이 webpack HMR이 production에서 돌아갈 필요는 없다는 생각이 든다.

=> 가능성은 있긴 한데 당장은 babel-node, nodemon으로 다시 회귀!