Spring AOP
- 스프링에서 제공하는 스프링 AOP는 프록시 기반의 AOP 구현체이다.
- 프록시 객체를 사용하는 것은 접근 제어 및 부가 기능을 추가하기 위해서이다.
프록시란?
프록시(Proxy)는 대리자 라는 뜻으로, 클라이언트가 사용하려고 하는 실제 대상인 것처럼 위장해서 클라이언트의 요청을 받아주는 역할을 합니다.
프록시는 실제 대상인 것처럼 위장함으로서 이를 사용하는 클라이언트는 구체 클래스를 알 필요가 없어집니다.
또한 프록시는 클라이언트의 요청을 받아서 원래 요청 대상에게 바로 넘겨주는 게 아닌, 다양한 부가기능을 지원할 수 있습니다.
여기서 원래 요청하려는 대상, 즉 최종적으로 요청을 위임받아 처리하는 실제 오브젝트를 타깃이라고 합니다.
프록시 패턴이란?
- 프록시 객체가 객체를 감싸서 client의 요청을 처리하게 하는 패턴이다.
- 접근 제어, 부가 기능 추가 등의 이유로 사용한다.
- 원래 객체와 같은 interface를 구현해줘야 하고 객체를 주입받아 interface의 메소드들을 위임받아 사용하고 코드를 추가 해 준다.
이렇게 해주면 원래 코드에 손을 쓰지 않고도 기능을 추가 할 수는 있지만 , 프록시 객체에 중복코드가 발생할 수 있고 다른 클래스에서도 동일한 기능을 사용하기 위해 매번 코딩을 해줘야하는 부분에서 효율적이지 못하다.
이를 해결해주는게 스프링 AOP로 런타임 시 동적으로 프록시 객체를 만들어 준다.
Spring AOP
Spring AOP는 Proxy를 기반으로 한 Runtime Weaving 방식이다
- 프록시 패턴 기반의 AOP 구현체
- 스프링 빈에만 AOP를 적용 가능
- 메소드 조인포인트만 제공
- AOP적용 전에는 DispatcherServlet 에서 Controller로 요청이 넘어갔지만
- AOP적용 후에는 요청을 중간에 낚아 챈다
- AOP는 DispatcherServlet와 Controller 사이에서 실행 됨
대표적인 스프링 AOP 예제
- @Transactional : AOP 기반으로 만들어졌다.
원래 쿼리를 수행하기전에, setAutoCommit = false
쿼리 수행 후 commit or rollback 코드를 넣어준다.
참고
https://velog.io/@max9106/Spring-%ED%94%84%EB%A1%9D%EC%8B%9C-AOP-xwk5zy57ee
https://n1tjrgns.tistory.com/261