///////
Search
📌

Java Instrumentation이란 무엇이고 사용했을 때 어떤 장점이 있을까요?

Byte Code Instrument란?

BCI (Byte Code Instrument) 는 Java의 Byte Code에 대해 직접적으로 수정을 가해서, 소스 파일의 수정없이 원하는 기능을 부여하는 기법이다.
우리가 아는 관점지향프로그래밍인 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)방식을 사용할 수 있고 직접적으로 클래스 파일에 수정을 가하는 방식이기 때문에 가장 속도가 빠르다.
JDK Dynaminc Proxy와 CGLIB 는 프록시 방식이기에 함수 처리만 가능
AspectJ는 함수와 예외 처리 등 다양한 처리 가능

추가 사항

모니터링(APM) 툴 들이 대부분 BCI 기능을 이용하고 있으며 애플리케이션의 수정 없이 성능 측정에 필요한 요소들을 삽입할 수 있다.