노드 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)과 실시간 데이터 처리 방법을 배워봅시다!
'IT Developer > Node.js' 카테고리의 다른 글
Node.js 기초 <13. 파일 업로드와 이미지 처리 (multer 활용)> (0) | 2025.03.15 |
---|---|
Node.js 기초 <12. Express의 미들웨어와 요청 처리 흐름> (0) | 2025.03.14 |
Node.js 기초 <11. 인증과 보안: JWT, OAuth, 세션 관리> (0) | 2025.03.13 |
Node.js 기초 <10. 웹소켓(WebSocket)과 실시간 데이터 처리> (1) | 2025.03.12 |
Node.js 기초 <8. Node.js와 데이터베이스 (MySQL, PostgreSQL, MongoDB)> (0) | 2025.03.10 |
Node.js 기초 <7. RESTful API 개발: CRUD 구현 및 HTTP 요청 처리> (0) | 2025.03.09 |
Node.js 기초 <6. Express.js로 서버 만들기: 기본 개념과 라우팅> (1) | 2025.03.08 |
Node.js 기초 <5. npm과 패키지 관리: 의존성 관리 및 버전 관리> (0) | 2025.03.07 |