IT Developer/Node.js

Node.js 기초 <9. 파일 시스템(fs 모듈)과 스트림(Stream) 활용>

TEMA_ 2025. 3. 11. 16:02
반응형

노드 Node.js

9. 파일 시스템(fs 모듈)과 스트림(Stream) 활용 

 

안녕하세요! 태마입니다.

Node.js 기초 강좌입니다.

 

강좌의 경우 

1. 주제 간단 정리

2. 상세 주제 정리

으로 이루어져 있습니다.

 

노드 Node.js

포스팅 시작하겠습니다 :)

 


 

1. 주제 간단 정리

 

1. 파일 시스템(fs 모듈)이란?

Node.js의 fs(File System) 모듈은 파일을 읽고, 쓰고, 삭제하는 기능을 제공합니다.
파일 시스템을 직접 다룰 수 있기 때문에, 로그 저장, 데이터 파일 관리, 설정 파일 조작 등에 유용합니다.

📌 fs 모듈을 사용하면?
파일 생성, 읽기, 수정, 삭제 가능
비동기(Asynchronous) 또는 동기(Synchronous) 방식 지원
JSON, 텍스트, 로그 파일을 효율적으로 관리 가능


 

2. fs 모듈을 활용한 파일 조작

1) 파일 생성 및 쓰기 (writeFile, appendFile)

const fs = require("fs");

// 파일 생성 및 쓰기
fs.writeFile("example.txt", "Hello, Node.js!", (err) => {
  if (err) throw err;
  console.log("파일이 생성되었습니다!");
});

// 기존 파일에 내용 추가
fs.appendFile("example.txt", "\n추가된 내용!", (err) => {
  if (err) throw err;
  console.log("내용이 추가되었습니다!");
});

📌 writeFile은 파일을 생성하고 내용을 씀, appendFile은 기존 파일에 내용을 추가함!

2) 파일 읽기 (readFile)

fs.readFile("example.txt", "utf-8", (err, data) => {
  if (err) throw err;
  console.log("파일 내용:", data);
});

📌 파일 내용을 읽고 콘솔에 출력!

3) 파일 삭제 (unlink)

fs.unlink("example.txt", (err) => {
  if (err) throw err;
  console.log("파일이 삭제되었습니다!");
});

📌 파일을 삭제할 때 unlink 사용!

✅ 여기까지 파일 시스템(fs 모듈)의 기본 개념과 활용법을 배웠습니다!
👉 "그렇다면, 대용량 파일을 효율적으로 처리하려면 어떻게 할까?"
2부에서 스트림(Stream) 개념과 파일 처리 최적화 방법을 배워봅시다!

반응형

 

2. 상세 주제 정리

 

1. 스트림(Stream)이란?

스트림(Stream)은 대용량 데이터를 효율적으로 처리하는 방식입니다.
일반적으로 fs.readFile() 같은 메서드는 파일을 한 번에 메모리에 로드하지만,
스트림을 사용하면 조각(chunk) 단위로 데이터를 처리할 수 있습니다.

📌 스트림을 사용하면?
대용량 파일을 메모리 부족 없이 처리 가능
데이터를 조각(chunk) 단위로 읽고 쓰므로 빠른 속도 제공
네트워크 요청(HTTP, WebSocket)에도 활용 가능


 

2. 스트림의 4가지 유형

Node.js 스트림의 주요 유형

스트림 유형설명

Readable Stream 데이터를 읽는 스트림 (예: 파일 읽기)
Writable Stream 데이터를 쓰는 스트림 (예: 파일 쓰기)
Duplex Stream 읽기/쓰기가 모두 가능한 스트림 (예: TCP 소켓)
Transform Stream 데이터 변환이 가능한 스트림 (예: 압축, 암호화)

 

3. 스트림을 활용한 파일 처리

1) 파일 읽기 (Readable Stream – createReadStream)

const fs = require("fs");

const readStream = fs.createReadStream("largeFile.txt", "utf-8");

readStream.on("data", (chunk) => {
  console.log("데이터 읽기:", chunk);
});

readStream.on("end", () => {
  console.log("파일 읽기 완료!");
});

📌 파일을 한 번에 불러오는 것이 아니라, 조각(chunk) 단위로 읽음!

2) 파일 쓰기 (Writable Stream – createWriteStream)

const writeStream = fs.createWriteStream("output.txt");

writeStream.write("첫 번째 줄\n");
writeStream.write("두 번째 줄\n");

writeStream.end(() => {
  console.log("파일 쓰기 완료!");
});

📌 데이터를 조각(chunk) 단위로 파일에 씀!

3) 파일 복사 (파이프(pipe) 활용)

const readStream = fs.createReadStream("source.txt");
const writeStream = fs.createWriteStream("destination.txt");

readStream.pipe(writeStream);

writeStream.on("finish", () => {
  console.log("파일 복사 완료!");
});

📌 pipe()를 사용하면 파일을 읽고 바로 쓸 수 있어 성능이 향상됨!


 

4. 스트림을 활용한 데이터 변환 (Transform Stream)

Gzip을 이용한 파일 압축 (Transform Stream 활용)

const zlib = require("zlib");
const gzip = zlib.createGzip();

const readStream = fs.createReadStream("largeFile.txt");
const writeStream = fs.createWriteStream("largeFile.txt.gz");

readStream.pipe(gzip).pipe(writeStream);

writeStream.on("finish", () => {
  console.log("파일 압축 완료!");
});

📌 파일을 읽으면서 압축하여 새로운 파일로 저장!

Gzip 파일 압축 해제

const gunzip = zlib.createGunzip();

fs.createReadStream("largeFile.txt.gz")
  .pipe(gunzip)
  .pipe(fs.createWriteStream("largeFile_unzipped.txt"))
  .on("finish", () => console.log("파일 압축 해제 완료!"));

📌 압축된 파일을 해제하여 원래 파일로 복원 가능!


✅ 여기까지 파일 시스템(fs 모듈)과 스트림(Stream)을 활용한 파일 처리 방법을 배웠습니다!
👉 "그렇다면, Node.js에서 실시간 데이터를 처리하려면 어떻게 할까?"
다음 회차에서 웹소켓(WebSocket)과 실시간 데이터 처리 방법을 배워봅시다!

반응형