본문 바로가기
  • 실행력이 모든걸 결정한다
Spring Series/Spring Framework

[Spring] Spring의 로드타임 위버

by 김코더 김주역 2022. 10. 17.
반응형

복습해보자면, 로드타임 위버는 클래스 로딩 시점에 바이트코드의 조작이 가능하도록하여 일반 클래스에도 AOP 처리가 가능하도록 해준다.

 

1. Spring이 제공하는 로드타임 위버의 특징

- JPA에서 필요로 하는 로드타임 위버로도 사용된다. JVM의 자바에이전트 옵션은 한 번에 한 가지만 적용할 수 있는 문제가 해결된다.

- JVM 레벨의 자바에이전트를 대체할 수 있는 적합한 로드타임 위버를 등록해준다. 클래스 로더 레벨에 로드타임 위빙 기능을 적용함으로써, JVM을 통해 로딩되는 모든 클래스를 조사해야 하는 문제가 해결된다.

- 바이트코드 조작이 필요한 새로운 기술이 추가되더라도 일관된 방식으로 로드타임 위버를 적용할 수 있다.

 

 

2. Spring이 적용해주는 로드타임 위버의 구현 방식

xml 설정 파일에 <context:load-time-weaver />를 추가해주면 아래의 구현 방식들 중에서 하나가 적용된다.

 

1) WAS 전용 로드타임 위버

- 애플리케이션 서버가 WebLogic, OC4J, GlassFish, JBossAS 중에서 하나일 때 적용된다.

- JVM에 자바에이전트를 설정할 필요가 없다.

 

2) JVM 자바에이전트

- 1)에서 설명한 WAS 환경이 아니면서, Spring 자바에이전트가 등록되어 있는 경우에 적용된다.

 

3) 관례를 따르는 클래스 로더

- 1), 2)의 방식이 적용 불가능한 경우에 적용된다.

- 리플렉션을 이용해서 클래스 로더에 로드타임 위버 기능을 추가할 수 있는 메소드가 있는지 확인한다. 예를 들어, addTransformer() 이름을 가진 메소드를 제공하는 클래스 로더에 로드타임 위버 기능을 적용할 수 있도록 하는 관례가 있다.

- 클래스 로더를 적용하는 방법은 서버와 버전마다 다르기 때문에 매뉴얼을 참고해야 한다.

 

▣ 특정 방식의 로드타임 위버를 지정하고 싶다면 <context:load-time-weaver />의 weaver-class 속성을 이용하면 된다.

 

 

3. @EnableLoadTimeWeaving

- Spring 3.1에서 추가된 어노테이션이다.

- Xml 설정의 <context:load-time-weaver />과 동일한 기능을 한다.

- 아래와 같이 설정 클래스에 추가해주면 된다.

@Configuration
@EnableLoadTimeWeaving
public class AppConfig {...}

- aspectjWeaving 엘리먼트를 통해 AspectJ를 이용한 로드타임 위빙을 적용할 수 있다.

 

+ 보충)

- 직접 구현한 로드타임 위버를 사용하고 싶다면 LoadTimeWeavingConfigurer를 이용하면 된다. (책 오타 부분 수정)

 

 

● 참고 자료 : 토비의 스프링 3.1 Vol.2

 

반응형

댓글