1.AOP(Aspect Oriented Programming)란?
AOP의 약자를 풀어쓰면 관점 지향 프로그래밍이다. 관점 지향 프로그래밍? 어려운 말이다. 간단히 말하면 관점을 나눠서 프로그램을 짜는 방식이라고 말할 수 있다. AOP는 다른 말로 부가기능(advice)을 동적으로 추가해주는 기술이다. 이 말도 어렵다 부가기능은 무엇이고 동적이란 말은 무엇인가? 부가기능은 핵심기능의 반댓말이다. 그리고 동적이란 말은 실행중이라는 뜻이다. 즉 핵심기능이 아닌 기능을 실행중에 추가하는 기술이다. 하지만 그래도 어렵다. 마지막으로 한 줄로 AOP를 요약하면 메서드의 시작 또는 끝에 자동으로 코드(advice)를 추가하는 기술이다. 코드를 통해 AOP의 개념을 조금 더 살펴보자.
2.공통 코드의 분리
MyClass 클래스의 각 메서드 시작과 끝에 '[before]{'와 '}[after]'를 추가한다고 가정해보자. 코드를 추가하면 오른쪽 같이 작성되는데 보는 바와같이 코드가 중복된다. 코드도 낭비되고 보기에도 복잡해진다. 효율적으로 하기위해 두개의 관심사 ('[before]{'와 '}[after]')를 분리해보자.
관심사 즉, 핵심기능과 부가기능을 중심으로 코드를 분리하니 훨씬 보기도 편하고 코드가 간편해졌다. 이처럼 AOP 관점지향형 프로그래밍은 한곳에 몰려있는 복잡한 코드를 부가기능, 핵심기능으로 나눠 분리한다. 이를 통해 코드를 보다 간편하게하고 보기 쉽게한다.
3.자동 코드추가의 위치
자동 코드의 추가를 하는 위치는 코드의 본문 내용이 아닌 앞(Before)와 뒤 (After)다. 앞뒤 모두(Around) 사용할 수도 있다
4.AOP와 관련 용어
용어 | 설명 |
target | advice가 추가될 객체 |
advice | target에 동적으로 추가될 부가 기능(코드) |
join point | advice가 추가(join)될 대상(메서드) |
pointcut | join point들을 정의한 패턴 예) execution(*com.fastcampus.*.*(...)) |
proxy | target에 advice가 동적으로 추가되어 생성된 객체 |
weaving | target에 advice를 추가해서 proxy 를 생성하는 것 |
- Advice의 종류
종류 | 애너테이션 | 설명 |
around advice | @Around | 메서드의 시작과 끝 부분에 추가되는 부가기능 |
before advice | @Before | 메서드의 시작 부분에 추가되는 부가 기능 |
after advice | @After | 메서드의 끝 부분에 추가되는 부가 기능 |
after returning | @AfterReturning | 예외가 발생하지 않았을 때, 실행되는 부가 기능 |
after throwing | @AfterThrowing | 예외가 발생했을 때, 실행되는 부가 기능 |
- pointcut expression
advice가 추가될 메서드를 지정하기 위한 패턴이다.
출처:스프링의 정석 : 남궁성과 끝까지 간다(패스트 캠퍼스 강좌)
'Spring > Spring DI와 AOP' 카테고리의 다른 글
[Spring DI와 AOP]@Transactional (0) | 2022.07.30 |
---|---|
[Spring DI와 AOP] Transaction, Commit, Rollback (0) | 2022.03.14 |
[Spring DI와 AOP] DAO (0) | 2022.03.12 |
[Spring DI] BeanFactory / ApplicationContext 와 IoC / DI (0) | 2022.02.28 |