만쥬의 개발일기
article thumbnail
[Puppeteer / Trouble Shooting] puppeteer가 좀비 프로세스를 종료하지 않는 문제

puppeteer로 만든 프로그램을 돌리는 중, chromium 브라우저가 종료되지 않는 문제가 발생했다. 다음 명령어로 chromium 창이 몇개 떠 있는지 확인해보자. pgrep chromium | wc -l 949개?! 엄청난 메모리 손실을 유발하고 있었다. 지금은 겨우 버티고 있을지 몰라도, 언제 서버가 다운될 지 모르는 상황이다. ps -ef로 확인을 해보니, 좀비 프로세스로 끝도 없이 남은 모습.. 분명히 browser.close()를 해준 것 같은데 왜 좀비로 남은 걸까? 그 이유는 try catch문으로 감싸서 브라우저를 닫아줄 때, try문에만 browser.close를 적어주었기 때문이다. 이미 브라우저를 켠 상태에서 error가 날 경우 프로그램이 종료되며 해당 브라우저는 좀비 프로세..

[Javascript] - Winston을 사용하여 node.js에서 로깅하는 법

자바스크립트 코드 작성시 로거의 필요성을 느껴 Winston이라는 라이브러리를 사용해 로깅을 해보자. 모듈 설치 npm install winston --save npm install winston-daily-rotate-file --save npm install moment npm install app-root-path Logger.js 작성 const appRoot = require('app-root-path'); // root 경로를 가져오기 위해 사용 var winston = require('winston'); // log 파일 작성 require('winston-daily-rotate-file'); // log 파일을 일자별로 생성하기 위해 사용 const moment = require('mome..

article thumbnail
[JavaScript] - 자바스크립트 유닛 테스트 도구인 Jest 사용법

설치 터미널에서 다음 명령어로 jest를 설치한다. npm install --save-dev jest 설정 package.json 에서 스크립트의 test를 jest로 수정해준다. 다음 예시처럼 폴더계층을 만들어준다. ├── package-lock.json ├── package.json ├── src │ ├── index.js │ └── tests │ └── test.js 테스트 작성 test.js에 테스트 코드를 짠다. describe('Jest 사용 예시', () => { test('숫자 0은 false이다', () => { expect(Boolean(0)).toBe(false); }); // 프리미티브 타입 검사의 경우 toEqual()을 사용해도 큰 문제는 없습니다. test('숫자 0은 fals..