모듈과 exports
// CommonJS
const utils = require("./utils");
module.exports = {
format,
};
// ES Module
import { format } from "./utils.js";
export { format };CommonJS와 ES 모듈 방식으로 모듈을 정의하고 `module.exports`/`export`를 관리하는 패턴을 정리합니다.
Quick Reference
서버 스크립트나 CLI를 만들 때 꼭 다시 보게 되는 Node.js API와 비동기 템플릿을 카드로 정리합니다.
제목, 요약, 태그, 섹션 제목 기준으로 찾습니다.
섹션
1 cards
// CommonJS
const utils = require("./utils");
module.exports = {
format,
};
// ES Module
import { format } from "./utils.js";
export { format };CommonJS와 ES 모듈 방식으로 모듈을 정의하고 `module.exports`/`export`를 관리하는 패턴을 정리합니다.
3 cards
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`를 이용한 비동기 파일 읽기/쓰기 패턴을 정리합니다.
console.log("A");
setTimeout(() => {
console.log("timeout");
}, 0);
Promise.resolve().then(() => {
console.log("promise");
});
console.log("B");Node.js가 한 스레드처럼 보여도 많은 비동기 작업을 처리할 수 있는 이유인 이벤트 루프 기본 개념을 정리합니다.
const intervalId = setInterval(() => {
console.log("polling...");
}, 1000);
setTimeout(() => {
clearInterval(intervalId);
console.log("stopped");
}, 5000);`setTimeout`, `setInterval`, `clearInterval`을 이용해 지연 실행과 주기 작업을 구성하는 기본 패턴입니다.
2 cards
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 서버 패턴을 보여줍니다.
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
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
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
import { createReadStream, createWriteStream } from "node:fs";
const source = createReadStream("./big.log");
const target = createWriteStream("./copy.log");
source.pipe(target);큰 파일이나 네트워크 데이터를 한 번에 다 읽지 않고 흘려 보내는 Node.js 스트림 기본 패턴을 정리합니다.
1 cards
{
"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 프로젝트 기본 구성을 정리합니다.