Spring Framework을 사용하면서, IoC 기반의 코딩을 하기 위해 Interface를 앞단에 두고 이를 구현하는 방식으로 구현한 소스를 좀 뒤집었다.

추가적인 이종의 구현의 필요가 없어 개발의 편의성을 위해 앞단의 Interface를 모두 제거하는 식으로 변경을 하였다. Interface를 둘 경우 Eclipse 소스에서 Ctrl 키를 눌러 참조 구현부로 이동하는 기능이 Interface로 연결되면서 개발상 불편한 것도 변경의 이유가 되었다.

문제는 앞단의 Interface를 지우고 직접 Class를 올리게 되니 Spring에서 Bean을 생성하고 Proxy AOP를 거는 중 다음과 같은 오류가 발생하였다.

Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigException: Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.

인터넷상에 나와있는 “JDK Dynamic Proxy와 CGLIB Proxy에 대한 이해“를 보면 2가지 종류의 Proxy가 이용되는 것으로 확인된다. 아마도 이전에 Interface 기반에서 JDK Dynamic Proxy가 사용된 것으로 보인다.

직접 Class에 대한 Proxy를 이용하기 위해서 Spring Framework의 “lib/cglib” 위치에 있는 “cglib-nodep-2.1_3.jar” 라이브러리를 Class Path에 추가해 주면 된다.