일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JDBC
- QueryDSL
- SpringBoot
- springdatajpa
- Exception
- transaction
- 백준
- Thymeleaf
- 그리디
- spring
- http
- 스프링
- db
- jpa
- Spring Boot
- 인프런
- AOP
- Greedy
- 자바
- 알고리즘
- JPQL
- Android
- kotlin
- 스프링 핵심 원리
- 김영한
- Proxy
- Servlet
- java
- pointcut
- 스프링 핵심 기능
- Today
- Total
목록Proxy (14)
개발자되기 프로젝트
스프링은 우리가 필요한 포인트컷을 이미 대부분 제공한다. 이번에는 스프링이 제공하는 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..
1. Pointcut? Advice? Advisor? 포인트컷( Pointcut ) 어디에 부가 기능을 적용할지, 어디에 부가 기능을 적용하지 않을지 판단하는 필터링 로직이다. 주로 클래스와 메서드 이름으로 필터링 한다. 이름 그대로 어떤 포인트(Point)에 기능을 적용할지 하지 않을지 잘라서(cut) 구분하는 것이다. 어드바이스( Advice ) 이전에 본 것 처럼 프록시가 호출하는 부가 기능이다. 단순하게 프록시 로직이라 생각하면 된다. 어드바이저( Advisor ) 단순하게 하나의 포인트컷과 하나의 어드바이스를 가지고 있는 것이다. 어드바이저 = 포인트컷1 + 어드바이스1 정리하면 부가 기능 로직을 적용해야 하는데, 포인트컷으로 어디에? 적용할지 선택하고, 어드바이스로 어떤 로직을 적용할지 선택하..
1. 구체 클래스만 있는 경우 @Test @DisplayName("구체클래스만 있으면 CGLIB 사용") void concreteProxy(){ ConcreteService target = new ConcreteService(); ProxyFactory proxyFactory = new ProxyFactory(target); proxyFactory.addAdvice(new TimeAdvice()); ConcreteService proxy = (ConcreteService) proxyFactory.getProxy(); log.info("targetClass={}", target.getClass()); log.info("proxyClass={}", proxy.getClass()); proxy.call(); ..
인터페이스 없이 구체클래스를 기반으로 프록시를 적용할 수 있을까?? 1. ConcreteLogic, ConcreteClient @Slf4j public class ConcreteLogic { public String operation(){ log.info("ConcreteLogic 실행"); return "data"; } } @Slf4j public class ConcreteClient { private ConcreteLogic concreteLogic; public ConcreteClient(ConcreteLogic concreteLogic) { this.concreteLogic = concreteLogic; } public void execute(){ concreteLogic.operation(); ..
낭비를 없애기 - Proxy Pattern 1.Proxy Pattern 객체에 대한 접근을 제어하기 위해 대리자를 둔다. 2. 의도와 동기 어떤 객체가 생성에 초기화 비용이 많이 들거나 복잡한 경우 간단한 처리는 대리자를 통해 하게된다. 실제적으로 bsh-developer.tistory.com Decorator 1. Decorator Pattern 장식과 실제 내용물을 동일시 객체에 동적으로 책임을 추가 2. 의도 (Intent)와 동기(Motivation) 상속을 사용하지 않고 기능의 유연한 확장이 가능한 패턴 객체에 동적으로 새로운 서 bsh-developer.tistory.com 1. 클라이언트와 서버 클라이언트( Client )와 서버( Server )라고 하면 개발자들은 보통 서버 컴퓨터를 생각..
1. Member를 조회할 때 Team도 함께 조회해아 하나..?? 2. 프록시 기초 JPA는 em.find()외에도 em.getReference()를 제공 em.find() vs em.getReference() en.find() : 데이터베이스를 통해서 실제 엔티티 객체 조회 em.getReference(): 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회. DB에 쿼리가 안나가는데 객체가 조회가 됨! Proxy는 진짜 객체와 껍데이는 똑같은데, 안이 텅 비었음. 내부에 target이 있는데 진짜 레퍼런스를 가르킴. em.getReference() 하는 시점에 select SQL 안나감. Member findMember = em.getReference(Member.class, member.g..