Node.js는 자신의 모듈 시스템, 비동기 모델, 스트리밍 I/O에 잘 맞는 소수의 디자인 패턴에 의존합니다. 모든 백엔드 개발자가 알아야 할 가장 흔한 것들:
module.exports / export를 통해 공개 API를 노출하고 내부는 비공개로 유지합니다. Node에서 코드 구성의 기반입니다.// db.js — 모든 `require("./db")`는 이 동일한 풀을 받습니다 (module cache를 통한 싱글턴).
const pool = createPool(process.env.DATABASE_URL);
module.exports = pool;
function createLogger(kind) {
return kind === "json" ? new JsonLogger() : new TextLogger();
}
EventEmitter, 스트림, 그리고 대부분의 코어 모듈이 이를 사용합니다.const { EventEmitter } = require("node:events");
const bus = new EventEmitter();
bus.on("order:paid", (o) => sendReceipt(o));
bus.emit("order:paid", order);
(ctx, next)를 받는 함수들의 파이프라인으로, Express/Koa가 대중화했습니다. 횡단 관심사(인증, 로깅, 검증)에 훌륭합니다.app.use((req, res, next) => { req.startedAt = Date.now(); next(); });
const { pipeline } = require("node:stream/promises");
await pipeline(fs.createReadStream("in"), gzip(), fs.createWriteStream("out.gz"));
| 필요 | 패턴 |
|---|---|
| 하나의 공유 리소스 | Singleton (module cache) |
객체를 만들고 new를 숨기기 | Factory |
| 비동기 이벤트에 반응하기 | Observer / EventEmitter |
| 횡단 request 로직 | Middleware |
| 큰 데이터를 안전하게 처리하기 | Streams / pipeline |
| 테스트 가능하고 결합도 낮은 의존성 | Dependency Injection |
패턴은 공유된 어휘입니다: "설정은 모듈 캐시된 싱글턴이다" 또는 "인증은 미들웨어다"라고 말하면 몇 마디로 설계를 전달합니다. Node 자체의 코어(EventEmitter, 스트림, 모듈 시스템)가 이것들로 만들어져 있으므로, 이를 알아보면 프레임워크를 읽고 자신의 서비스를 구조화하는 데 도움이 됩니다. 면접관은 이 질문으로 여러분이 콜백을 임시방편으로 엮기만 하는 것이 아니라 적합한 패턴에 손을 뻗는지 — 그리고 싱글턴이 전역 상태를 테스트하기 더 어렵게 만드는 것과 같은 트레이드오프를 아는지 확인합니다.
주니어부터 시니어까지 상세한 답변이 포함된 IT 면접 질문 라이브러리.
후원하기