설명
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에서 파일 디스크립터를 닫습니다.