본문 바로가기

Spring/spring AOP25

스프링 코어2 - 구체 클래스 기반 프록시 전 포스트에서는 인터페이스에 의존하는 클라이언트를 대상으로 프록시를 적용하였다. 그런데 아래와 같이 인터페이스가 없는 경우에는 어떻게 프록시를 적용할 수 있을까? @Slf4j public class ConcreteLogic { public String operation(){ log.info("Concrete Logic 실행"); return "data"; } } 이를 사용하는 Client는 아래와 같다. public class ConcreteClient { private ConcreteLogic concreteLogic; public ConcreteClient(ConcreteLogic concreteLogic) { this.concreteLogic = concreteLogic; } public void .. 2022. 1. 8.
스프링 코어2 - 인터페이스 기반 프록시 인터페이스와 그 구현제가 있는 Controller, Service, Repository에 프록시를 도입하여 로그 추적기 기능을 추가해보자. 프록시를 사용하면 기존의 코드는 전혀 수정하지 않고 로그 추적기 기능을 사용할 수 있다. 현재 V1 App의 클래스 의존관계는 다음과 같다. (각 계층이 다음 계층의 인터페이스에 의존한다.) 런타임 시에는 다음과 같은 의존관계를 가지게 된다. 프록시를 사용하여 로그 추적 기능을 적용하기 위해서는 아래와 같이 해야한다. 위의 관계는 런타임 시에는 아래와 같이 될 것이다. 또한 어플리케이션 실행시점에 프록시를 사용하도록 의존 관계를 설정해주어야 한다. 이제 프록시 코드를 만들어보자. 각각의 Controller, Service, Repository의 프록시들을 만들어야 한.. 2022. 1. 8.
스프링 코어2 - 프록시 패턴과 데코레이터 패턴 기존에 템플릿 콜백 패턴을 적용하여 로그 추적기 부분과 주문 서비스 로직을 구분하였다. 하지만 Controller, Service, Repository에 템플릿의 콜백을 넘겨주는 코드가 여전히 존재하여 기존의 코드들을 수정해야 한다는 점이 아직 과제로 남아있었다. 하여 새로운 요구사항이 추가되었다. 요구사항 추가 • 원본 코드를 전혀 수정하지 않고, 로그 추적기를 적용해라. • 특정 메서드는 로그를 출력하지 않는 기능 - 보안상 일부는 로그를 출력하면 안된다. • 다음과 같은 다양한 케이스에 적용할 수 있어야 한다. - v1 인터페이스가 있는 구현 클래스에 적용 - v2 인터페이스가 없는 구체 클래스에 적용 - v3 컴포넌트 스캔 대상에 기능 적용 원본 코드를 수정하지 않고, 로그 추적기를 적용하기 위해.. 2022. 1. 6.
스프링 코어2 - 프록시 학습을 위한 프로젝트 만들기 프록시를 학습하기 위한 스프링 프로젝트의 의존성은 아래와 같다. plugins { id 'org.springframework.boot' version '2.5.5' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'hello' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-.. 2022. 1. 6.