가장 큰 변화는 ESM이 아니라 Node에 fetch와 AbortController가 내장된 점임, axios나 node-fetch를 제거하고 Lambda 번들의 크기도 줄었고 콜드 스타트 지연도 약 100ms 단축됨, 습관적으로 npm i axios를 쓰는 사람이라면 2025 Node 릴리스가 그만둘 때임
API 호출과 유효성 검증을 모두 아우르는 ts-rest를 전체 스택에서 선호함, zod/json schema 기반 라이브러리 중에 가장 가벼우면서도 robust한 타입 안전성을 제공함, HTTP 클라이언트도 원하는 것을 꽂아쓸 수 있고(bun, node엔진에서는 fastify 선택함), 오버헤드가 있지만 타입 안전성을 컴파일 단계로 옮길 수 있다는 점에서 충분히 가치 있는 선택임, 혹시 더 좋은 대안이나 생각 있으신지 궁금함, 찾을 수 있는 한 다 찾아봤는데 ts-rest만이 경량성과 타입 안전성을 모두 챙길 수 있었음
fetch 문법과 await response.json 등 추가적인 예외 처리 작업이 그렇게 마음에 들진 않았음, axios 쓸 때가 훨씬 직관적임, 예시 코드에서도 axios는 단순하게 response.data를 처리할 수 있고, fetch는 직접 status 체크한 뒤 JSON을 파싱해야 해서 더 번거로움
라이브러리 저자로서는 오히려 ESM 도입이 훨씬 힘들고 아팠지만 그만큼 가치있는 업그레이드였음, fetch 자체는 훌륭하지만 ESM 덕에 진짜 많은 것을 얻을 수 있었음
node fetch가 axios보다 훨씬 쉽고 단순해서 더 좋음, 아직 어떤 분들은 axios를 계속 쓰는지 몰랐음
# 파일 시스템 접근 제한 예시
node --experimental-permission \
--allow-fs-read=./data --allow-fs-write=./logs app.js
# 네트워크 제한 예시
node --experimental-permission \
--allow-net=api.example.com app.js
Node의 내장 테스트 시스템은 퀄리티가 떨어진다고 생각함, 실제로 몇 주 써보면 왜 그런지 알게 되고, 이슈를 제기해도 Node 팀은 별 관심이 없음
Matteo Collina에 따르면 node fetch는 내부적으로 undici의 fetch를 사용함, WHATWG 웹 스트림을 만들어야 해서 본질적으로 undici의 request 방식보다 느림, 언급한 유튜브, undici 작동 원리 블로그
궁금한 사람을 위해 벤치마크는 이곳에서 볼 수 있음, 최근 M3 Max 맥북 프로에서 로컬과 네트워크 환경에서 테스트했는데 undici가 로컬에선 최고였지만 네트워크에선 Axios가 더 빠른 결과가 나옴, 이유는 정확히 모르겠지만 지난 1년 반 동안 undici 사용 경험은 뛰어났음, 프로덕션에서도 충분히 안정적으로 쓸 수 있지만, 뛰어난 성능을 최대로 뽑으려면 상황에 맞는 고민이 꼭 필요함
Node의 네이티브 typescript 트랜스파일러 덕분에 TS를 쓰는 사람들은 복잡도가 많이 줄어듦
사실 타입만 제거하고 트랜스파일은 아님, TS enum 같은 건 제대로 동작하지 않음
아직 실사용하기엔 부족함, Enum은 신경 안 쓰지만 확장자 없이 로컬 파일 import도 안되고, 생성자에서 class property 정의도 안 됨
--experimental-strip-types 플래그도 이제 필요 없음
새로운 기능을 이런 식으로 우연히 알게 되는 경우가 많음, 브라우저 쓸 때처럼 “그건 최신이니까”라는 막연한 느낌이 있음, 예전 C#만 할 때는 새 언어 기능 소개를 읽고 정말 신나했는데 요즘은 다양한 언어를 병행하다 보니 한 언어만 따라가기도 쉽지 않음, 거의 블로그나 주변 영향을 통한 랜덤 학습임
Node(V8) 소식에 관심 많아서 2~3개월에 한 번씩 릴리즈 노트 읽고 이런 기능들을 챙김, 때로는 ECMA proposals도 읽어봄, 파이프라인 오퍼레이터가 꼭 들어갔으면 하는 바램임
한동안 Node 생태계와 거리를 뒀다가 다시 보니 정말 흥미로운 신기능이 많아졌음, Deno와 Bun이 시장을 흔들면서 Node 개발진이 한층 분발한 결과라고 봄
점점 Node가 Bun.js, Deno 등과의 경쟁에서 만만치 않은 존재로 변화 중임, 그런 상호 경쟁이 JS 런타임 발전에 긍정적임
변화는 느리지만 확실하고 반가움, 그래도 Bun의 $ shell function이 아직 그리움, JS를 스크립트처럼 쓰는 게 정말 편리해서 서버에 두 런타임을 함께 올리고 싶진 않음
브라우저처럼 Node의 신기능도 두 가지로 나눌 수 있다고 봄
전혀 새로운 기술
이미 있는 기능 위에 얹어진 "멋내기" 단계의 레이어
사람들이 어느 쪽에 더 비중을 두는지 보는 것도 흥미로움
Hacker News 의견
언급한 유튜브,
undici 작동 원리 블로그
$shell function이 아직 그리움, JS를 스크립트처럼 쓰는 게 정말 편리해서 서버에 두 런타임을 함께 올리고 싶진 않음사람들이 어느 쪽에 더 비중을 두는지 보는 것도 흥미로움