Quick Reference

Node.js

서버 스크립트나 CLI를 만들 때 꼭 다시 보게 되는 Node.js API와 비동기 템플릿을 카드로 정리합니다.

10 cards

제목, 요약, 태그, 섹션 제목 기준으로 찾습니다.

섹션

기본 문법

1 cards

기본 문법

모듈과 exports

javascript
// CommonJS
const utils = require("./utils");

module.exports = {
  format,
};

// ES Module
import { format } from "./utils.js";

export { format };

CommonJS와 ES 모듈 방식으로 모듈을 정의하고 `module.exports`/`export`를 관리하는 패턴을 정리합니다.

비동기

3 cards

비동기

비동기 파일 I/O

javascript
import { readFile, writeFile } from "node:fs/promises";

async function loadConfig() {
  const raw = await readFile(new URL("./config.json", import.meta.url), "utf-8");
  return JSON.parse(raw);
}

await writeFile("./log.txt", "시작 " + new Date().toISOString());

`fs/promises`와 `top-level await`를 이용한 비동기 파일 읽기/쓰기 패턴을 정리합니다.

비동기

이벤트 루프 기본

javascript
console.log("A");

setTimeout(() => {
  console.log("timeout");
}, 0);

Promise.resolve().then(() => {
  console.log("promise");
});

console.log("B");

Node.js가 한 스레드처럼 보여도 많은 비동기 작업을 처리할 수 있는 이유인 이벤트 루프 기본 개념을 정리합니다.

비동기

타이머와 주기 작업

javascript
const intervalId = setInterval(() => {
  console.log("polling...");
}, 1000);

setTimeout(() => {
  clearInterval(intervalId);
  console.log("stopped");
}, 5000);

`setTimeout`, `setInterval`, `clearInterval`을 이용해 지연 실행과 주기 작업을 구성하는 기본 패턴입니다.

네트워크

2 cards

네트워크

HTTP 서버 시작

javascript
import { createServer } from "node:http";

const server = createServer((req, res) => {
  if (req.method === "GET" && req.url === "/status") {
    res.writeHead(200, { "Content-Type": "application/json" });
    res.end(JSON.stringify({ ok: true }));
    return;
  }
  res.writeHead(404);
  res.end("Not Found");
});

server.listen(3000, () => {
  console.log("Listening on http://localhost:3000");
});

`createServer`로 기본 요청/응답 흐름을 만들고, 라우팅 없이 바로 응답하는 간단한 HTTP 서버 패턴을 보여줍니다.

네트워크

fetch로 JSON 요청

javascript
const response = await fetch("https://api.example.com/users/1");

if (!response.ok) {
  throw new Error(`HTTP ${response.status}`);
}

const user = await response.json();
console.log(user.name);

Node.js 18+의 내장 `fetch`로 외부 API를 호출하고 JSON 응답을 읽는 기본 패턴입니다.

실행 환경

1 cards

실행 환경

process.env와 argv

javascript
const mode = process.env.NODE_ENV || "development";
const targetFile = process.argv[2] || "input.txt";

console.log("mode:", mode);
console.log("file:", targetFile);

환경 변수와 명령행 인자를 읽어 실행 환경을 분기하는 가장 기본적인 Node.js 패턴입니다.

파일 시스템

1 cards

파일 시스템

path와 URL 다루기

javascript
import path from "node:path";
import { fileURLToPath } from "node:url";

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const outputPath = path.join(__dirname, "dist", "result.json");

`path` 모듈과 `import.meta.url` 기반 URL 변환을 함께 정리해 파일 경로 실수를 줄이는 카드입니다.

입출력

1 cards

입출력

스트림 기본

javascript
import { createReadStream, createWriteStream } from "node:fs";

const source = createReadStream("./big.log");
const target = createWriteStream("./copy.log");

source.pipe(target);

큰 파일이나 네트워크 데이터를 한 번에 다 읽지 않고 흘려 보내는 Node.js 스트림 기본 패턴을 정리합니다.

프로젝트 설정

1 cards

프로젝트 설정

package.json과 scripts

json
{
  "name": "sample-node-app",
  "type": "module",
  "scripts": {
    "dev": "node --watch src/index.js",
    "start": "node src/index.js"
  }
}

`package.json`의 scripts, type, dependencies 필드를 중심으로 Node.js 프로젝트 기본 구성을 정리합니다.