Junhan0037/blog-code

AOP란?


Spring의 핵심 개념중 하나인 DI가 애플리케이션 모듈들 간의 결합도를 낮춰준다면, AOP는 애플리케이션 전체에 걸쳐 사용되는 기능을 재사용하도록 지원하는 것입니다.

AOP (Aspect-Oriented Programming) 란 단어를 번역하면 관점(관심) 지향 프로그래밍으로 됩니다.

이 관점(관심)이란 단어가 잘 와닿지 않아 AOP를 이해하는데 있어 더 어려움을 일으킨다고 생각하였습니다.

쉽게 얘기하면 프로젝트 구조를 바라 보는 관점을 바꿔보자는 이야기입니다.

리는 보통 제 3자의 관점에서 바라보자 라는 이야기를 합니다.

즉, 대상을 바라보는 방향을 바꿔보자라는 이야기입니다.

각각의 Service는 핵심기능에서 바라보았을때는 Board, User, XXX 등 공통된 요소가 없습니다.

이런 관점에서는 각각의 Service는 각자 코드를 구현하고 있습니다. 하지만, 이 관점을 돌려서 부가기능 이란 관점에서 바라보면 상황이 달라집니다.

부가기능의 관점에서 바라보면 각각의 Service는 수행시간 측정을 나타내는 before라는 메소드와 after라는 메소드가 공통되는 것을 알 수 있습니다.

AOP는 여기서부터 시작합니다.

기존에 OOP에서 바라보던 관점을 다르게 하여 부가기능적인 측면에서 보았을때 공통된 요소를 추출하자는 것입니다. 이때 가로(횡단) 영역의 공통된 부분을 잘라냈다고 하여, AOP를 크로스 컷팅(Cross-Cutting) 이라고 불리기도 합니다.