Hanpy's Blog

두 글자 이상 입력하세요.

Language · Nodejs

fs.existsSync

Node.js에서 파일이나 디렉토리의 존재 여부를 동기적으로 확인할 수 있는 fs.existsSync 함수의 사용법과 주의사항을 알아봅니다.

Hanpy약 3분

개발을 하다 보면 파일이나 폴더가 존재하는지를 빠르게 확인해야 하는 경우가 많습니다. 예를 들어, 설정 파일이 있는지 확인하거나, 로그 파일을 만들기 전에 해당 파일이 이미 존재하는지를 판단하고 싶을 수 있습니다.

이럴 때 가장 간단하게 사용할 수 있는 함수가 바로 fs.existsSync입니다. 이름 그대로, 주어진 경로의 파일 또는 디렉토리가 "존재하는지 여부"를 동기적으로 반환해줍니다.


기본 사용법

fs-existsSync
const fs = require('fs');
 
if (fs.existsSync('./config.json')) {
  console.log('설정 파일이 존재합니다.');
} else {
  console.log('설정 파일이 없습니다.');
}

fs.existsSync는 인자로 받은 경로의 파일 또는 폴더가 존재하면 true를, 존재하지 않으면 false를 반환합니다.


언제 사용하면 좋을까?

  • 애플리케이션 초기 구동 시 설정 파일이 있는지 검사
  • 특정 경로에 폴더가 없으면 새로 만들기 전 조건 확인
  • 로그 파일 또는 캐시 파일 사전 확인
  • CLI 도구에서 사용자 입력 경로 검증

이처럼 빠르게 경로 존재 여부를 파악해야 하는 경우에 유용하며, 별도의 에러 처리를 하지 않아도 되어 코드가 단순해집니다.


주의할 점

Node.js 공식 문서에서는 fs.existsSync의 사용을 지양할 것을 권장하기도 합니다. 그 이유는 다음과 같습니다:

  1. 이 함수는 동기 함수이기 때문에, 실행되는 동안 이벤트 루프를 블로킹합니다. 특히 서버 코드에서는 성능 저하로 이어질 수 있습니다.
  2. fs.access()나 fs.promises.access()와 같은 비동기 방식이 더 안전하고 유연한 처리를 가능하게 합니다.

예: 비동기 대안

fs-existsSync
const fs = require('fs');
 
fs.access('./config.json', fs.constants.F_OK, (err) => {
  if (err) {
    console.log('파일이 없습니다.');
  } else {
    console.log('파일이 존재합니다.');
  }
});

또는 Promise 기반으로:

fs-existsSync
const fs = require('fs').promises;
 
async function checkFile() {
  try {
    await fs.access('./config.json');
    console.log('존재함');
  } catch {
    console.log('존재하지 않음');
  }
}

광고

그럼에도 불구하고 언제 쓰면 괜찮을까?

fs.existsSync는 다음과 같은 경우에는 여전히 유용하게 쓰일 수 있습니다:

  • CLI 도구나 스크립트성 코드처럼 실행 시간이 짧고, 동기 방식이 허용되는 환경
  • 서버 시작 시 초기 검사 정도의 용도 (단, 빈번히 호출되면 안 됨)
  • 테스트 코드나 개발용 스크립트 작성 시

마무리

fs.existsSync는 매우 간단하고 직관적인 API로, 파일이나 폴더가 존재하는지를 빠르게 확인할 수 있습니다. 다만 이벤트 루프를 블로킹한다는 단점이 있으므로, 실시간성이 중요한 서버 코드에서는 비동기 방식의 fs.access 또는 fs.promises.access를 사용하는 것이 더 안전합니다.

용도에 맞게, 그리고 호출 빈도를 고려해서 적절하게 사용한다면 충분히 유용한 도구가 될 수 있습니다.


참고 문서

Hanpy백엔드·인프라 엔지니어 · AI 트렌드 정리 중
About 보기