SSAFY11th-book-study / book-study

0 stars 0 forks source link

[6.5] 바이트코드 생성과 조작을 통한 AOP #64

Closed hj-k66 closed 3 months ago

hj-k66 commented 4 months ago

책에서는 AOP를 구현하는 방식으로 1. 프록시를 이용한 AOP 2. 바이트 코드 생성과 조작을 통한 AOP 2가지 방식을 설명합니다.

대부분의 부가 기능은 메소드 호출 시점에 부여하는 것만으로 충분해 프록시를 이용한 AOP를 주로 사용하지만, 타깃 오브젝트가 생성되는 순간 부가 기능을 부여하거나, static 메소드 호출이나 초기화, 필드 입출력 등에 부가기능을 부여하기 위해서는 바이트 코드 조작을 통한 AOP가 필요하다고 합니다.

이런 경우가 구체적으로 어떤 경우인지 궁금합니다!

gmelon commented 3 months ago

저도 static 메서드에 AOP 적용하는 사례밖에는 떠오르지 않네요.

아시는 것 처럼 static method는 클래스 레벨에서 호출되기 때문에 인스턴스에 대한 프록시를 생성하는 방식으로는 static method 호출을 가로채거나 대체할 수 없기때문에 프록시 방식의 AOP로는 static method에 부가 기능을 적용하는 것이 불가능합니다.

따라서, static method의 실행 전후로 부가 기능을 제공하고자 한다면,,? 바이트코드 조작의 AOP를 사용해야 할 것 같습니다. 팩토리 메서드의 실행 전후로 무언가 부가 작업을 수행한다던가 하는 등의 작업이 필요하다면 활용할 수 있을 것 같습니다.

근데 검색해도 사례가 잘 나오지 않는 것으로 봐서 말씀하신대로 스프링 AOP만 사용해도 대부분의 경우는 대응이 가능할 것이라고 생각됩니다! 필드 조작의 경우에도 get/setter 를 통해 프록시 AOP로 사용할 수 있을 것 같고요!

hj-k66 commented 3 months ago

++추가 6.6.3에서 타깃 오브젝트 내에서의 메소드 호출에는 프록시가 적용되지 않는 문제를 해결하는 방법으로 AspectJ와 같은 타깃의 바이트코드를 직접 조작하는 방식의 AOP 기술을 적용한다고 합니다!