[Spring] 프록시란?

상트리버·2022년 12월 14일
0

Spring 이론

목록 보기
20/23
post-custom-banner

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

post-custom-banner

0개의 댓글