더북(TheBook)

4.9 리소스 접근하기

애플리케이션은 일반적으로 다양한 형태의 리소스에 접근해야 합니다. 애플리케이션은 파일 시스템의 파일에 담긴 구성 데이터에 접근해야 할 수도 있고 클래스패스에 있는 JAR 파일에 담긴 이미지 정보에 접근해야 할 수도 있으며, 서버 어딘가에 있는 특정 데이터에 접근해야 할 수도 있습니다. 이때 스프링은 프로토콜과 상관없이 리소스에 접근할 수 있는 통합 메커니즘을 제공합니다. 파일이 파일 시스템에 저장된 클래스패스 또는 원격 서버에 들어있든 상관없이 애플리케이션에서 동일한 방법으로 파일 리소스에 접근할 수 있음을 의미합니다.

스프링은 org.springframework.core.io.Resource 인터페이스를 사용해 리소스에 접근할 수 있는 기능을 제공합니다. Resource 인터페이스는 굳이 설명하지 않아도 이름으로 바로 알 수 있는 메서드 10개를 정의하는데 이들 메서드는 contentLength(), exists(), getDescription(), getFile(), getFileName(), getURI(), getURL(), isOpen(), isReadable(), lastModified()입니다. 여기에 추가로 별도 설명이 필요한 createRelative() 메서드가 정의되어 있습니다. createRelative() 메서드는 이미 생성된 인스턴스에서 상대 경로를 사용해 새로운 Resource 인스턴스를 생성하는 메서드입니다. 4장의 범위를 넘어가긴 하지만 커스텀 Resource 구현체를 만들 수도 있습니다. 하지만 일반적으로 파일에 접근하거나 클래스패스 또는 URL 리소스에 접근할 때 스프링에 내장된 구현체(각각 FileSystemResource, ClassPathResource, UrlResource 클래스)를 사용합니다. 스프링은 Resource 인스턴스를 찾거나 생성할 때 내부적으로 ResourceLoader 인터페이스와 이 인터페이스의 기본 구현체인 DefaultResourceLoader를 사용합니다. 하지만 일반적으로 DefaultResourceLoader는 사용할 일이 없으며 그 대신 ResourceLoader 구현체인 ApplicationContext를 사용합니다. 다음은 ApplicationContext로 세 리소스에 접근하는 예제 애플리케이션입니다.

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