Aop-weaving-way

Developer:Bird·2021년 4월 16일
0

Spring

목록 보기
16/17

Aop(asepect oriented programming)을 하는데 있어서 우리는 시점을 정할 수 있다. 이를 위해 간단하게 java의 실행 프로세스를 보면 다음과 같다.


이때 우리가 aop-weaving(크로스 커팅)할 수 있는 프로세스는 소스코드,컴파일 시점,바이트코드로 변환된시점, 클래스 로드시, 런타임(실행중)이렇게 크게 5가지로 구성된다.

0.전체적인 Aop의 문제점

  1. 프로파일링툴 사용 불가=>오버헤드발생
    메서드가 실행되는동안 DJProf(자바 프로파일링 툴)로 프로파일링 할 수 없다. 즉 디버깅과정이나 런타임 오류가 발생할시 calling context imformation을 얻지 못하게 되는데,이를 가능하게 하기 위해서 런타임시 많은 오버헤드 발생

1.Source-code weaving

현재는 사용되지 않음.

2.Compiletime-weaving

장점:

  • 런타임에 대한 오버헤드가 없다.
  • 클래스 경로만 있으면 된다.
    단점:
  • aop로드 시점을 사용자가 제어못함(디버깅 추적시에만 문제?)
  • 사용자 제어 코드에만 적용됨 외부라이브러리는 aop처리 못함
  • lombok과 같이 컴파일 과정에서 코드를 조작하는 플러그인과 충돌이 발생할 가능성이 아주 높다.

3.Binary-weaving(POST compile)

장점: 외부 라이브러리를 weaving할 수 있음
나머지는 compile-weaving과 동일

4.Loadtime-weaving

ClassLoader를 이용하여 클래스가 JVM에 로드 될 때 바이트 코드 조작을 통해 위빙이 되는 방식 RTW처럼 소스파일과 클래스 파일에 조작을 가하지 않아 컴파일 시간은 상대적으로 CTW보다 짧다. 하지만 오브젝트가 메모리에 올라가는 과정에서 위빙이 일어나기 때문에 런타임 시, 시간은 CTW보다 상대적으로 느리다. Application Context에 객체가 로드될 때, aspectj weaver와 spring-instrument에 의한 객체 handling이 발생하기 때문에 performance가 저하된다.

장점:동적인 weaving이 가능함. 또한 Compile,binary와 동일한정도의 효율성보임

5.Runtime-weaving

런타임시 weaving하는 방식을 뜻하고 이는 다이나믹 프록시 형태구조이다.
장점으로는 Spring에서 빈등록하게 되면 자동으로 등록이 된다.(편하다)
단점으로는 오버헤드가 크게 발생하는것이다.

6. Compile vs Runtime


참고자료:
[spring-docs]
stack-overflow
Alex Villazon(ELSEVIER)
[개인블로그]
[java process]
[etc]

profile
끈임없이 발전하자.

0개의 댓글