흔히 발생할 수 있는 에러인데 이번엔 좀 특이한 상황에서 발생해서 기록해두게 되었다.
프로젝트를 진행하면서 게시판에 글을 작성했을때 사진도 여러장 첨부할 수 있도록 만들고 있었다. MultipartFile을 List로 묶어서 다루고 있었는데 잘 작동하는지 확인해보기 위해서 컨트롤러에 사진과 글을 전달하고 사진을 다시 프론트에서 던져주는 방식으로 작성하였다. List<MultipartFile>이 return 되는 셈이었다. 아마 사진이 찍히는게 아니라 toString() 처럼 명세라던지 아니면 path라던지 어찌되었든 뭐가됬든 뭐라도 찍히는지 확인해보고자 리턴했는데 위와 같은 java.nio.file.NoSuchFileException 에러가 발생했다.
그리고 에러 로그를 읽어보면 정말 흥미로운 내용이 있다. 에러 사유에 tomcat:8080 과 관련된 로그가 찍히면서 .tmp 파일을 찾을 수 없다는 내용이 찍힌다.
하지만 결과적으로 실행 결과를 보면 사진도 잘 저장되고 문제없어 보였다. 결국 tomcat 에서 List<MultipartFile>을 내보낼때 에러가 발생하는 이유였다. 아마 프론트에 List<MultipartFile>을 내보내며 tomcat 내부에서 어떤 처리과정을 거칠텐데 거기서 발생하는 이유가 아닐까 싶다.
또한 한 가지 배운 점은 사진과 같은 데이터를 받아들일때는 반드시 @ModelAttribute로 받아야 한다는 거다. 여태 @RequestBody로 받고 있으면서 왜 http 에러가 나는지 고민하고 있었는데 @RequestBody는 json 형식으로 받는다는 것을 알고는 곧장 대체할 어노테이션을 찾아서 @ModelAttribute로 바꾸어서 해결할 수 있었다.
프로젝트를 진행하면서 몰랐던 내용들을 많이 알 수 있어서 좋았다.