Resource

  • 외부자원 가져오기
  • 자바의 표준 클래스들은 다양한 리소스(URL, 파일 등)에 접근할 때 충분한 기능을 제공하지 않음
  • 스프링은 필요한 기능을 만들어서 제공


Resource 구현체 목록

  • UrlResource
    • java.net.URL을 래핑한 버전, 다양한 종류(ftp:, file:, http:, 등의 prefix로 접근유형 판단)의 Resource에 접근 가능하지만 기본적으로는 http(s)로 원격접근
  • ClassPathResource
    • classpath(소스코드를 빌드한 결과(기본적으로 target/classes 폴더)) 하위의 리소스 접근 시 사용
  • FileSystemResource
    • File을 다루기 위한 리소스 구현체
  • SevletContextResource, InputStreamResource, ByteArrayResource
    • Servlet 어플리케이션 루트 하위 파일, InputStream, ByteArrayInput 스트림을 가져오기 위한 구현체


Spring ResourceLoader

  • 기본적으로 applicationContext에서 구현이 되어 있음
  • 프로젝트 내 파일(주로 classpath 하위 파일)에 접근할 일이 있을 경우 활용
  • 대부분의 사전정의된 파일들은 자동으로 로딩되도록 되어 있으나, 추가로 필요한 파일이 있 을 때 이 부분 활용 가능
1
2
3
4
5
6
7
8
9
10
11
12
13
@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");
        // use myTemplate...
    }
}

Application Contexts & Resource Paths

  • applicationContext 설정값을 가져오는 방법들
1
2
3
4
5
6
// let's create an applicationContext
ApplicationContext ctx = new ClassPathXmlApplicationContext("conf/appContext.xml");
ApplicationContext ctx = new FileSystemXmlApplicationContext("conf/appContext.xml");
ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:conf/appContext.xml");
// then you can use ctx as a Spring
Bear bear = (Bear) ctx.getBean("bear");


AOP

  • 관점 지향 프로그래밍(Aspect Oriented Programing)
  • 공통적인 관심사(로깅, 트랜잭션, 인증)를 여러 메서드의 호출 전/후에 원할때마다 손쉽게 추가
  • OOP로 처리하기에는 다소 까다로운 부분을 AOP라는 처리 방식을 도입하여 손쉽게 공통 기능을 추가/수정/삭제 할 수 있도록 함

AOP 용어

  • Aspect
    • 여러 클래스나 기능에 걸쳐 있는 관심사, 그리고 그것들을 모듈화함
    • AOP 중에서 가장 많이 활용되는 부분은 @Transactional (트랜잭션 관리), @Cacheable 기능
  • Advice
    • AOP에서 실제로 적용하는 기능(로깅, 트랜잭션, 캐시, 인증 등)을 뜻함
  • Join point
    • 모듈화된 특정 기능이 실행될 수 있는 연결 포인트
  • Pointcut
    • Join point 중에서 해당 Aspect를 적용할 대상을 뽑을 조건식
  • Target Object
    • Advice가 적용될 대상 오브젝트
  • AOP Proxy
    • 대상 오브젝트에 Aspect를 적용하는 경우 Advice를 덧붙이기 위해 하는 작업을 AOP Proxy라 고 함
    • 주로 CGLIB(Code Generation Library, 실행 중에 실시간으로 코드를 생성하는 라이브러리) 프록시를 사용하여 프록싱 처리를 한다.
  • Weaving
    • Advice를 비즈니스 로직 코드에 삽입하는 것을 말함

AspectJ 지원

  • AspectJ는 AOP를 제대로 사용하기 위해 꼭 필요한 라이브러리
  • 기본적으로 제공되는 Spring AOP로는 다양한 기법(Pointcut 등)의 AOP를 사용할 수 없음

카테고리:

업데이트:

댓글남기기