[Spring] AOP

Jeon817·2023년 4월 26일

Spring

목록 보기
8/11

[AOP 란?]

  • Aspect Oriented Programming 의 약자로, 관점 지향 프로그래밍이라고도 불리며, 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나눠보고 그 관점을 기준으로 각각 모듈화 하겠다는 의미입니다.

    • 핵심적인 관점: 개발자가 적용하고자 하는 핵심 비즈니스 로직.
    • 부가적인 관점: 핵심기능을 보조하는 기능 (DB연결(JDBC), 로깅, 파일 입출력 등)

AOP는 Aspect를 분리하여 핵심기능을 설계 및 구현할 때 객체지향적인 가치를 지킬 수 있도록 도와주는 것입니다.

  • Aspect : 기능적인 역할을 하는 모듈, 위의 예제에서 실제 비즈니스 로직을 제외한 기능적인 역할을 하는 코드들을 분리, 재사용 할 수 있도록한 모듈. Aspect는 Advice와 PointCut으로 이루어져 있습니다.

  • Advice : AOP에서 실제 실행되는 코드를 이야기합니다. 순수하게 실행되는 코드만을 뜻합니다.

  • Join Point : Advice를 실제로 실행 하고자 하는 위치를 뜻합니다. Spring AOP는 메서드에 한정됩니다. 즉, Spring AOP에서 모든 메서드는 Join Point가 될 수 있습니다.

  • PointCut : Advice가 적용될 JoinPoint를 선정하는 방법을 이야기합니다. 모든 Join Point에 Advice를 적용하는 것이 아닌 특정 Join Point에 Advice를 적용하는것이 일반적입니다. 따라서 Advice를 사용할 JoinPoint를 선정하는 방법이 PointCut입니다.

  • Target : Advice가 적용되어지는 기존 메서드, 클래스 등을 뜻합니다.

  • Proxy : 클라이언트와 타겟 사이에 투명하게 존재하며 부가기능을 제공하는
    오브젝트. DI를 통해 타겟 대신 클라이언트에게 주입되며 클라이언트의 메소드 호출을 대신 받아서 타겟에 위임하며 이 과정에서 부가기능을 부여한다.

[AOP 적용 방법]

  • 프록시 패턴(스프링 AOP가 사용하는 방법)

    ⇒ 공통 모듈을 프록시로 만들어서 DI 로 연결된 빈 사이에 적용해 Target의 메소드 호출 과정에 참여애 부가기능(공통 모듈)을 제공해준다. 그렇기의 JDK 와 Spring Container 외에 특별한 기술 및환경을 요구하지 않는다. Advice 가 구현하는 MethodInterceptor 인터페이스는 다이내믹 프록시의 InvocationHandler와 마찬가지로 프록시부터 메소드 요청정보를 전달받아 타깃 오브젝트의 메소드를 호출하는데, 이렇게 메소드를 호출하는 전/후로 부가기능(공통 모듈)을 제공할 수 있다. 이런식으로 독립적으로 개발한 부가기능 모듈을 다양한 타깃 오브젝트의 메소드에 다이내믹하게 적용해주기 위해 가장 중요한 역할을 맡고 있는게 프록시고, 스프링 AOP는 프록시 방식의 AOP라 할 수 있다.

[Spring AOP 동작 흐름]

  • 개념적 이해
  • 스프링 실제 동작

  • AOP 적용 전 전체 그림

  • AOP 적용 후 전체 그림



[참고]https://catsbi.oopy.io/fb62f86a-44d2-48e7-bb9d-8b937577c86c
[참고]https://sabarada.tistory.com/94

0개의 댓글