Back-End/트러블슈팅
received failure with description 'Failure' 오류 해결 방법
봉의일상
2025. 3. 16. 11:48
최근 시스템에서 PDF 파일을 업로드/삭제하는 과정에서 "received failure with description 'Failure'" 오류가 발생하는 문제가 있었다. 이 문제를 해결하기 위해 원인을 분석하고 조치를 취한 결과, 파일을 열고 닫는 처리에서 발생한 문제임을 확인했다. 본 포스팅에서는 이 오류의 원인과 해결 방법을 정리하여 공유하고자 한다.
오류 발생 상황
- 특정 PDF 파일들이 정상적으로 업로드/삭제되지 않고 오류 메시지를 출력함
- 동일한 파일을 다른 환경에서 업로드하면 문제가 발생하지 않음
- 시스템 내에서 해당 파일이 사용 중인 상태로 감지됨
문제 원인 분석
- 파일 점유 문제: 특정 프로세스가 파일을 점유하고 있어 업로드 실패 발생
- Java 파일 핸들링 문제: 파일을 열어둔 후 닫지 않는 코드로 인해 리소스가 반환되지 않음
- 파일명 문제: 특수 문자 또는 공백이 포함된 파일명이 시스템에서 인식되지 않는 문제 발생 가능성
해결 과정
- lsof 명령어를 사용하여 파일을 점유한 프로세스 확인
- lsof | grep <파일명> 명령어 실행 후, 파일을 점유 중인 프로세스를 찾음
- 특정 프로세스에서 해당 파일이 열려 있는 상태를 확인
- Java 코드에서 파일 닫기 누락 확인
- Java 코드 내에서 FileInputStream, BufferedReader, FileWriter 등의 객체를 생성한 후 close()를 호출하지 않아 리소스가 반환되지 않음을 확인
- 문제 코드 예시:
FileInputStream fis = new FileInputStream("example.pdf");
BufferedReader reader = new BufferedReader(new InputStreamReader(fis)); // 파일을 읽는 로직
// reader.close(); (이 부분이 누락됨)
- 코드 수정 및 테스트 진행
- try-with-resources 구문을 사용하여 자동으로 파일을 닫도록 변경
- 수정된 코드 예시:
try {
FileInputStream fis = new FileInputStream("example.pdf");
BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
} catch (IOException e) {
e.printStackTrace();
}
- 위 방식으로 코드 수정 후 파일 점유 문제가 해결됨
결론
이번 오류는 파일을 열고 닫지 않는 코드로 인해 발생한 문제였다.
lsof 명령어를 활용해 파일을 점유한 프로세스를 찾고,
Java 코드에서 close()를 호출하도록 수정하는 방법으로 해결할 수 있었다.