fs.writeFile()메소드는 Node.js의 fs(File System) 모듈에 있는 메소드입니다.
데이터를 파일에 비동기적으로 작성할 때 사용합니다.
만약 해당 파일이 파일 시스템에 없다면 새로 생성하고, 이미 존재하면 덮어씌웁니다.
Table of Contents
writeFile 기본 문법
fs.writeFile(file, data[, options], callback);
매개변수는 다음과 같습니다:
- file: 파일 경로 (문자열, Buffer, URL)
- data: 파일에 쓸 데이터 (문자열, Buffer)
- options: 옵셔널 매개변수로 인코딩, 권한, 플래그 등 설정
- callback: 파일에 쓰기 작업 완료 후 호출될 함수
writeFile 예제
const fs = require('fs');
fs.writeFile('example.txt', 'Hello, Node.js!', (err) => {
if (err) {
return console.error('파일 저장 중 오류 발생:', err);
}
console.log('파일이 성공적으로 저장되었습니다.');
});
예제 코드의 설명은 다음과 같습니다:
- 먼저 example.txt 라는 파일이 없으면 새로 만들고, 이미 존재한다면 내용을 덮어씁니다.
- 파일에 쓸 내용으로는 “Hello, Node.js!”를 작성합니다.
- 파일에 쓰기 작업이 완료되면 콜백 함수가 호출되고, 작업 결과를 console.log() 메소드를 통해 출력합니다.
파일에 쓰고자하는 데이터가 객체인 경우 JSON 데이터 저장하기 방법을 사용해야 합니다.
간단히 설명하자면 JSON.stringify() 메소드를 사용해 객체를 문자열로 변환한 후 저장하면 됩니다.
writeFile 옵션 예제
fs.writeFile('example2.txt', '추가 내용입니다.', {
encoding: 'utf8',
flag: 'w',
mode: 0o666
}, (err) => {
if (err) {
throw err;
}
console.log('example2.txt에 데이터를 작성했습니다.');
});
옵션 설명은 다음과 같습니다:
- encoding: 파일에 쓸 데이터의 인코딩을 utf8으로 설정했습니다.
- flag: “w”는 기본 값으로 쓰기를 의미하고 “a”는 파일 뒤쪽에 내용 추가하기 입니다. 만일 기존에 파일이 존재하고 있는데 덮어 쓰지 않게 하려면 “wx”를 사용할 수 있습니다.
- mode: 파일의 권한을 설정합니다.
동기화 버전 fs.writeFileSync()
const fs = require('fs');
try {
fs.writeFileSync('sync_example.txt', '동기적으로 파일을 씁니다.');
console.log('sync_example.txt 작성 완료');
} catch (err) {
console.error(err);
}
fs.writeFile() 메소드는 비동기적으로 파일을 쓰는 반면 fs.writeFileSync() 메소드는 동기적으로 파일을 씁니다.
이는 따로 콜백 함수가 없으므로 try/catch 구문을 사용하여 파일 작성 과정에서 에러가 있는지 확인해야 합니다.
참고 사항
- 파일일 클 경우 비동기 방식을 사용하는 것이 좋습니다.
- 덮어쓰기를 원하지 않을 경우 fs.appendFile() 메소드 또는 fs.open() 메소드를 사용합니다.
- Node.js 10 이상에서는 fs.promises 또는 util.promisify()와 함께 사용해 async/await 스타일로 작성할 수도 있습니다.
async/await 예제
const fs = require('fs/promises');
async function saveFile() {
try {
await fs.writeFile('async_example.txt', 'Async/Await으로 작성');
console.log('async_example.txt 저장 완료');
} catch (err) {
console.error('에러 발생:', err);
}
}
saveFile();
비동기 방식과 메소드 사용 방법은 동일하지만 콜백 함수를 사용하지 않고 코드 순서대로 실행되도록 했습니다.
여기서도 동기 방식과 마찬가지로 try/catch 구문을 사용해 파일 쓰기 작업 도중 발생한 에러를 확인할 수 있습니다.
정리
fs.writeFile() 메소드는 Node.js에서 파일에 데이터를 비동기적으로 작성하는 메소드입니다.
- 파일이 없으면 새로 생성하고, 이미 존재한다면 덮어쓰기합니다.
- 사용법: fs.writeFile(파일명, 데이터, 콜백)
- 옵션으로 인코딩(utf8), 권한, 플래그(a = append) 등을 지정할 수 있습니다.
- 동기 버전으로는 fs.writeFileSync() 메소드가 있습니다.
- async/await 구문을 함께 사용할 수 있습니다.