보통 스프링을 이용하다 보면 AOP라는 용어를 가끔 듣곤 할 겁니다. AOP?Aspect Oriented Programming?관점지향??
하지만 개발자 관점에서는 이게 확 와 닿지 않는 경우가 많죠
딱 한 줄로 요약하자면, AOP는 어떤 이벤트에 대해 내 기능들이 사전 또는 사후에 자동으로 뭔가 해주기를 바라는 겁니다.
예를 들어 이메일을 예로 들어보면, 내가 글을 쓰는데 앞에는 항상 "OO님 안녕하세요" 끝부분에는 "감사합니다. OO드림"
같은 문장을 매일 쓴다는 건 개발자에게도 반복 업무이고 가끔 또 오타의 가능성을 배제할 수 없죠
이때, '회사 직원들에게 쓸 때는 이게 자동으로 들어갔으면 좋겠다.'를 생각하는 것처럼 (개발자들은 보통 게으릅니다. 때문에 본인의 일을 누군가 자동으로 해주길 바라곤 하죠.) 내가 getData 또는 setData라는 메서드를 만들 때, 앞뒤로 이 메서드들이 수행되는 시간을 로깅하거나, 또는 해당 메서드가 데이터베이스에 접근하는동안 한 개의 트랜잭션에서 처리되었으면 할 때, 우리는 AOP라는 것을 활용할 수 있는 것입니다.
주요개념
Aspect: 흩어져있는 관심사의 모듈화
Target: Aspect를 적용할 대상 (Class, Method, 등등)
Advice: 적용할 대상에 대해서 수행할 기능들의 집합
JointPoint: Advice가 적용되는 Event 시점(ex. 메서드 호출 이전, 메서드 호출 이후 등등)
PointCut: JointPoint의 상세 스펙 정의
Advice의 종류
- beforeAdvice : 사전처리 method
- after : 사후 처리 method
- after-throwing : 예외 처리 method
- after-returing : 반환 처리 method 정의
- AroundAdvice : 해당 pointCut 매서드가 호출되기 전에 인터셉터되고, pjp.proceed(); 만나는 순간, 호출된 매서드가 실행됨. 이후, 다시 남은 aroundLog가 실행이 된 이후에, return obj가 됨.
'개발 창고 > Web' 카테고리의 다른 글
[MyBATIS] Primary Key를 Insert하기 위한 SelectKey (0) | 2020.08.05 |
---|---|
[Spring] 프로그램의 로깅을 위한 기술 Log4j (0) | 2020.08.03 |
[Javascript] 숫자 한글로 표기하기 (2) | 2020.07.26 |
[jQuery] 날짜 선택을 좀 더 쉽게 Datepicker (0) | 2020.07.26 |
[jQuery] Lazy Load 사용하기 (0) | 2020.07.23 |