본문 바로가기

언어/Node.js

[ Node.js ] fs.rm(), fs.rmdir() 디렉토리 삭제하기

반응형

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() 함수를 사용하면 재귀적으로 디렉토리를 쉽게 삭제할 수 있습니다.

  1. fs-extra 설치:
npm install fs-extra
  1. 사용 예시:
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는 추가적인 기능을 제공하며, 대규모 파일 시스템 작업에 유용할 수 있습니다.
  • 비동기 방식은 이벤트 루프가 차단되지 않으므로 성능에 유리합니다.
반응형