728x90
스프링 프레임워크 핵심 기술
포스팅 참조 정보
GitHub
공부한 내용은 GitHub에 공부용 Organizations에 정리 하고 있습니다
해당 포스팅에 대한 내용의 GitHub 주소
실습 내용이나 자세한 소스코드는 GitHub에 있습니다
포스팅 내용은 간략하게 추린 핵심 내용만 포스팅되어 있습니다
https://github.com/freespringlecture/spring-core-tech/tree/chap06-02-01-proxyaop
https://github.com/freespringlecture/spring-core-tech/tree/chap06-02-02-proxyaop
해당 포스팅 참고 인프런 강의
https://www.inflearn.com/course/spring-framework_core/dashboard
SpringBoot Version
- 실습 Version: 2.1.2.RELEASE
6-2. 스프링 AOP: 프록시 기반 AOP
스프링 AOP 특징
- 프록시 기반의 AOP 구현체
- 스프링 빈에만 AOP를 적용할 수 있다
- 모든 AOP 기능을 제공하는 것이 목적이 아니라, 스프링 IoC와 연동하여 엔터프라이즈
애플리케이션에서 가장 흔한 문제에 대한 해결책을 제공하는 것이 목적
프록시 패턴
- 왜?(기존 코드 변경없이) 접근 제어 또는 부가 기능 추가
Proxy패턴은 Interface(Subject)가 있고 Client는 Interface 타입으로 Proxy객체를 사용하게 됨
Proxy객체는 Target(Real Subject)객체를 참조하고 있음
Proxy객체가 Traget객체를 감싸서 실제 Client의 요청을 처리함
- 기존 코드를 건드리지 않고 성능을 측정해 보자. (프록시 패턴으로)
단계별 적용
- 원래 클래스나 클라이언트를 건드리지 않고 부가 기능을 추가 할 수 있었음
중복 코드가 생기고, Proxy클래스를 만드는데 드는 비용과 수고, 다른 클래스에도 적용을 해야된다면?
모든 클래스에 Proxy클래스를 만들고 중복 코드를 심어야 됨
문제점
- 매번 프록시 클래스를 작성해야 하는가?
- 여러 클래스 여러 메소드에 적용하려면?
- 객체들 관계도 복잡하고…
그래서 등장한 것이 스프링 AOP
- 스프링 IoC 컨테이너가 제공하는 기반 시설과 Dynamic 프록시를 사용하여 여러 복잡한 문제 해결
- 동적 프록시: 동적으로 프록시 객체 생성하는 방법
어떤 객체를 감싸는 Proxy객체를 런타임에 만드는 방법
- 자바가 제공하는 방법은 인터페이스 기반 프록시 생성
- CGlib은 클래스 기반 프록시도 지원
- 스프링 IoC: 기존 빈을 대체하는 동적 프록시 빈을 만들어 등록 시켜준다
BeanPostProcessor: 어떠한 빈이 등록되면 그 빈을 가공할 수 있는
LifeCycle Interface 중 하나로 새로운 bean instance를 조작할 수 있는 기능을 제공
어떠한 빈이 등록이 되면 스프링이 AbstractAutoProxyCreator라는 BeanPostProcessor로 그 빈을 감싸는
Proxy빈을 만들어서 그 빈을 원래의 빈 대신에 등록을 해줌
AbstractAutoProxyCreator: BeanPostProcessor의 구현체- 클라이언트 코드 변경 없음
- AbstractAutoProxyCreator implements BeanPostProcessor
728x90
'개발강의정리 > Spring' 카테고리의 다른 글
[스프링 프레임워크 핵심 기술] 7-1. Null-safety (0) | 2019.10.07 |
---|---|
[스프링 프레임워크 핵심 기술] 6-3. 스프링 AOP: @AOP (0) | 2019.10.07 |
[스프링 프레임워크 핵심 기술] 6-1. 스프링 AOP-개념 소개 (0) | 2019.10.06 |
[스프링 프레임워크 핵심 기술] 5-1. SpEL-스프링 Expression Language (0) | 2019.10.06 |
[스프링 프레임워크 핵심 기술] 4-2. 데이터 바인딩 추상화-Converter와 Formatter (0) | 2019.10.06 |
댓글