Flamme1004K / infleanSpringAdvanced-Proxy-

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

infleanSpringAdvanced-Proxy-

Proxy

  • 접근제어 (캐시, 권한, 지연로딩)
  • 부가 기능 추가 (원래 서버가 제공하는 기능에 더해서 부가 기능 실행)

Proxy에 사용되는 패턴들의 의도 (Proxy Pattern과 Decorator Pattern)

주위 Proxy와 ProxyPattern은 다릅니다. Proxy를 구현하기 위하여 사용하는 디자인 패턴이 ProxyPattern과 Decorator Pattern으로 나뉩니다.

프록시 패턴과 데코레이터 패턴은 그 모양이 거의 같고, 상황에 따라 똑같을 때가 있다.

디자인 패턴에서는 중요한 것은 해당 패턴의 겉모양이 아니라 그 패턴을 만든 의도가 더 중요하다. 따라서 의도에 따라 패턴을 구분한다.

프록시 패턴의 의도 : 다른 개체에 대한 접근을 제어하기 위해 대리자를 제공

데코레이터 패턴의 의도 : 객체에 추가 책임(기능)을 동적으로 추가하고, 기능 확장을 위한 유연한 대안 제공

프록시를 사용하고 해당 프록시가 접근 제어가 목적이라면 프록시 패턴이고, 새로운 기능을 추가하는 것이 목적이라면 데코레이터 패턴이 된다.

인터페이스를 사용하는 것이 역활과 구현을 명확하게 나눌 수 있기 때문에 좋다.

리플렉션 사용

리플렉션은 런타임 시 돌아가기 때문에, 컴파일 시 오류를 못잡을 수가 있기 때문에 사용하는 것을 가급적 금한다.

Pattern matches

!PatternMatchUtils.simpleMatch(pattern, methodName) 스프링 패턴 매치에 아주 좋다.

CGLIB (Code Generator Library)

  • 바이트 코드를 조작해서 동적으로 클래스를 생성하는 기술을 제공하는 라이브러리
  • 인터페이스가 없더라도 동적 클래스를 사용하여 동적 프록시를 만들어 낼 수가 있다.
  • 스프링 소스에 내장되어 있음.

ProxyFactory

  • interface class 는 jdk 동적 프록시 사용
  • concrete class 는 cglib 프록시 사용

AOP에 관한 흔한 착각

AOP 적용 수 만큼 프록시가 생성되는게 아닌, 최적화를 진행하여 하나의 프록시만 생기고, 해당 프록시에 여러개의 어드바이저가 돌아가게 된다.

즉, 하나의 target 에 여러 AOP 가 동시에 적용되어도, 스프링 AOP는 target 마다 하나의 프록시 만 생성한다.

About


Languages

Language:Java 100.0%