Node.js로 파일을 다루는 애플리케이션을 개발하다 보면, 특정 조건에서 파일을 삭제해야 하는 경우가 많습니다. 예를 들어 업로드된 임시 파일을 삭제하거나, 캐시 파일을 주기적으로 정리하거나, 유저가 직접 삭제 요청을 할 수 있는 기능이 필요할 때입니다.
이럴 때 사용할 수 있는 함수가 바로
기본 사용법
const fs = require('fs').promises;
async function deleteFile() {
try {
await fs.unlink('./temp/example.txt');
console.log('파일 삭제 성공');
} catch (err) {
console.error('파일 삭제 중 에러 발생:', err.message);
}
}
deleteFile();위 예제는
파일 존재 여부 먼저 확인해야 할까?
const fs = require('fs').promises;
async function safeDelete(path) {
try {
await fs.unlink(path);
console.log(`${path} 파일 삭제 완료`);
} catch (err) {
if (err.code === 'ENOENT') {
console.warn('삭제할 파일이 존재하지 않습니다.');
} else {
console.error('예상치 못한 삭제 에러:', err.message);
}
}
}실전 활용 예시
1. 업로드 후 일정 시간 지난 임시 파일 삭제
setTimeout(() => {
fs.unlink('./uploads/temp.png')
.then(() => console.log('임시 파일 삭제'))
.catch(err => console.error('삭제 실패:', err));
}, 60000); // 60초 후 삭제2. 파일 삭제 요청을 처리하는 API 내부에서 사용
async function handleDeleteRequest(filename) {
const targetPath = `./user-files/${filename}`;
try {
await fs.unlink(targetPath);
return { success: true };
} catch (err) {
return { success: false, error: err.message };
}
}주의사항
- 디렉토리를 삭제하려면
fs.promises.rmdir 또는fs.promises.rm 을 사용해야 합니다. - 삭제할 파일에 대해 읽기 권한뿐 아니라 쓰기 권한도 필요합니다.
- 파일 경로가 잘못되었거나, 상대 경로 기준이 애매한 경우에도 오류가 발생할 수 있으므로
path.resolve 등을 사용하는 것도 좋은 습관입니다.