nodejs
개발을 하다 보면 특정 폴더 안에 어떤 파일들이 있는지 확인해야 할 때가 생깁니다. 예를 들어, 업로드 폴더 안에 있는 모든 이미지 파일을 읽는다거나, 설정 파일들을 스크립트로 자동 처리하고 싶을 때 말이죠. 이럴 때 Node.js의
그중에서도 오늘은
가장 기본적인 사용은 아주 간단합니다:
const fs = require('fs');
const files = fs.readdirSync('./uploads');
console.log(files);
이 코드는 현재 폴더 내의
이 배열에는 디렉토리 이름이 포함될 수도 있고, 파일 이름이 포함될 수도 있어요. 단순히 이름만 가져오기 때문에, 이 항목이 파일인지 폴더인지 구분하려면 추가 작업이 필요합니다. 이건 아래에서 다룰게요.
예를 들어, 이미지 파일만 가져오고 싶다면 이렇게 쓸 수 있습니다:
const fs = require('fs');
const path = require('path');
const files = fs.readdirSync('./uploads')
.filter(file => file.endsWith('.png') || file.endsWith('.jpg'));
또는 전체 경로로 만들고 싶을 때는:
const fullPaths = fs.readdirSync('./uploads')
.map(file => path.join('./uploads', file));
const dir = './uploads';
const result = fs.readdirSync(dir).filter((item) => {
const fullPath = path.join(dir, item);
return fs.statSync(fullPath).isFile(); // 파일만
});
이와 반대로
try {
const files = fs.readdirSync('./non-existent-folder');
console.log(files);
} catch (err) {
console.error('디렉토리를 읽을 수 없습니다:', err.message);
}
물론 있습니다.
fs.readdir('./uploads', (err, files) => {
if (err) {
console.error(err);
return;
}
console.log(files);
});
이럴 땐
요약하자면,
파일 시스템을 다룰 때 동기 방식과 비동기 방식을 적절히 선택하는 것은 시스템 안정성과 성능 모두에 큰 영향을 미칩니다. 간단한 작업이라도 습관처럼 쓰는 코드는 늘 신중하게 선택하는 게 중요하겠죠.