Node.js 인터뷰 질문 11
질문: Node.js의 핵심 모듈에 대해 설명해주세요.
답변:
Node.js 핵심 모듈은 Node.js가 기본적으로 제공하는 내장 라이브러리로, 외부 패키지 설치 없이 바로 사용할 수 있습니다. 이런 모듈들은 Node.js의 기본 기능을 구성하며, 파일 시스템 접근, 네트워킹, 버퍼 조작 등의 다양한 기능을 제공합니다.
주요 핵심 모듈
http/https: 웹 서버를 생성하고 HTTP 요청을 처리하는 모듈
const http = require("http"); const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader("Content-Type", "text/plain"); res.end("Hello World\n"); }); server.listen(3000);
fs (File System): 파일 시스템과 상호 작용하는 모듈
const fs = require("fs"); // 동기식 파일 읽기 const data = fs.readFileSync("file.txt", "utf8"); // 비동기식 파일 읽기 fs.readFile("file.txt", "utf8", (err, data) => { if (err) throw err; console.log(data); });
path: 파일 경로를 다루는 모듈
const path = require("path"); const filePath = path.join(__dirname, "files", "example.txt"); console.log(path.basename(filePath)); // example.txt console.log(path.extname(filePath)); // .txt
os: 운영 체제 관련 정보를 제공하는 모듈
const os = require("os"); console.log(os.platform()); // darwin, win32 등 console.log(os.cpus()); // CPU 정보 console.log(os.totalmem()); // 총 메모리 console.log(os.freemem()); // 사용 가능한 메모리
events: 이벤트 기반 비동기 프로그래밍을 위한 모듈
const EventEmitter = require("events"); class MyEmitter extends EventEmitter {} const myEmitter = new MyEmitter(); myEmitter.on("event", () => { console.log("이벤트 발생!"); }); myEmitter.emit("event");
url: URL 파싱 및 처리를 위한 모듈
const url = require("url"); const myUrl = new URL("https://example.com:8080/p/a/t/h?query=string#hash"); console.log(myUrl.hostname); // example.com console.log(myUrl.pathname); // /p/a/t/h console.log(myUrl.searchParams.get("query")); // string
util: 유틸리티 함수를 제공하는 모듈
const util = require("util"); const fs = require("fs"); // fs.readFile을 프로미스 기반 함수로 변환 const readFile = util.promisify(fs.readFile); readFile("file.txt", "utf8") .then((data) => console.log(data)) .catch((err) => console.error(err));
crypto: 암호화 기능을 제공하는 모듈
const crypto = require("crypto"); const hash = crypto.createHash("sha256"); hash.update("안녕하세요"); console.log(hash.digest("hex"));
stream: 데이터 스트리밍을 위한 모듈
const fs = require("fs"); const readStream = fs.createReadStream("input.txt"); const writeStream = fs.createWriteStream("output.txt"); readStream.pipe(writeStream);
buffer: 바이너리 데이터를 직접 다루는 모듈
const buf = Buffer.from("Hello World", "utf8"); console.log(buf.toString("hex")); console.log(buf.toString("base64"));
querystring: URL 쿼리 문자열을 파싱하는 모듈
const querystring = require("querystring"); const query = querystring.parse("foo=bar&baz=qux"); console.log(query); // { foo: 'bar', baz: 'qux' }
child_process: 하위 프로세스 생성을 위한 모듈
const { exec } = require("child_process"); exec("ls -la", (error, stdout, stderr) => { if (error) { console.error(`실행 오류: ${error}`); return; } console.log(`stdout: ${stdout}`); });
핵심 모듈의 중요성
- 표준화: 모든 Node.js 설치에서 일관된 API 제공
- 최적화: 고성능을 위해 최적화된 구현체 제공
- 크로스 플랫폼: 다양한 운영 체제에서 일관된 동작 보장
- 생태계 기반: npm의 많은 패키지들이 이러한 핵심 모듈을 기반으로 구축됨
Node.js의 핵심 모듈을 잘 이해하면 효율적인 애플리케이션 개발이 가능하며, 불필요한 외부 의존성을 줄일 수 있습니다.