Node.js 14 LTS 로 이전해야 할까?

김태영·2020년 11월 16일
2

NodeJS

목록 보기
1/1

Node.js 14(코드네임 Fermium) 가 2020년 10월 27일 부로 LTS로 승격되었습니다.지원 일정은 2021/10/19 ~ 2023/04/30 입니다.

페르뮴은 원자번호 100 번의 화학 원소입니다.구글의 안드로이드가 알파벳 순으로 간식 이름을 코드네임으로 사용하는 것처럼, Node.js 는 계속해서 원소의 이름으로 버전별 코드네임을 만들고 있습니다.

Node.js 14로 이전하게 만드는 새로운 기능들?

업그레이드된 Javascript 엔진 V8.1 이 장착되었습니다🏁.

이는, 자바스크립트에서 새로운 문법을 사용할 수 있다는 뜻 입니다.새롭게 추가된 두가지 문법에 대해서 알아보도록 하겠습니다.

Nullish 연산자

nullish 병합 연산자는 다음과 같습니다 ?? 이 연산자는 ‘가장 먼저 정의된’ 값을 반환합니다.

즉, a ?? b 의 평가 결과는

  • a 가 null 도 아니고, undefined도 아니면 a
  • 그 외의 경우는 b

를 반환합니다.

사실 개발하다 보면 꽤 많이 사용하게 되는 상황입니다.또한 숫자를 처리하는 부분에서 많은 버그를 일으키는 부분이기도 합니다.

기존에는 OR 연산자(||) 를 사용해서 비슷한 기능을 구현 하기도 했었고,3항 연산자를 사용해서 구현 하기도 하였습니다.

|| 연산자와의 차이

  • || 연산자는 첫 번째 ‘truthy’ 값을 반환합니다.
  • ?? 연산자는 첫 번째 ‘defined’ 값을 반환합니다.

일반적으로는 문제가 크게 되지 않지만, 숫자를 다룰때, 특히 0 과 관련된 부분에서 문제가 됩니다.

저희는 lodash를 적극적으로 활용하고 있었습니다.

이제 불필요한 코드가 되겠네요, 아래와 같이 사용하면 되니까요

선택적 체인(Conditional Chain)

선택적 체인 (?.) 문법은, 앞의 평가 대상이 undefined 이거나 null 이면, 평가를 멈추고 undefined를 반환합니다.

nullish 와 [] 를 같이 사용할 수도 있습니다.

아래와 같이 선택적 체이닝과 널리쉬 연산자를 같이 사용할 수도 있습니다.

더 이상 lodash.get 을 사용하지 않아도 될 것 같네요!

Object 뿐만 아니라, 함수에 있어서도 사용이 가능합니다.

기존에는 아래처럼 작성했던 코드입니다.

⚠️ 하지만, 널리쉬 연산자는 할당(기존에는 lodash.set 을 사용) 하는데는 사용할 수 없습니다.

사실 저는 이 두가지만으로도, Node.js 14 버전으로 빨리 이전해야겠다 라는 생각을 감출 수가 없었습니다.

이 외에도 i18n 을 native 하게 지원하는 Intl.DisplayNames, Intl.DateTimeFormat 과 같은 사항들이 포함되었습니다.

진단 보고

디버깅 및 운영 환경에서의 에러에 대해서 대처하기 위해 유용하게 사용될 수 있는 진단 보고가 안정적인 단계로 제공됩니다.

node --report-uncaught-exception --report-on-signal \
--report-on-fatalerror app.js

이 명령을 분석해 보겠습니다.

  • -report-uncaught-exception: 보고서는 포착되지 않은 예외에 대해 생성됩니다. 우리는 모든 오류가 포착되고 처리되도록하고 싶습니다.
  • -report-on-signal: 특정 신호가 Node.js 프로세스로 전송 될 때 보고서가 생성되도록합니다.
  • -report-on-fatalerror: 모든 치명적인 오류를보고합니다. js 애플리케이션이 작동을 멈출 수있는 모든 오류를 알려줍니다.
  • app.js: 진단 보고서를 실행하는 위치입니다.

⚠️주의사항

실행 환경 제약의 변화

Node.js 14버전은,masOS: 10.13(High Sierra) 이상에서만 실행됩니다.Linux: GCC 6 버전 이상을 사용할때만 실행됩니다.Windows: 단종된 Windows 배포판에서는 실행되지 않습니다.

Stream 의 변화

Stream 구현의 모호성을 제거하고, 동작을 간소화 하기 위해 Stream API의 변경이 있었습니다.특히 autoDestroy 옵션이 기본적으로 true가 되어, 스트림이 종료 된후, 항상 _destory 함수가 호출됩니다.

결론

저희가 개발하고 있는 프로젝트에서Node.js 버전을 업그레이드하는 것을 검토했을때, 통합테스트 통과도 문제가 없었으며, 변경사항들이 문제를 일으킬 만한 여지는 없었기 때문에 새로운 버전을 받아들이기로 결정했습니다!

저희는 위워크 홍대점에서 일하고 있습니다. 포지션 무관, 합류에 관심이 있으시다면 지원서를 제출해 주세요. (경력/학력/성별 무관)

profile
두손컴퍼니 개발팀장

0개의 댓글