일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- QueryDSL
- 스프링 핵심 원리
- springdatajpa
- Android
- java
- JPQL
- transaction
- kotlin
- AOP
- Proxy
- Servlet
- JDBC
- Exception
- db
- 인프런
- 자바
- 스프링 핵심 기능
- spring
- 스프링
- 그리디
- Thymeleaf
- 알고리즘
- Spring Boot
- pointcut
- SpringBoot
- 백준
- Greedy
- jpa
- 김영한
- http
- Today
- Total
목록인프런 (528)
개발자되기 프로젝트
프록시 팩토리 덕분에 개발자는 매우 편리하게 프록시를 생성할 수 있게 되었다. 추가로 어드바이저, 어드바이스, 포인트컷 이라는 개념 덕분에 어떤 부가 기능을 어디에 적용할 지 명확하게 이해할 수 있었다. 남은 문제 프록시 팩토리와 어드바이저 같은 개념 덕분에 지금까지 고민했던 문제들은 해결되었다. 프록시도 깔끔하게 적용하고 포인트컷으로 어디에 부가 기능을 적용할지도 명확하게 정의할 수 있다. 원본 코드를 전혀 손대지 않고 프록시를 통해 부가 기능도 적용할 수 있었다. 그런데 아직 해결되지 않는 문제가 있다. 문제1 - 너무 많은 설정 바로 ProxyFactoryConfigV1 , ProxyFactoryConfigV2 와 같은 설정 파일이 지나치게 많다는 점이다. 예를 들어서 애플리케이션에 스프링 빈이 1..
이번에는 인터페이스가 없고, 구체 클래스만 있는 v2 애플리케이션에 LogTrace 기능을 프록시 팩토리를 통해서 프록시를 만들어 적용해보자. Advice는 동일하니 Config만 새로 만들면 된다. 1. Config @Slf4j @Configuration public class ProxyFactoryConfigV2 { @Bean public OrderControllerV2 orderControllerV2(LogTrace logTrace){ OrderControllerV2 orderController = new OrderControllerV2(orderServiceV2(logTrace)); ProxyFactory proxyFactory = new ProxyFactory(orderController); p..
지금까지 학습한 프록시 팩토리를 사용해서 애플리케이션에 프록시를 만들어보자. 먼저 인터페이스가 있는 v1 애플리케이션에 LogTrace 기능을 프록시 팩토리를 통해서 프록시를 만들어 적용해보자. 1. Advice public class LogTraceAdvice implements MethodInterceptor { private final LogTrace logTrace; public LogTraceAdvice(LogTrace logTrace) { this.logTrace = logTrace; } @Override public Object invoke(MethodInvocation invocation) throws Throwable { TraceStatus status = null; try{ Metho..
어드바이저는 하나의 포인트컷과 하나의 어드바이스를 가지고 있다. 만약 여러 어드바이저를 하나의 target 에 적용하려면 어떻게 해야할까? 쉽게 이야기해서 하나의 target 에 여러 어드바이스를 적용하려면 어떻게 해야할까? 프록시를 여러 개 만들면 될까? 1. 예제 public class MultiAdvisorTest { @Test @DisplayName("여러 프록시") void multiAdvisorTest(){ //client -> proxy2(advisor2) -> proxy1(advisor1) -> target //프록시1 생성. ServiceInterface target = new ServiceImpl(); ProxyFactory proxyFactory1 = new ProxyFactory(t..
스프링은 우리가 필요한 포인트컷을 이미 대부분 제공한다. 이번에는 스프링이 제공하는 NameMatchMethodPointcut 를 사용해서 구현해보자 1. NameMatchMethodPointcut @Test @DisplayName("스프링이 제공하는 포인트컷") void advisorTest3(){ ServiceInterface target = new ServiceImpl(); ProxyFactory proxyFactory = new ProxyFactory(target); NameMatchMethodPointcut pointcut = new NameMatchMethodPointcut(); pointcut.setMappedName("save"); //save인 경우에만 true/ DefaultPointc..
save() 메서드에는 어드바이스 로직을 적용하지만, find() 메서드에는 어드바이스 로직을 적용하지 말자. 이런 기능에 특화되어서 제공되는 것이 바로 포인트컷이다. 1. Pointcut관련 인터페이스 - 스프링 public interface Pointcut { ClassFilter getClassFilter(); MethodMatcher getMethodMatcher(); } public interface ClassFilter { boolean matches(Class clazz); } public interface MethodMatcher { boolean matches(Method method, Class targetClass); //.. } 포인트컷은 크게 ClassFilter 와 MethodM..
어드바이저는 하나의 포인트컷과 하나의 어드바이스를 가지고 있다. 프록시 팩토리를 통해 프록시를 생성할 때 어드바이저를 제공하면 어디에 어떤 기능을 제공할 지 알 수 있다. 1. 예제코드 public class AdvisorTest { @Test void advisorTest1(){ ServiceInterface target = new ServiceImpl(); ProxyFactory proxyFactory = new ProxyFactory(target); DefaultPointcutAdvisor advisor = new DefaultPointcutAdvisor(Pointcut.TRUE, new TimeAdvice()); proxyFactory.addAdvisor(advisor); ServiceInterf..
1. Pointcut? Advice? Advisor? 포인트컷( Pointcut ) 어디에 부가 기능을 적용할지, 어디에 부가 기능을 적용하지 않을지 판단하는 필터링 로직이다. 주로 클래스와 메서드 이름으로 필터링 한다. 이름 그대로 어떤 포인트(Point)에 기능을 적용할지 하지 않을지 잘라서(cut) 구분하는 것이다. 어드바이스( Advice ) 이전에 본 것 처럼 프록시가 호출하는 부가 기능이다. 단순하게 프록시 로직이라 생각하면 된다. 어드바이저( Advisor ) 단순하게 하나의 포인트컷과 하나의 어드바이스를 가지고 있는 것이다. 어드바이저 = 포인트컷1 + 어드바이스1 정리하면 부가 기능 로직을 적용해야 하는데, 포인트컷으로 어디에? 적용할지 선택하고, 어드바이스로 어떤 로직을 적용할지 선택하..