개발을 하다 보면 특정 폴더 안에 어떤 파일들이 있는지 확인해야 할 때가 생깁니다. 예를 들어, 업로드 폴더 안에 있는 모든 이미지 파일을 읽는다거나, 설정 파일들을 스크립트로 자동 처리하고 싶을 때 말이죠. 이럴 때 Node.js의
그중에서도 오늘은
readdirSync란?
기본 사용법
가장 기본적인 사용은 아주 간단합니다:
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);
});언제 Sync를 써도 괜찮을까?
- 간단한 CLI 스크립트
- 초기 설정 파일 읽기
- 테스트 코드
- 코드가 전체적으로 동기 흐름을 따를 때
이럴 땐
마무리
요약하자면,
- 디렉토리 내 항목 목록을 동기적으로 읽어옴
- 반환 값은 문자열 배열
- 파일/폴더 구분은 추가 작업 필요
- 에러 발생 시 try-catch 필수
- 대규모 시스템보단 간단한 스크립트나 툴에서 적합
파일 시스템을 다룰 때 동기 방식과 비동기 방식을 적절히 선택하는 것은 시스템 안정성과 성능 모두에 큰 영향을 미칩니다. 간단한 작업이라도 습관처럼 쓰는 코드는 늘 신중하게 선택하는 게 중요하겠죠.