Byte Code Instrument란?
우리가 아는 관점지향프로그래밍인 AOP를 구현하는 핵심 기술이 바로 BCI이다.
AOP 컴포넌트들이 컴파일 혹은 런타임 시간에 Aspect와 Business Logic을 Weaving 할 수 있는 이유가 바로 BCI를 사용해서 Java Byte Code를 직접 수정하기 때문이다.
구현 방법
이를 구현하는 방법은 크게 3가지로 분류할 수 있다.
1.
JDK Dynamic Proxy
인터페이스를 반드시 구현해야 하며, Reflection을 사용하여 구현한 기술이기에 상대적으로 퍼포먼스가 떨어진다는 특징이 있다.
2.
CGLIB
인터페이스가 아닌 클래스를 대상으로 동작이 가능하고 바이트코드를 조작해서 프록시를 만들기에 JDK Dynamic Proxy에 비해 성능이 좋다.
3.
AspectJ
진정한 AOP 지향 프로그래밍의 구현이다.
AJC(AspectJ용 컴파일러)로 컴파일 시에 바이트 코드를 직접적으로 넣을 수 있는 CTW(Compile Time Weaving)방식을 사용할 수 있고 직접적으로 클래스 파일에 수정을 가하는 방식이기 때문에 가장 속도가 빠르다.
추가 사항
모니터링(APM) 툴 들이 대부분 BCI 기능을 이용하고 있으며 애플리케이션의 수정 없이 성능 측정에 필요한 요소들을 삽입할 수 있다.