개발강의정리/Spring

[스프링 프레임워크 핵심 기술] 6-2. 스프링 AOP-프록시 기반 AOP

nineDeveloper 2019. 10. 6.
728x90

스프링 프레임워크 핵심 기술

포스팅 참조 정보

GitHub

공부한 내용은 GitHub에 공부용 Organizations에 정리 하고 있습니다

해당 포스팅에 대한 내용의 GitHub 주소

실습 내용이나 자세한 소스코드는 GitHub에 있습니다
포스팅 내용은 간략하게 추린 핵심 내용만 포스팅되어 있습니다

https://github.com/freespringlecture/spring-core-tech/tree/chap06-02-01-proxyaop

 

freespringlecture/spring-core-tech

백기선님의 스프링 프레임워크 핵심 기술 강의 내용 정리. Contribute to freespringlecture/spring-core-tech development by creating an account on GitHub.

github.com

https://github.com/freespringlecture/spring-core-tech/tree/chap06-02-02-proxyaop

 

freespringlecture/spring-core-tech

백기선님의 스프링 프레임워크 핵심 기술 강의 내용 정리. Contribute to freespringlecture/spring-core-tech development by creating an account on GitHub.

github.com

해당 포스팅 참고 인프런 강의

https://www.inflearn.com/course/spring-framework_core/dashboard

 

스프링 프레임워크 핵심 기술 - 인프런

이번 강좌는 스프링 부트를 사용하며 스프링 핵심 기술을 학습합니다 따라서 스프링 부트 기반의 프로젝트를 사용하고 있는 개발자 또는 학생에게 유용한 스프링 강좌입니다. 초급 웹 개발 Java Spring 온라인 강의

www.inflearn.com

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의 요청을 처리함

06-03

  • 기존 코드를 건드리지 않고 성능을 측정해 보자. (프록시 패턴으로)

단계별 적용

  • 원래 클래스나 클라이언트를 건드리지 않고 부가 기능을 추가 할 수 있었음

중복 코드가 생기고, Proxy클래스를 만드는데 드는 비용과 수고, 다른 클래스에도 적용을 해야된다면?
모든 클래스에 Proxy클래스를 만들고 중복 코드를 심어야 됨

문제점

  • 매번 프록시 클래스를 작성해야 하는가?
  • 여러 클래스 여러 메소드에 적용하려면?
  • 객체들 관계도 복잡하고…

그래서 등장한 것이 스프링 AOP

  • 스프링 IoC 컨테이너가 제공하는 기반 시설과 Dynamic 프록시를 사용하여 여러 복잡한 문제 해결
  • 동적 프록시: 동적으로 프록시 객체 생성하는 방법

어떤 객체를 감싸는 Proxy객체를 런타임에 만드는 방법

  • 자바가 제공하는 방법은 인터페이스 기반 프록시 생성
  • CGlib은 클래스 기반 프록시도 지원
    • 스프링 IoC: 기존 빈을 대체하는 동적 프록시 빈을 만들어 등록 시켜준다
      BeanPostProcessor: 어떠한 빈이 등록되면 그 빈을 가공할 수 있는
      LifeCycle Interface 중 하나로 새로운 bean instance를 조작할 수 있는 기능을 제공
      어떠한 빈이 등록이 되면 스프링이 AbstractAutoProxyCreator라는 BeanPostProcessor로 그 빈을 감싸는
      Proxy빈을 만들어서 그 빈을 원래의 빈 대신에 등록을 해줌
      AbstractAutoProxyCreator: BeanPostProcessor의 구현체
  • 클라이언트 코드 변경 없음
  • AbstractAutoProxyCreator​ implements ​BeanPostProcessor
728x90

댓글

💲 추천 글