이전 글이 짧았던 만큼, 금방 다시 돌아왔습니다.

BCI소개 글에서 아래와 같이 소개했듯이 BCI를 지원하는 오픈소스 라이브러리들이 있었어요!

•ASM : Object Web에서 제공 http://asm.objectweb.org/
•BCEL : Apache 프로젝트에서 제공 http://jakarta.apache.org/bcel/
•SERP : Sourceforge 프로젝트에서 제공 http://serp.sourceforge.net/
•Javassist : JBoss 프로젝트에서 제공 http://www.csg.is.titech.ac.jp/~chiba/javassist

그 중에 뭔가 믿음이 가는(?) apache의 BCEL부터 볼게요!

BCEL(Byte Code Engineering Library)는 사용자가 java class파일을 분석, 생성, 조작할 수 있게 해줍니다.
JVM이나 .class 파일에 대해 더 잘 알고싶을 때 유용하게 쓸 수 있고, JustIce byte code verifier를 포함해서 standard JVM메시지보다 코드에 어떤 문제가 있는지 더 나은 정보를 줍니다.
BCEL은 여러 프로젝트에서 성공적으로 사용됐으나...불행하게도 몇 년 동안 개발이 진행되지 않았습니다.
그래서, 실제 BCEL 소개하는 페이지에서도 ASM을 권하고 있어요.
BCEL 최신버전을 찾아보니 무려 5.2버전으로 2006년에 개발된놈이 최신이예요...
요새 운영환경에서 java 8쓴다는 고객도 속속 나오는데.. 2006년이 최신인 라이브러리를 사용하는데는 무리가 있겠어요!

다음에는... ASM에 대해 소개할게요!

아, 참고로.. BCEL이 언제 어떻게 간섭하는지 보여주는 그림 보여드릴게요!
class loader에서 클래스가 로딩된 후에 byte code verifier로 넘어가기 직전에 간섭하고있어요.
JavaClass는 BCEL의 API입니다. 이놈이 어떻게 run-time(실제로는 loading time)에 코드를 변경할 수 있는지 감이 오시나요?