아주추운날 ㄷㄷ ㅜㅜ 너무 추워서 회사 끝나고 진심으로 집에 갈까 했는데, 다시 정신을 차리고!
강남 프로그래머스 강의장 가서 책 저자의 강연을 들어봤습니다~!!
Node.js 개발자되기 - 박승규
프로세스 기반 퍼미션 모델
퍼미션 → 리소스 접근 제한 (리소스: 파일, 프로세스, 스레드, 애드온)
파일 권한을 제어할 수 있다.
--exprimental-permission 옵션사용
- 파일 권한 제어 --allow-fs-read/write
- 서브프로세스 생성 제어 --allow-child-process
- 워커스레드 접근 제어 --allow-worker
보통 node test.js 만 입력하면 바로 실행 가능한데 편리하지만 문제점이 있다.
=> 권한 제어 기능이 필요한 이유?!
- 악성 npm으로 훔칠 수 있다.
- 실제 창시자가 후회한점이 보안이었으며, 이후 deno를 만들때는 보안을 신경썼다고 한다.
- deno, bun 등 경쟁자들이 생기면서 보안을 신경쓰는 듯 하다고한다.
커스텀 ESM 로더 훅
ESM 로더 훅
- "로더"는 모듈을 불러오는 프로그램 + "훅"은 기존에 있는 코드 전 후로 추가할 수 있는 사용자 정의 함수
- = ESM 모듈 임포트시 추가 가능한 사용자 정의 함수
- 전용 스레드에서 실행되어 로더와 앱 코드를 분리합니다.
- import
- url에서 임포트하기
- 커스텀 확장자 사용하기
- nodejs 20 이전 : 메인스레드에서 로더 훅 담당
- nodejs 20 : 별도의 스레드에서 처리하도록 변경 → import 성능 향상
but 메인스레드와 별도의 스레드의 연결고리가 필요하므로 → register()를 사용하기
V8 11.3 버전 업그레이드
- isWellFormed() : 올바른 유니코드 문자열인지 확인하는 함수
- toWellFormed() : 잘못된 유니코드 문자열을 대체가능한 문자열로 변경
- array.with()
let arr = [1,2,3,4]
let newArr = arr.with(0,99)
console.log(newArr) // [99,2,3,4]
console.log(arr) // [1,2,3,4]
- 정규식에 v 추가 : 합성 이모지도 체크가능
- 꼬리물기 최적화
- 재귀함수 깊게 사용시에도 성능을 향상 시킴
- readdier(dir, { recursive:true }) : 디렉터리를 재귀적으로 탐색 가능
안정적인 테스트 러너
테스트 러너 모듈이 안정화되어 프로덕션 환경에서 사용할 수 있습니다.
- nodejs 20 이전 : jest, mocha 같은 서드파티 라이브러리를 사용해야함
- nodejs 20 : test_runner 모듈이 포함됐다
node —test a.test.js 로 테스트 실행 가능
테스트 커버리도 제공해주지만 아직은 결과 부분을 내려받거나 할 수 없는 등 아쉬운 기능이라고한다.
Nodejs 성능 향상
nodejs 16,18, 20에 대한 성능 테스트 진행했다.
→ URL, fetch(), EventTarget을 비롯해 많이 개선되었다.
→ 버전이 올라갈수록 대부분의 성능이 좋아졌다.
단, 안좋아 진거는 crypto verify 가 있다. 이유는 관련 라이브러리 이슈인 것 같다고 한다.
.env 지원 내장
dotenv 설치안하고 —env-file로 가능하다.
결론
Nodejs20 이전이라면 업그레이드를 추천한다.
당연히 없어지는 기능들에 대해서는 체크해야한다.
가급적 LTS 버전으로 업그레이드해주는게 좋다.
QnA
Q. nodejs와 java를 비교하면 어떤가?
A. 랭킹, AI, 대용량처리 같은 CPU가 일을 많이하는 작업들은 코어만큼밖에 처리를 못하기때문에 성능이 안좋다. 그런 느린 작업들이라면 사용하면 안된다. 그외의 작업들은 java와 많이 차이나지 않다!
Q. NestJs를 현업에서 많이 사용하고 있나?
A. 현업에서 점점 사용하는 추세이다. 협업에 좋다. 단 자료가 많이 없다는게 단점이라서 그 부분만 해결되면 사용이 더 늘 것 같다. Express는 유지보수가 어렵고 그냥 막 만들때 좋음.
'개발공부 > NodeJS' 카테고리의 다른 글
[공유/번역] Concise 간결한 Typescript Book (0) | 2023.08.05 |
---|---|
[공유] 이벤트 루프를 차단하지 않기 위한 실용적인 가이드 (0) | 2023.06.24 |
Nodejs 싱글스레드 (0) | 2023.06.07 |
마이크로서비스와 Nodejs (0) | 2023.06.06 |
Nodejs 환경에서 Artillery로 부하테스트 하기 (0) | 2023.05.29 |
댓글