자바 7에는 ImageIO
라는 패키지가 있다. 이미지 파일을 보다 쉽게 읽고, 쓸 수 있게 만들어 주는 역할을 한다. 프로젝트 내에서도 이미지를 업로드 할 때 사용하는 패키지인데, 이와 관련해서 오류가 발생했다.
javax.imageio.IIOException: Can't create cache file!
at javax.imageio.ImageIO.createImageInputStream(ImageIO.java:361)
Caused by: java.nio.file.NoSuchFileException: /home/{USER}/apps/{server}/temp/imageio2173568924610250636.tmp
at javax.imageio.stream.FileCacheImageInputStream.<init>(FileCacheImageInputStream.java:102)
at com.sun.imageio.spi.InputStreamImageInputStreamSpi.createInputStreamInstance(InputStreamImageInputStreamSpi.java:69)
at javax.imageio.ImageIO.createImageInputStream(ImageIO.java:357)
캐시 파일
ImageIO
는 디폴트 설정이 캐시 파일을 사용하는 것이다. 필요에 따라 캐시 파일을 사용하지 않고 싶다면 다음과 같이 설정을 해주면 된다.
ImageIO.setUseCache(false);
이렇게 캐시 사용을 false
로 하게 되면 캐시 파일을 만들지 않고 곧바로 메인 메모리에 데이터를 쓰게 된다. 캐시를 사용하지 않으면 요청이 몰릴 경우 어플리케이션의 메모리 사용량이 급격하게 증가할 수 있어 캐시 파일을 만들어 두고 순차적으로 처리하는 편이 서비스 안정성을 위해 더 나을 수 있다.
어쨌든 지금의 문제는 캐시 파일을 생성해야 하는데, 생성할 수 없는 상황이라 발생하는 문제이다. Caused by
뒤에 나온 NoSuchFileException
의 내용을 보면 자신의 프로젝트 구성에 따라 특정 경로에 있어야 하는 파일이 없어 문제가 발생하고 있다고 나오는데, ImageIO
같은 경우 톰캣의 CATALINA_TMPDIR
경로에 캐시 파일을 생성한다고 한다.
CATALINA_TMPDIR
는 톰캣의 환경변수인데, 톰캣이 설치된 경로의 bin
디렉토리에서 version.sh
를 실행하면 확인할 수 있다. 나의 경우에는 /home/{USER}/apps/{SERVER}/temp
로 설정되어 있었는데, 해당 서버에는 /home/{USER}/apps/{server}
까지만 존재하고 있었다. 그래서 ImageIO
에서 캐시 파일을 저장할 경로를 찾지 못 했고, 이로 인해 문제가 발생한 것이다.
해당 경로로 이동해서 temp
디렉토리를 생성해주면 정상적으로 작동하는 것을 확인할 수 있다.
'일반 > 팁' 카테고리의 다른 글
hosts 파일을 이용한 DNS 사용 (2) | 2022.09.22 |
---|---|
MySQL collation 관련 오류 (0) | 2022.06.08 |
쿠키 도메인 관련 문제 (0) | 2022.06.08 |