외부 파일안의 내용을 읽거나 쓰는 방법입니다.
크게 일반적인 경우와 큰 파일을 다루는 경우로 나누어 정리합니다.
| 일반적인 경우 | 큰 파일을 다루는 경우 | |
| 읽기 | readFile( ) | createReadStream ( ) |
| 쓰기 | writeFile( ) | createWriteStream ( ) |
readFile( )
주로 작은 파일(.json, .config 파일 등)을 읽을 때 사용합니다.
readFile( )은 fs 모듈을 통해 사용할 수 있습니다.
const fs = require('fs');
const data = fs.readFile('file.txt', 'utf-8');
기본적으로 비동기 함수이기 때문에, 후작업을 위해서는 콜백 함수를 사용하거나 async-await으로 해소해야 합니다.
// 1. 콜백 함수
const fs = require('fs');
const data = fs.readFile('file.txt', 'utf-8', (err, data) => { ... });
// 2. async-await
const fs = require('fs/promises');
const readFile = async () => {
const data = await fs.readFile('file.txt', 'utf-8');
// ...
}
readFileSync( )
readFile( )과 동일하나 동기식으로 처리됩니다.
즉, 파일을 다 읽을 때 까지 코드는 진행을 멈추고 기다립니다.
const fs = require('fs');
const data = fs.readFileSync('example.txt', 'utf-8'); // 일시 정지!
// ...
writeFile( )
주로 작은 파일(.json, .config 파일 등)을 쓸 때 사용합니다.
writeFile( )은 fs 모듈을 통해 사용할 수 있습니다.
const fs = require('fs');
const data = fs.writeFile('file.txt', 'this is writing content');
마찬가지로 비동기 함수이기 때문에, 후작업을 위해서는 콜백 함수를 사용하거나 async-await으로 해소해야 합니다.
// 1. 콜백 함수
const fs = require('fs');
const data = fs.writeFile('file.txt', 'this is writing content', (err, data) => { ... });
// 2. async-await
const fs = require('fs/promises');
const readFile = async () => {
const data = await fs.writeFile('file.txt', 'this is writing content');
// ...
}
writeFileSync( )
writeFile( )과 동일하나 동기식으로 처리됩니다.
즉, 파일을 다 읽을 때 까지 코드는 진행을 멈추고 기다립니다.
const fs = require('fs');
const data = fs.writeFileSync('example.txt', 'this is writing content'); // 일시 정지!
// ...
createReadStream( )
파일을 스트림(stream) 형태로 읽어서, 한 번에 전체 파일을 메모리에 올리지 않습니다.
때문에 주로 수 MB ~ 수 GB 정도의 상당히 큰 크기의 파일을 읽을 때 사용합니다.
createReadStream( )은 fs 모듈을 통해 사용할 수 있습니다.
const fs = require('fs');
const fileStream = fs.createReadStream('example.txt');
createInterface( )
createReadStream( )으로 생성한 스트림을 한 줄씩 읽을 수 있도록 만들어주는 함수입니다.
createInterface( )는 readline 모듈을 통해 사용할 수 있습니다.
const readline = require('readline');
const rl = readline.createInterface({
input: fs.createReadStream('example.txt'),
crlfDelay: Infinity // \r\n 도 한 줄로 처리
});
const print = async () => {
for await(const line of rl) {
console.log(line);
}
}
생성한 인터페이스는 on('이벤트 종류', 이벤트 함수)의 형태로 이벤트를 생성할 수 있습니다.
// line : 한 줄이 읽힐 때 마다
rl.on('line', (line) => {
console.log(`줄 읽음: ${line}`);
});
// close : 한 파일을 모두 읽었을 때
rl.on('close', () => {
console.log('파일 읽기 완료');
});
// error : 에러가 발생할 때
rl.on('error', () => {
console.log('에러 발생함');
});
createWriteStream( )
파일을 스트림(stream) 형태로 기록해서, 한 번에 전체 파일을 메모리에 올리지 않습니다.
때문에 주로 수 MB ~ 수 GB 정도의 상당히 큰 크기의 파일을 쓸 때 사용합니다.
createWriteStream( )은 fs 모듈을 통해 사용할 수 있습니다.
stream으로 파일을 쓸 때는 마지막에 반드시 end( )를 호출해야 합니다.
const fs = require('fs');
const fileStream = fs.createWriteStream('example.txt');
fileStream.write('first line\n');
fileStream.write('second line\n');
fileStream.end(); // end()를 호출해야 파일이 닫힘'Language > JavaScript' 카테고리의 다른 글
| [JS] Syntax | 19. require & import - 외부 파일 불러오기 (0) | 2025.09.19 |
|---|---|
| [JS] Syntax | 18. 배열 메소드 정리 (0) | 2025.04.07 |
| [JS] Syntax | 17. 예외처리 (0) | 2025.04.06 |
| [JS] Syntax | 16. 구조분해(Destructuring) (0) | 2025.04.05 |
| [JS] Syntax | 15. Optional chaining - 속성 존재여부 확인하기 (0) | 2025.04.04 |