JAVASCRIPT
JavaScript 런타임과 언어 기능 학습 기록.
setImmediate() — 이벤트 루프 타이머`setImmediate()`
- setTimeout(fn, delay) - 최소 delay(ms)가 지난 뒤, fn을 실행하도록 Timers 큐에 등록 - setInterval(fn, interval) - interval(ms)마다 반복 실행되도록 Timers 큐에 등록 - setImmediate(fn) - 현재 이벤트 루프 사이클이 끝난 직후, Check 큐에서 실행 핵심...
AbortController
> JS에서 비동기 작업을 취소할 수 있도록 만든 공식 표준 API > -> fetch, stream, timer, custom async 함수 모두 취소 가능 핵심 구성 요소는 두 가지 - AbortController : 취소 명령을 만드는 컨트롤러 - AbortSignal : 취소 여부 및 이벤트를 전달하는 신호 객체 ts const controller...
Async Iterator와 제너레이터
비동기로 하나씩 값이 흘러오는 컬렉션을 순서대로 기다리며 소비하는 문법. Node.js 스트림, fetch의 ReadableStream, AI 모델 토큰 스트리밍, 페이지네이션이 있는 외부 API 등 "한꺼번에 메모리에 올리면 부담스러운 데이터"를 다룰 때 쓴다. ts for await (const transaction of streamTransaction...
CommonJS와 ECMAScript Modules
- Node.js에는 CommonJS, ECMAScript Modules(이하 CJS, ESM)라는 두가지 모듈 시스템이 있음 js // add.js module.exports.add = (x, y) => x + y; // main.js const { add } = require('./add'); add(1, 2); js // add.js export fu...
Http Client
- Node.js 진영에서의 Http Client들 - 1. Node.js native fetch - Node 18 이상은 브라우저 fetch가 기본 탑재됨 - 가장 중요한 포인트 - Node 18부터 fetch가 기본 내장 - Node 20부터 안정성 + 성능 올라가면서 완전 실용적 - Node 팀은 fetch 사용을 권장하는 방향으로 감 - 장점 - 브...
Node 백엔드 운영 패턴 — Streams 백프레셔, pipe/pipeline, 멱등성 vs 분산 락
기존 javascript/ 문서들이 다루지 않는 Node 백엔드 실전 패턴 두 가지를 묶어 정리한다. - HTTP 클라이언트 / fetch / Ky / undici 비교 → http-client.md - AbortController / fetch 취소 / timeout 구현 → abort-controller.md - V8·이벤트 루프·메모리·CPU 운영 가...
Node.js
- V8은 Google이 만든 고성능 Javascript 엔진으로, JS 코드를 파싱, 컴파일, 최적화, 실행까지 모두 담당하는 VM (가상 머신) - Node.js는 이 엔진을 그대로 가져와 서버 사이드 JS 실행 환경으로 만든 것 - 브라우저에서는 Chrome - 서버에서는 Node, Deno, Bun 등 많은 런타임이 V8을 중심으로 움직인다....
npm vs pnpm — 어떤 기준으로 선택했나
pnpm이 성능이 좋다는 건 누구나 안다. 그런데 단순히 "더 빨라서 좋다"가 선택의 충분한 이유가 되진 않는다. 이미 잘 굴러가는 npm 프로젝트를 굳이 옮길 필요는 없으니까. 내가 fos-blog(이 블로그를 돌리는 Next.js 프로젝트)를 시작할 때 pnpm을 고른 이유와, 그 후 운영하면서 실제로 도움이 됐던 부분을 정리해둔다. lockfile이...
제너레이터(Generator)
- 제너레이터는 중단 가능한 함수(pausable function)이다 - 일반 함수는 다음과 같이 동작 - 호출하면 -> 시작 - return 만나면 -> 끝 - 중간에 멈추지 못함 - 하지만 제너레이터는 - 실행중 yield에서 멈춘 뒤 - 나중에 다시 그 지점부터 이어서 실행(resume) 가능 - > "실행을 원하는 타이밍에 조금씩 나눠서 실행할 수...