티스토리 뷰

Spring/추상화

Resource 추상화

세진짱 2020. 5. 20. 21:54

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 (Spring Framework 5.2.6.RELEASE API)

Interface for a resource descriptor that abstracts from the actual type of underlying resource, such as a file or class path resource. An InputStream can be opened for every resource if it exists in physical form, but a URL or File handle can just be retur

docs.spring.io

  • 위 주소를 통해 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:// 은 많이봤는데도 뭔지 모르고 잘 썼다

 

앞으로 리소스에 접근할 때 잘 써먹어야지..!

'Spring > 추상화' 카테고리의 다른 글

Resource 추상화  (0) 2020.05.20
댓글
댓글쓰기 폼
공지사항
Total
50,925
Today
33
Yesterday
42
링크
TAG
more
«   2021/02   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28            
글 보관함