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