일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Thymeleaf
- Greedy
- 백준
- spring
- AOP
- http
- db
- Proxy
- kotlin
- QueryDSL
- Spring Boot
- 스프링 핵심 원리
- jpa
- pointcut
- transaction
- springdatajpa
- JDBC
- Servlet
- 인프런
- JPQL
- Android
- 그리디
- 스프링
- 스프링 핵심 기능
- 알고리즘
- 자바
- java
- Exception
- 김영한
- SpringBoot
- Today
- Total
목록프록시 (6)
개발자되기 프로젝트
1. 스프링은 프록시 방식의 AOP를 사용한다. 따라서 AOP를 적용하려면 항상 프록시를 통해서 대상 객체(Target)을 호출해야 한다. 이렇게 해야 프록시에서 먼저 어드바이스를 호출하고, 이후에 대상 객체를 호출한다. 만약 프록시를 거치지 않고 대상 객체를 직접 호출하게 되면 AOP가 적용되지 않고, 어드바이스도 호출되지 않는다. 2. AOP를 적용하면 스프링은 대상 객체 대신에 프록시를 스프링 빈으로 등록한다. 따라서 스프링은 의존관계 주입시에 항상 프록시 객체를 주입한다. 프록시 객체가 주입되기 때문에 대상 객체를 직접 호출하는 문제는 일반적으로 발생하지 않는다. 하지만 대상 객체의 내부에서 메서드 호출이 발생하면 프록시를 거치지 않고 대상 객체를 직접 호출하는 문제가 발생한다. 3. 내부 호출이..
1. Pointcut? Advice? Advisor? 포인트컷( Pointcut ) 어디에 부가 기능을 적용할지, 어디에 부가 기능을 적용하지 않을지 판단하는 필터링 로직이다. 주로 클래스와 메서드 이름으로 필터링 한다. 이름 그대로 어떤 포인트(Point)에 기능을 적용할지 하지 않을지 잘라서(cut) 구분하는 것이다. 어드바이스( Advice ) 이전에 본 것 처럼 프록시가 호출하는 부가 기능이다. 단순하게 프록시 로직이라 생각하면 된다. 어드바이저( Advisor ) 단순하게 하나의 포인트컷과 하나의 어드바이스를 가지고 있는 것이다. 어드바이저 = 포인트컷1 + 어드바이스1 정리하면 부가 기능 로직을 적용해야 하는데, 포인트컷으로 어디에? 적용할지 선택하고, 어드바이스로 어떤 로직을 적용할지 선택하..
특정 조건을 만족할 때 만 프록시가 동작하도록 하자. 1. LogTraceFilterHandler public class LogTraceFilterHandler implements InvocationHandler { private final Object target; private final LogTrace logTrace; private final String[] patterns; public LogTraceFilterHandler(Object target, LogTrace logTrace, String[] patterns) { this.target = target; this.logTrace = logTrace; this.patterns = patterns; } @Override public Objec..
인터페이스 없이 구체클래스를 기반으로 프록시를 적용할 수 있을까?? 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..