파일 자원이 안전하게 해제되지 않음

파일 자원이 안전하게 해제되지 않음

설명

fs.openSync() 또는 fs.promises.open()으로 획득한 파일 자원을 확실한 close() 호출 없이 사용하면 정상 반환이나 예외 발생 후에도 파일 디스크립터가 열린 채 남을 수 있습니다.

잠재적 영향

  • 반복 요청에서 파일 디스크립터 누수가 누적되어 서비스 거부가 발생할 수 있습니다.
  • 파일 잠금이나 리소스 고갈로 정상 요청이 실패할 수 있습니다.

해결 방법

  • 파일 핸들은 try/finally에서 반드시 닫으세요.
  • 가능한 경우 수명 관리가 명확한 고수준 파일 API를 사용하세요.

예시

fs와 path가 준비된 함수 내부의 일부입니다.

변경 전

javascript
const fd = fs.openSync(path, "r");
return fs.readFileSync(fd);

변경 후

javascript
const fd = fs.openSync(path, "r");
try {
  return fs.readFileSync(fd);
} finally {
  fs.closeSync(fd);
}

설명:

  • 변경 전: fs.openSync() 또는 fs.promises.open()으로 획득한 파일 자원을 finally 블록이나 확실한 close() 호출 없이 사용하면 정상 반환이나 예외 발생 후에도 파일 디스크립터가 열린 채 남을 수 있습니다.
  • 변경 후: 읽기에 성공하거나 예외가 발생해도 finally에서 파일 디스크립터를 닫습니다.

참조