[스프링]Resource

정태규·2023년 3월 17일
0

spring

목록 보기
5/14

Spring Resource

java.net.URL의 한계(classpath 내부 접근이나 상대경로 등)를 넘어서기 위해 스프링에서 추가로 구현

스프링 내부 동작을 이해하기 위해서 반드시 필요한 부분이다.

Resource 구현체 목록

Spring 내부 Resource 구현체 중 대표적인 몇가지

  • UrlResource
    java.net.URL을 래핑한 버전, 다양한 종류(ftp,file,http 등의 prefix로 접근유형 판단)의 Resource에 접근 가능하지만 기본적으로는 Http(s)로 원격접근

  • ClassPathResource
    classpath(소스코드를 빌드한 결과(기본적으로 target/classes 폴더)) 하위의 리소스 접근 시 사용

  • FileSystemResource
    이름과 같이 File을 다루기 위한 리소스 구현체

  • servletContextResource, InputStreamResource, ByteArrayResource
    servlet 어플리케이션 루트 하위 파일, inputStream,ByteArrayInput 스트림을 가져오기 위한 구현체

  • Spring ResourceLoader
    실제로 사용하는 방식
    스프링 프로젝트 내 Resource(파일 등)에 접근할 때 사용하는 기능

기본적으로 applicationContext에서 구현되어 있음
프로젝트 내 파일(주로 classpath 하위 파일)에 접근할 일이 있을 경우 활용
대부분의 사전정의된 파일들은 자동으로 로딩되도록 되어 있으나, 추가로 필요한 파일이 있을 때 이 부분 활용 가능

@Service
public class ResourceService{
	@Autowired
    ApplicationContext ctx;
    
    public void setResource(){
    	Resource myTemplate =
     			ctx.getResource("classpath:some/resource/path/myTemplate.txt"); // 특정 클래스 패스 아래 파일 접근
                //ctx.getResource("file:/some/resource/path/myTemplate.txt"); // 내 로컬에 있는 파일 접근
//ctx.getResource("http://myhost.com/resource/path/myTemplate.txt"); //http 특정 호스트에 있는 파일에 접근
       //use myTemplate... 
    }
}

위에서 스프링에서 가장 핵심이자, 뇌 같은 존재인 ApplicationContext를 이용해서 ResourceLoader를 불러왔고, 경우에 따라 ("classpath:***","file:***","http:***")중 하나를 자동으로 선택해서 파일에 접근할 수 있게 해주었다.

이때 ResourceLoader가 위치 지정자 패턴(classpath 등등...)을 자동으로 선택할 수 있게 해주는 것이 ResourcePatternResolver이다.

정리하자면

classpath, 로컬, http에서 파일에 접근하기 위해서는 ApplicationContext라는 것을 이용해야 한다. ApplicationContext에는 ResourceLoader가 있어서 파일을 불러올 수 있다. 파일이 어떤 형태의 경로에 있느냐를 선택할때는 ResourceLoader를 implement하고 있는 ResourcePatternResolver가 그 역할을 한다.

0개의 댓글