이클립스는 정말이지 단축키가 너무 불편하다. MS처럼 윈도우 기반의 단축키가 전혀 매칭되지 않아 여간 불편한게 아니다. 정성스럽게 키바인딩을 해둬도 workspace가 바뀌면 도루묵이길래 찾아보니 단축키 설정을 내보내고 갖고오기가 가능했다.
방법은 아래와 같다.
내보내기 File > export > General > Preferences (선택 후 Next) > Keys Preferences 체크 후 하단의 To preference file에서 원하는 위치로 파일명과 함께 지정 후 Finish
갖고오기 File > import> General > Preferences (선택 후 Next) > Keys Preferences 체크 후 상단의 From preference file에서 export해둔 파일명 지정 후 Keys Preferences 체크 후 Finish를 선택하면 재시작하라고 나오고 재시작하고 나면 내가 설정해둔 단축키가 정상적으로 동작한다.
pm2란? pm2는 Node.js 애플리케이션을 관리하기 위한 프로세스 매니저로 애플리케이션을 백그라운드에서 실행하고, 자동으로 재시작하며, 여러 가지 기능을 제공한다.
설치와 실행 npm install pm2 -g를 실행하면 설치가 가능하다. 반드시 -g로 전역설치를 해야만 한다. 안그러면 command not found오류를 만나게 될 것이야~
기본 실행방법은 아래와 같다. (참고로 내 node.js 푸시 서버 이름은 pushServer.js다.)
시작 pm2 start pushServer.js
중지 pm2 stop pushServer.js
만약 실행중인 프로그램을 또 실행하려 들면 기특하게도 이런 오류를 내뱉어준다.
pm2를 사용하는 이유는 로그아웃을 해도 pm2로 돌리면 나중에 관리가 되기 때문이다.
자동 재실행 여기가진 좋다. 그.런.데 내가 만든 푸시 서버 node.js는 node-cron을 사용하여 1분마다 체크 로직이 들어있는데 이상한게 계속 메모리 점유율이 올라갔다. 59M .. 60M .. 71M ... 의심가는 로직을 주석처리 해보고 별짓 다 해봐도 아무리 용을 써도 메모리 점유율이 그대로였다. node-cron만 사용하면 그랬다. 혹시나 싶어 pm2 대신 그냥 node pushServer.js로 실행한들 동일했다.
그러다 pm2는 자동 재실행하거나 메모리 사이즈가 일정 수치를 넘어서면 자동 재실행 등 다양한 옵션질이 가능하니 이를 활용하기로 했다.
일단 메모리 오버시 자동 재실행을 하기 위해선 별도의 js를 만들어야 한다. 이름은 process.config.js라 지었다.
이후 pm2 start process.config.js를 실행하면 알아서 잘 동작한다. 해당 파일안의 script를 원하는 인스턴스의 개수 만큼 실행해주고 로그 또한 원하는 위치에 만들어준다.
혹시라도 실수로 instances를 이미 max로 실행해서 프로세스가 여러개 생성되었다면 pm2 list를 실행해보고 pm2 delete all 명령어로 깨끗하게 다 지워버리면 된다. 성형 후 다시 새롭게 시작할 수 있다.
모니터링 실행중인 node.js 프로그램의 상태를 확인하고 싶다면 monit 기능을 이용하면 된다. pm2 monit 좌측 상단엔 실행중인 프로세스 리스트로 화살표로 이동이 가능하다. 우측 하단에 Metadata에서 앱 이름과 버전 재실행 횟수 실행기간 등등 정보와 좌측 하단엔 메모리 정보들을 확인 가능하다.
모니터 툴을 빠져나올 땐 ctrl+c로 빠져나오면 된다. 하단에 기본적인 사용 안내가 나와있는것을 확인할 수 있다.
로그파일 pm2로 실행중인 node.js 프로그램에서 console.log를 찍으면 로그가 .pm2/logs 폴더에 파일로 계속 쌓이는데 이것도 로그 파일 사이즈별로 컨트롤이 가능하다. 이거 안해주면 나중에 어마어마한 사이즈의 로그파일을 경험하게 되니 반드시 해주자.
방법은 특이하게 npm i가 아닌 pm2 install pm2-logrotate 이렇게 설치해야 한다. 당연히 pm2는 제일 위에 언급하였듯이 npm으로 설치를 미리 해두어야 한다.
pm2 set pm2-logrotate:max_size 1K 또는 pm2 set pm2-logrotate:max_size 1M 이런식으로 실행 후 pm2 start pushServer.js를 실행하면 이후 console.log로 찍은 로그는 저 사이즈를 넘을 경우 자동으로 새로운 파일이 생성된다.
만약 이것도 싫고 하루마다 파일을 생성하고 싶다면? pm2 set pm2-logrotate:rotateInterval '0 0 * * *'
끝으로 자동재실행까진 괜찮은데 이 경우 메모리 누수가 발생하는건 아닌가 불안하다. 여기까진 확인을 못해봤다.