본문 바로가기

Back-End/Spring

AOP란

비즈니스 로직(모듈)은 가로로 배치하고

공통으로 적용시킬 보안, 로깅, DB처리 로직은 세로로 관통하는 모습이다.

AOP의 구조와 용어정리

  • Aspect : AOP에서 관점이라 부르며 여러 객체에 공통으로 적용되는 기능을 담당
  • Advice : Aspect를 적용할 조건을 담당. 보안기능이 어떤 메소드에 적용할지, 예외 발생 후 동작할 건지 조건을 걸어준다. ( 모듈자체 - What )
  • Pointcut : 공통기능을 어떤 모듈의 Joinpoint 통과할건지 위치를 지정해주는 역할
  • Joinpoint : 공통기능이 적용 가능한 포인트들
    1. 메서드 실행 전 ( before )
    2. 메서드 실행 후 ( after )
    3. 반환된 후 ( afterReturning )
    4. 예외가 던져지는 시점 ( afterThrowing )
    5. 메서드 실행 전,후 ( around )
  • Target: 여러개의 Joinpoint 중 공통기능이 적용되는 포인트를 target이라 함
  • Proxy : 공통기능 절차가 다 적용되면 Proxy라는 객체가 나옴. Advice(적용할 조건) + Target(공통기능이 적용된 포인트) 로 구성되어 있음

 

예제 - DAO 실행시간 측정 예제

AOP를 사용하지 않으면 DAO 사용 시작 전,후에 실행시간 측정을 위한 코드가 들어갈 것이다.

  • 단일 책임원칙에 위배
  • 반복되는 코드

아래와 같이 수정을 해보자.

  • Joinpoint : @Around
  • repository 패키지에 있는 모든 클래스의 메서드에 대해서 위의 Advice가 실행됨

정리

  • AOP는 OOP만으로는 모듈화하기 힘든 부가기능을 효과적으로 모듈화하도록 도와주는 기술
  • 트랜잭션 속성 지정 방법
    1. @Transactional
    2. 포인트컷 표현식과 메소드 이름 패턴