개발 창고/Web

[Spring] AOP란 무엇일까?

로이제로 2020. 7. 23. 14:28
반응형

보통 스프링을 이용하다 보면 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가 됨.

반응형