15.1.5 pm2
pm2는 원활한 서버 운영을 위한 패키지입니다. 이 패키지는 ‘개발할 때 nodemon을 쓴다면, 배포할 때는 pm2를 쓴다’는 말이 있을 정도로 유용합니다. 가장 큰 기능은 서버가 에러로 인해 꺼졌을 때 서버를 다시 켜주는 것입니다.
또 하나 중요한 기능은 바로 멀티 프로세싱입니다. 멀티 스레딩은 아니지만 멀티 프로세싱을 지원해 노드 프로세스 개수를 한 개 이상으로 늘릴 수 있습니다. 기본적으로는 CPU 코어를 하나만 사용하는데, pm2를 사용해서 프로세스를 여러 개 만들면 다른 코어들까지 사용할 수 있습니다. 클라이언트로부터 요청이 올 때 알아서 요청을 여러 노드 프로세스에 고르게 분배합니다. 그럼 하나의 프로세스가 받는 부하가 적어지므로 서비스를 더 원활하게 운영할 수 있습니다.
단점도 있습니다. 멀티 스레딩이 아니므로 서버의 메모리 같은 자원을 공유하지는 못합니다. 지금까지 세션을 메모리에 저장했는데, 메모리를 공유하지 못해서 프로세스 간에 세션이 공유되지 않게 됩니다. 로그인 후 새로 고침을 반복할 때 세션 메모리가 있는 프로세스로 요청이 가면 로그인된 상태가 되고, 세션 메모리가 없는 프로세스로 요청이 가면 로그인되지 않은 상태가 되는 것입니다.
이 문제를 극복하려면 세션을 공유할 수 있게 해주는 무언가가 필요합니다. 이를 위해 주로 멤캐시드(Memcached)나 레디스(Redis) 같은 서비스를 사용합니다. 레디스로 세션을 공유하는 방법은 15.1.8절에서 알아봅니다.