You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
추가로 어드바이저, 어드바이스, 포인트컷이라는 개념 덕분에 “ 어떤 부가 기능” 을 “어디에 적용” 할지 명확하게 이해할 수 있었다.
남은 문제
프록시 팩토리와 어드바이저 같은 개념 덕분에 지금까지 고민했던 문제들은 해결되었다. 프록시도 깔끔하게 적용하고 포인트컷으로 어디에 부가 기능을 적용할지도 명확하게 정의할 수 있다. 원본 코드를 전혀 손대지 않고 프록시를 통해 부가 기능도 적용할 수 있었다. 그런데 아직 해결되지 않는 문제가 있다.
문제1 - 너무 많은 설정
바로 ProxyFactoryConfigV1, ProxyFactoryConfigV2 와 같은 설정 파일이 지나치게 많다는 점이다.
예를 들어서 애플리케이션에 스프링 빈이 100개가 있다면 여기에 프록시를 통해 부가기능을 적용하려면 100개의 동적프록시 생성 코드를 만들어야 하낟. 무수히 많은 설정 파일 때문에 설정 지옥을 경험하게 될 것이다.
최근에는 스프링 빈을 등록하기 위찮아서 컴포넌트 스캔까지 사용하는데 이렇게 직접 등록하는 것도 모자라서 프록시를 적용하는 코드까지 빈 생성 코드에 넣어야 한다.
문제2 - 컴포넌트 스캔
애플리케이션 V3처럼 컴포넌트 스캔을 사용하는 경우 지금까지 학습한 방법으로는 프록시 적용이 불가능하다.
왜냐하면 실제 객체를 컴포넌트 스캔으로 스프링 컨테이너에 스프링 빈으로 등록을 다 해버린 상태이기 때문이다. 지금까지 학습한 프록시를 적용하려면, 실제 객체를 스프링 컨테이너에 빈으로 등록하는 것이 아니라 ProxyFactoryConfigV1에서 한 것처럼 부가 기능이 있는 프록시를 실제 객체 대신 스프링 컨테이너에 빈으로 등록해야 한다.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
프록시 팩토리 - 적용1
지금까지 학습한 프록시 팩토리를 사용해서 애플리케이션에 프록시를 만들어보자.
먼저 인터페이스가 있는 v1애플리케이션에
LogTrace기능을 프록시 팩토리를 통해서 프록시를 만들어 적용해보자.먼저 어드바이스 만들기
LogTraceAdvice
ProxyFactoryConfigV1
NameMatchMethodPointcut을 사용한다. 여기에는 심플 매칭 기능이 있어서*을 매칭할 수 있다.ProxyApplication
애플리케이션 로딩 로그
실행로그
프록시 팩토리 - 적용2
LogTrace기능을 프록시 팩토리를 통해서 프록시를 만들어 적용해보자.ProxyFactoryConfigV2
ProxyFactoryConfigV2설정을 등록하고 실행하자.ProxyApplication
애플리케이션 로딩 로그
V2 애플리케이션은 인터페이스가 없고 구체클래스만 있기 때문에 프록시 팩토리가 CGLIB를 적용한다.
애플리케이션 로딩 로그를 통해서 CGLIB 프록시가 적용된 것을 확인할 수 있다.
실행로그
http://localhost:8080/v2/request?itemId=hello


정리
프록시 팩토리 덕분에 개발자는 편리하게 프록시를 생성할 수 있게 되었다.
추가로 어드바이저, 어드바이스, 포인트컷이라는 개념 덕분에 “ 어떤 부가 기능” 을 “어디에 적용” 할지 명확하게 이해할 수 있었다.
남은 문제
프록시 팩토리와 어드바이저 같은 개념 덕분에 지금까지 고민했던 문제들은 해결되었다. 프록시도 깔끔하게 적용하고 포인트컷으로 어디에 부가 기능을 적용할지도 명확하게 정의할 수 있다. 원본 코드를 전혀 손대지 않고 프록시를 통해 부가 기능도 적용할 수 있었다. 그런데 아직 해결되지 않는 문제가 있다.
문제1 - 너무 많은 설정
바로
ProxyFactoryConfigV1,ProxyFactoryConfigV2와 같은 설정 파일이 지나치게 많다는 점이다.예를 들어서 애플리케이션에 스프링 빈이 100개가 있다면 여기에 프록시를 통해 부가기능을 적용하려면 100개의 동적프록시 생성 코드를 만들어야 하낟. 무수히 많은 설정 파일 때문에 설정 지옥을 경험하게 될 것이다.
최근에는 스프링 빈을 등록하기 위찮아서 컴포넌트 스캔까지 사용하는데 이렇게 직접 등록하는 것도 모자라서 프록시를 적용하는 코드까지 빈 생성 코드에 넣어야 한다.
문제2 - 컴포넌트 스캔
애플리케이션 V3처럼 컴포넌트 스캔을 사용하는 경우 지금까지 학습한 방법으로는 프록시 적용이 불가능하다.
왜냐하면 실제 객체를 컴포넌트 스캔으로 스프링 컨테이너에 스프링 빈으로 등록을 다 해버린 상태이기 때문이다. 지금까지 학습한 프록시를 적용하려면, 실제 객체를 스프링 컨테이너에 빈으로 등록하는 것이 아니라
ProxyFactoryConfigV1에서 한 것처럼 부가 기능이 있는 프록시를 실제 객체 대신 스프링 컨테이너에 빈으로 등록해야 한다.두가지 문제를 한번에 해결하는 방법이 바로 다음에 설명할 빈 후처리기이다.
Beta Was this translation helpful? Give feedback.
All reactions