본문 바로가기
spring

[spring] AOP

by 콧등치기국수 2021. 10. 15.

1. AOP (Aspect Object Programming)

  • 관점 지향 프로그래밍
  • 일반적으로 사용하는 클래스(Service, Dao 등) 에서 중복되는 공통 코드 부분(commit, rollback, log 출력처리, session close처리) 을 별도의 영역으로 분리해 내고, 코드(service, dao 의 메소드)가 실행되기 전이나 이 후의 시점에 해당 코드를 붙여 넣음으로써
  • 소스코드의 중복을 줄이고, 필요할 때마다 가져다 쓸 수 있게 객체화하는 기술
  • 객체지향 프로그래밍(OOP)를 한 단계 발전 시킨 기술

횡단 관점 : 중복되는 코드

1-1. AOP 구조

  1. 사용자가 '회원가입'요청을 한다.
  2. Target Object가 처리하는 클래스
    1. Service, Dao클래스라고 생각하면 된다.
  3. AOP가 Proxy를 만든다.
    1. 실제 target이 실행해야 할 내용을 가져다 놓고, Proxy 안에서 설정된 AOP를 Advice가 설정해놓은 정보를 이용해서 어떤 클래스의 메소드가 실행되기 전에, 실행되고 나서 ~가 구동되라 라는 설정을 AOP Proxy에서 target Object에서 Advice가 설정한 메소드를 찾아가서 그 코드를 copy해와서 proxy로 옮겨놓고, 중복되는 코드인 commit, rollback등을 위나 아래에 넣어서 대리자가 실행시키는 개념
    2. weaving : 끼워넣어서 실행되게 하는 것
    3. joinpoint : 타겟 객체에 생성시점, 메소드 호출시점, 예외발생시점AOP가 Proxy를 만든다. (proxy : 대리자

 

1-2. AOP 핵심용어

  • PointCut : 실제 Advice가 어떤 클래스의 어떤 메소드가 실행될때 구동되게 하는 부분
  • Weaving : 기본적으로 spring은 런타임시 위빙되고 이 때, proxy를 생성해서 사용한다.
  • proxy : advice가 적용된 후 생성되는 객체, 대리자 역할
  • TargetObject : Advice를 삽입할 대상 객체 (Service, Dao, Controller)

 

2. ASPECT (Advice + PointCut)

  • 부가기능을 정의한 코드인 Advice와 어드바이스를 어디에 적용할지를 결정하는 PointCut을 합친 개념이다.
  • Aspect라는 클래스 안에 PointCut을 설정한다.
  • 어느 클래스에 어느 시점에서 무엇을 구동시킬지에 대한 메소드가 Advice이다. Advice에는 끼워넣을 내용에 대한 코드가 작성되는 메소드이다.
  • PointCut이라는 설정은 타겟이 무엇이고, 타겟 안에 무슨 메서드가 실행되기 전인지, 실행되고 나서인지, 리턴이 되는지, 예외가 발생한 건지, 실행전과 후 어떤 기간인지 설정한다.
  • Pointcut이 설정한 위치에 Advice가 weaving이 된다.

 

3. AOP 구조 정리

1) 기존

주요코드 안에서 부가코드를 호출해서 사용했다.

 

2) AOP

  • 주요코드, 핵심로직이 되는 코드는 따로 분리하고, 중복되는 부가코드도 따로 분리하는 대신 pointCut설정에 의해서 자동으로 부가코드(=Adivce) 가 주요코드에 weaving이 되어서 구동되도록 설정해 놓는다.
  • Aspect로 설정해두면 Advice가 설정된 대로 실행된다.

 

4. Spring AOP의 특징

1. Spring은 프록시 기반 AOP를 지원한다. 

spring은 대상 객체(Target Object)에 대한 프록시를 만들어 제공하며, 타겟을 감싸는 프록시는 서버 Runtime 시에 생성된다.

즉 Target Object를 복사해서 프록시를 생성한다.

이렇게 생성된 프록시는 대상 객체를 호출할 때 먼저 호출되어 advice의 로직을 처리 후 대상객체를 호출한다.

2. Proxy는 대상 객체의 호출을 가로챈다. (Intercept)

타겟 객체에 대한 호출을 가로챈 다음 advice의 부가 기능 로직을 수행하고 난 후에 타겟의 핵심기능 로직을 호출하거나(전처리 advice) 타겟의 핵심기능 로직 메서드를 호출한 후에 advice를 수행한다.(후처리 advice)

 

 

5. Spring AOP의 구현 방식

5-1. XML 기반의 AOP 네임스페이스를 통한 AOP구현

  • 부가 기능을 제공하는 Advice 클래스를 작성한다.
  • XML 설정 ㅠ파일에 <aop:config> 를 이용해서 aspect를 설정한다.
  • 즉 advice와 pointcut을 설정함

5-2. @Aspect 어노테이션을 이용한 AOP 구현

  • @Aspect 어노테이션을 이용해서 부가기능을 제공하는 Aspect 클래스를 작성한다.
  • 이때 Aspect 클래스는 advice를 구현하는 메서드와 pointcut을 포함한다.
  • XML 설정 파일에 <aop:aspectj-autoproxy/>를 설정한다.

 

 

 

출처 : kh정보교육원 교육자료

 

 

 

 

 

'spring' 카테고리의 다른 글

[spring] DispatcherServlet  (0) 2021.10.23
[spring] Context란?  (0) 2021.10.20
[spring] annotation 이용한 DI  (0) 2021.10.20
[spring] 느슨한 결합력과 인터페이스(DI 이해에 도움)  (0) 2021.10.15
[spring] DI, IOC란?  (0) 2021.10.14