10분 테코톡

[10분 테코톡] Spring AOP

그릿GRIT 2021. 6. 8. 21:28
728x90

서비스에서 필요한 내용은 비즈니스 로직이라고 불리는 핵심기능만 수행하면 된다.

그이외에 시간을 재거나 권한을 체크한다거나 transaction을 거는 것은 모두 인프라 로직이라 불린다.

 

인프라 로직

  • 인프라 로직 : 성능검사, 로깅, 성능검사, 권한체크
  • 인프라 로직은 애플리케이션 전 영역에서 나타날 수 있다.
  • 그러다보니 중복코드를 만들어낼 가능성 때문에 유지 보수가 힘들어진다.
  • 비지니스 로직과 함께 있으면 비지니스 로직을 이해하기 어려워진다.
  • 횡단으로 나타나기에 횡단 관심사라고도 부른다.

 

AOP

  • Aspect-Oriented Programming 관점지향 프로그래밍
  • 횡단 관심에 따라 프로그래밍한다.
  • AOP는 OOP와 같은 패러다임이다.
  • AOP는 OOP를 프로그램구조에 대한 다른 생각의 방식을 제공함으로써 보완하고있다.
  • 각 언어마다 AOP의 구현체가 있다. 자바는 AspectJ를 사용한다.

AOP용어

  • 부가기능은 횡단에 관심을 갖고 있기 때문에 이러한 질문을 만나게 된다.

-Target

  • 어떤 대상에 부가기능을 부여할 것인가

-Advice

  • 어떤 부가기능? before, afterRunning, afterThrowing, After, Around

-Join point

  • 어디에 적용할 것인가? 메서드, 필드, 객체, 생성자 등 여러 상황에서 부가기능을 사용할 수 있으나 Spring AOP에는 메서드가 실행될 때만으로 한정하고 있다.

-Point cut

  • 실제 advice가 적용될 지점, Spring AOP에서는 Advice가 적용될 메서드를 선정.

 

AOP의 구현방법

*Spring AOP가 아니라 AOP의 전체적인 구현방법을 말함*

1. 컴파일

  • java를 calss로 컴파일 할때 해당하는 Asepct를 끼워넣는다.

2. 클래스 로드시

  • 컴파일 완료되고 메모리상에 올릴때 그때 AOP를 적용하는 방식이다.

3. 프록시 패턴

  • 스프링 AOP에서 사용하는 방식, 특정 타겟 Class를 부가기능을 제공하는 프록시로 감싸서 실행하는 방식이다.

 

Spring AOP와 AspectJ의 차이점

 

  Spring AOP AspectJ
목표 간단한 AOP기능 제공 완벽한 AOP 기능 제공
join Point 메서드 레벨만 지원 생성자, 필드, 메서드 등 다양한 지원
weaving 런타임시에만 가능 런타임은 제공하지 않음. compile-time, post-compile, load-time제공
대상 Spring Container가 관리하는 Bean에만 가능 모든 Java Object에 가능

참고 : https://youtu.be/Hm0w_9ngDpM