..
Troubleshooting: No space left on device (S3 업로드와 임시 파일)
1. 문제 상황
사내 수집 서버에서 대용량 파일을 처리하던 중 java.io.IOException: No space left on device 예외가 발생하며 서비스가 중단되는 사고가 발생했습니다.
2. 원인 분석
기존에는 네트워크 파일 시스템(EFS)을 사용하여 로컬 파일 다루듯 데이터를 적재했으나, 비용 절감을 위해 AWS S3로 스토리지 서비스를 변경한 것이 계기였습니다.
- 기존 방식: 파일 시스템에 적재 (용량 관리 미비)
- 변경 방식: 로컬 임시 디렉토리에 파일을 생성한 뒤 S3 라이브러리를 통해 업로드.
- 문제점: S3 업로드가 끝난 후 로컬에 남은 임시 파일을 삭제(Cleanup)하는 로직을 누락하여, 시간이 지남에 따라 디스크 용량이 꽉 차게 된 것이었습니다.
3. 해결 방법
파일 업로드 로직이 완료된 시점에 명시적으로 임시 파일을 삭제하도록 코드를 수정했습니다.
File tempFile = new File(localPath);
try {
// S3 업로드 로직 수행
} finally {
if (tempFile.exists()) {
tempFile.delete(); // 업로드 완료 후 반드시 삭제
}
}
클라우드 스토리지를 사용하더라도 데이터를 옮기는 과정에서 발생하는 로컬 리소스의 생명 주기(Lifecycle)를 명확히 관리하는 것이 안정적인 서비스 운영의 핵심입니다.