티스토리 뷰
Resource 추상화
(https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#resources)
Resource 추상화란?
- Resource 추상화란 low-level 리소스에 접근할 수 있게 자바의 java.net.URL을 추상화 한 것이다
- 처음 들었을 때는 감이 잘안왔다..!
- 그럼 추상화 한 이유는 무엇일까?! 공식문서를 통해 알아보자!
추상화를 한 이유는 무엇일까?
- 일단 공식문서를 보면 영어로 길~~~게 나와있다
- 이유들을 살펴보면 첫째로 클래스패스 기준으로 리소스를 읽어오는 기능이 없다!
- ServletContext를 기준으로 상대 경로로 읽어오는 기능이 없다
- URL prefix를 이용해 새로운 핸들러를 만들 수 있지만 구현이 복잡하고 편의성이 없다!
주요 메소드
- 위 주소를 통해 resource의 주요 메소드를 살펴 볼 수 있다
- getInputStream() / exitst() / isOpen()등 다양하게 있다
- 그 중 getDescription() 은 전체 경로 포함한 파일 이름 또는 실제 URL을 불러온다
구현체는 무엇이 있을까?
- UrlResource : 기본으로 지원하는 프로토콜 http,https,ftp,file,jar
- ClassPathResource : 지원하는 접두어 classpath:
- FileSystemResource
- ServletContextResource: 웹 애플리케이션 루트에서상대 경로로 리소스를 찾는다
- 기타 등등....
리소스 읽어오기
- 리소스의 타입은 location 문자열과 ApplicationContext의 타입에 따라 결정 된다!
- ClassPathXmlApplicationContext => ClassPathResource
- FileSystemXmlApplicationContext => FileSystemReousrce
- WebApplicationContext => ServletContextResource
- 하지만 접두어를 통해 ApplicationContext 타입에 상관없이 리소스 타입을 강제화 시킬 수 있다!
- 아래 예를통해 classpath:, file://을 사용했을 때 resource 타입을 보자
- 처음 리소스는 웹 에플리케이션 루트에서 상대 경로로 찾는 ServletContextResource다
- 하지만 그 아래는 classpath,file을 붙였다 실행결과를 보자!
- classpath:를 붙이면 ClassPathResource, file://을 붙이면 FileUrlResource로 바뀌었다!
- 이와 같이 접두어를 통해 리소스 타입을 강제화 시킬 수 있다!
이번에는 resource 추상화를 공부해봤다!
공식문서를 통해 이해한다면 결국 기능들의 부재와 불편함을 해결하기 위해
기존에 존대하던 클래스를 추상화 시켰고 더 편하게 low-level에 리소스에 접근 가능하게 해줬다
특히 classpath: 와 file:// 은 많이봤는데도 뭔지 모르고 잘 썼다
앞으로 리소스에 접근할 때 잘 써먹어야지..!
댓글