-
Spring Boot에서 File을 송수신할 때의 disk I/O
disk I/O는 머신 전체에 영향을 미치기 때문에, 하나의 머신에서 여러 process를 사용한다면 신중해야 한다. 기본적으로, JVM 기반의 언어(Java, Kotlin)에서 사용하는 File 또는 Resource 관련 class들은 in-memory data를 관리하는 게 아니다. 이러한 class들은 input stream을 이용해서 binary를 ‘읽어 오는’ 작업과 그 파일의 메타 데이터를 ‘관리하는’ 역할을 수행한다. MultipartFile을 수신할 때 MultipartFile을 수신하면, 서블릿은 이 파일을 disk의 temp directory에 임시로 ‘저장’한다. MultipartFile은 Resource를 member로 가지고 있고, Resource는 binary를 input stream을 통해 읽어 오는데, 서블릿은 binary를 disk에서 직접...
-
Spring Boot 프로젝트에서 파일 리소스 관리하기
// resources/dir/file.txt @Value("classpath:dir/file.txt") lateinit var resource: Resource getResources() 함수와의 차이점 getResources() 함수는 자바 내장 함수입니다. (java.lang.ClassLoader.getResources) getResources()로 파일을 가져오면 ide상의 로컬 개발 환경에서 잘 돌아갈 수 있지만, jar를 뽑아서 실행할 때 uri가 바뀌기 때문에 아마 화가 나게 될 수도 있습니다. getResources()로 해도 잘 되는 경우도 있는데, 제가 했던 프로젝트의 경우는 잘 안 되었습니다. 반면 위에서는 spring annotation을 사용했기 때문에 스프링이 path를 관리해 줍니다. 그래서 jar를 서버에 올려서 실행할 때도 문제가 없(다고합)니다. resources/static 에 넣으면 안...