더북(TheBook)

file:http: 프로토콜을 사용할 때 스프링이 UrlResource 인스턴스 또는 UrlResource를 상속한 FileUrlResource를 반환한 것에 주목하기 바랍니다. 스프링이 FileSystemResource 클래스를 포함하고는 있지만 DefaultResourceLoader는 이 클래스를 사용하지 않습니다. 이는 스프링의 기본 리소스 로딩(resource-loading) 전략상 URL과 파일을 프로토콜만 다른(file:http:) 동일한 타입의 리소스로 처리하기 때문입니다. FileSystemResource가 필요하면 FileSystemResourceLoader를 사용하기 바랍니다. 일단 Resource 인스턴스를 가져오면 getFile(), getInputStream(), getURL()을 사용해 자유롭게 해당 리소스 내용에 접근해 필요한 작업을 할 수 있습니다. http: 프로토콜을 사용할 때처럼 파일 리소스를 사용하지 않을 때 getFile() 메서드를 호출하면 FileNotFoundException이 발생할 수 있습니다. 그러므로 리소스의 콘텐츠에 접근할 때는 모든 유형의 리소스에서 동작하는 getInputStream()을 사용할 것을 권장합니다.

Note UrlResource 대신 FileUrlResource가 반환될 때

위 예제를 실행하면 스프링 버전에 따라 UrlResource 대신 FileUrlResource가 반환되기도 합니다. 이는 스프링 5.0.2부터 UrlResource를 상속한 FileUrlResource가 도입돼 DefaultResourceLoader가 “file:...” URL을 FileUrlResource로 해석하기 때문입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.