본문 바로가기

Spring64

스프링이 지원하는 프록시 프록시 팩토리 문제점 : 인터페이스가 있는 경우에는 JDK 동적 프록시가 제공하는 (InvocationHandler), 인터페이스가 없는 경우에는 CGLIB가 제공하는 (MethodInterceptor)를 각각 만들어서 관리해야할까? 해결 방안 : 동적 프록시를 통합해서 만들어주는 ( ProxyFactory ) 스프링은 부가 기능을 적용할 때 Advice 라는 새로운 개념을 도입했다. 결과적으로 InvocationHandler 나 MethodInterceptor 는 Advice 를 호출하게 된다. 프록시 팩토리는 Advice 를 호출하는 전용 InvocationHandler , MethodInterceptor 를 내부에서 사용한다. 특정 로직을 체크해서 프록시를 적용할지 말지 결정하는 Pointcut 개.. 2023. 8. 17.
동적 프록시 기술 리플렉션 → 클래스나 메서드의 메타정보를 동적으로 획득하고, 코드도 동적으로 호출할 수 있다. ReflectionTest @Slf4j public class ReflectionTest { @Test void reflection0() { Hello target = new Hello(); //공통 로직1 시작 log.info("start"); String result1 = target.callA(); //호출하는 메서드가 다름 log.info("result={}", result1); //공통 로직1 종료 //공통 로직2 시작 log.info("start"); String result2 = target.callB(); //호출하는 메서드가 다름 log.info("result={}", result2); //공통.. 2023. 8. 16.
프록시 패턴과 데코레이터 패턴 요구사항 원본 코드를 전혀 수정하지 않고, 로그 추적기를 적용해라. 특정 메서드는 로그를 출력하지 않는 기능 다음과 같은 다양한 케이스에 적용할 수 있어야 한다. v1 - 인터페이스가 있는 구현 클래스에 적용 v2 - 인터페이스가 없는 구체 클래스에 적용 v3 - 컴포넌트 스캔 대상에 기능 적용 해결 방안 : 프록시(Proxy) 프록시, 프록시 패턴, 데코레이터 패턴 - 소개 ★ 대리자 프록시 도입 접근 제어, 캐싱 부가 기능 추가 프록시 체인 → 클라이언트는 서버에게 요청을 한 것인지, 프록시에게 요청을 한 것인지 조차 몰라야 한다. ★ 런타임(애플리케이션 실행 시점)에 클라이언트 객체에 DI를 사용해서 Client -> Server 에서 Client -> Proxy 로 객체 의존관계를 변경해도 클라이.. 2023. 8. 14.
템플릿 메서드 패턴과 콜백 패턴 로그 추적기 도입 후 //OrderControllerV3 코드 @GetMapping("/v3/request") public String request(String itemId) { TraceStatus status = null; try { status = trace.begin("OrderController.request()"); orderService.orderItem(itemId); //핵심 기능 trace.end(status); } catch (Exception e) { trace.exception(status, e); throw e; } return "ok"; } //OrderServiceV3 코드 public void orderItem(String itemId) { TraceStatus statu.. 2023. 8. 13.