피드로 돌아가기
Node.js 8.1.1 (Current)
Node.js BlogNode.js Blog
Backend

Node.js 8.1.1이 child_process, HTTP, HTTPS, Readline 모듈의 회귀 버그 4건을 수정하고 promisify() 에러 출력 강화

Node.js 8.1.1 (Current)

2017년 6월 13일5intermediate

Context

Node.js 8.1.1 릴리스는 이전 마이너 버전에서 도입된 여러 회귀 버그를 해결해야 했다. child_process.exec()의 promisify() 버전에서 표준 에러 출력이 누락되었고, HTTP와 cluster 모듈 조합 사용 시나리오가 손상되었으며, readline 모듈의 다중 사용 환경에서 npm init 등이 정상 작동하지 않았다.

Technical Solution

  • child_process 모듈: promisify() 버전의 exec() 호출 실패 시 stdout과 stderr을 에러 객체에 포함시켜 디버깅 정보 제공 강화
  • HTTP 모듈: cluster 모듈과 함께 사용할 때 socket.server가 null인 경우를 처리하는 조건문 추가
  • HTTPS 모듈: rejectUnauthorized 옵션이 unix socket 연결에서도 정상 작동하도록 수정
  • Readline 모듈: 동일한 입력 스트림에서 readline을 여러 번 사용할 때 onNewListener 이벤트 리스너 정리 로직을 되돌림
  • child_process 모듈: nextTick() 호출 횟수 감소 및 send() 메서드 결과 처리 로직 단순화로 내부 효율성 개선

Key Takeaway

회귀 버그 수정 시에는 문제 사항이 아닌 원래 의도된 동작으로 명확히 되돌려야 하며, 특히 promisify()와 같은 고수준 API에서 에러 컨텍스트 정보를 충분히 제공하는 것이 프로덕션 환경의 문제 해결 효율을 크게 향상시킨다.


child_process를 Promise 기반으로 운영하는 Node.js 애플리케이션에서는 promisify() 호출 실패 시 catch 블록에서 에러 객체의 stdout/stderr 속성을 검사하면 자식 프로세스의 실패 원인을 더 정확히 파악할 수 있다. 또한 cluster 모듈을 사용하는 멀티프로세스 애플리케이션에서는 HTTP 핸들러 내 socket 객체의 server 속성 null 체크를 항상 수행해야 한다.

원문 읽기