Node.js에서 디렉토리를 삭제하는 방법은 fs
(File System) 모듈을 사용하여 가능합니다. 디렉토리를 삭제할 때는 동기(synchronous) 방식과 비동기(asynchronous) 방식 모두 사용할 수 있습니다. 또한, Node.js v12.10.0부터는 fs.rmdir()
대신, 재귀적으로 디렉토리를 삭제할 수 있는 fs.rm()
함수를 사용할 수 있습니다.
1. 비동기 방식 (Asynchronous)
비동기 방식은 콜백 함수 또는 Promise
를 사용하여 디렉토리를 삭제할 수 있습니다.
1.1. fs.rm()
(Node.js v14.14.0 이상)
fs.rm()
함수는 비어 있지 않은 디렉토리도 삭제할 수 있는 최신 방법입니다. { recursive: true }
옵션을 사용하여 하위 파일이나 디렉토리까지 모두 삭제할 수 있습니다.
const fs = require('fs');
fs.rm('path/to/directory', { recursive: true, force: true }, (err) => {
if (err) {
console.error('Error deleting directory:', err);
} else {
console.log('Directory deleted successfully');
}
});
recursive: true
: 디렉토리 내부의 파일 및 하위 디렉토리까지 모두 삭제.force: true
: 존재하지 않는 디렉토리를 삭제하려고 할 때 오류를 무시하고 계속 진행.
1.2. fs.rmdir()
(Node.js v12.10.0 이전)
기존에는 fs.rmdir()
를 사용하여 디렉토리를 삭제했지만, 이 함수는 빈 디렉토리만 삭제할 수 있었습니다. 더 이상 추천되지 않으며 fs.rm()
을 사용하는 것이 좋습니다.
const fs = require('fs');
fs.rmdir('path/to/directory', { recursive: true }, (err) => {
if (err) {
console.error('Error deleting directory:', err);
} else {
console.log('Directory deleted successfully');
}
});
2. 동기 방식 (Synchronous)
동기 방식은 fs.rmSync()
또는 fs.rmdirSync()
를 사용하여 디렉토리를 삭제합니다. 동기 방식은 파일 시스템 작업이 완료될 때까지 다음 작업이 대기하게 됩니다.
2.1. fs.rmSync()
(Node.js v14.14.0 이상)
const fs = require('fs');
try {
fs.rmSync('path/to/directory', { recursive: true, force: true });
console.log('Directory deleted successfully');
} catch (err) {
console.error('Error deleting directory:', err);
}
2.2. fs.rmdirSync()
(Node.js v12.10.0 이전)
동기 방식으로 빈 디렉토리를 삭제합니다. recursive
옵션을 사용하여 재귀적으로 삭제할 수도 있지만, fs.rmSync()
를 사용하는 것이 더 권장됩니다.
const fs = require('fs');
try {
fs.rmdirSync('path/to/directory', { recursive: true });
console.log('Directory deleted successfully');
} catch (err) {
console.error('Error deleting directory:', err);
}
3. fs-extra
모듈 사용 (대안)
fs-extra
는 Node.js의 기본 fs
모듈을 확장한 라이브러리로, 간단한 API를 통해 파일 시스템 작업을 쉽게 처리할 수 있습니다. fs.remove()
함수를 사용하면 재귀적으로 디렉토리를 쉽게 삭제할 수 있습니다.
fs-extra
설치:
npm install fs-extra
- 사용 예시:
const fs = require('fs-extra');
fs.remove('path/to/directory', (err) => {
if (err) {
console.error('Error deleting directory:', err);
} else {
console.log('Directory deleted successfully');
}
});
요약
- Node.js v14.14.0 이상에서는
fs.rm()
및fs.rmSync()
를 사용하여 비어 있지 않은 디렉토리도 재귀적으로 삭제할 수 있습니다. fs-extra
는 추가적인 기능을 제공하며, 대규모 파일 시스템 작업에 유용할 수 있습니다.- 비동기 방식은 이벤트 루프가 차단되지 않으므로 성능에 유리합니다.
'언어 > Node.js' 카테고리의 다른 글
[ Node.js ] path.dirname() 파일 경로에서 경로만 가져오기 (0) | 2024.09.05 |
---|---|
[ Node.js ] file 확장자 제외하고 이름만 가져오기 (0) | 2024.09.05 |
[ Node.js ] unzipper로 압축 파일 풀기 (1) | 2024.09.05 |
[ Node.js ] require() vs import 비교 (0) | 2024.09.04 |
[ Node.js ] CommonJS vs ESM(ECMAScript Module) 비교 (0) | 2024.09.04 |