⚡️관점 지향 프로그래밍(Aspect Oriented Programming, AOP)
스프링의 핵심기능인 IoC가 객체들의 결합도를 느슨하게 만들어 의존 관계를 쉽게 변경한다면
AOP는 반복되는 기능을 독립적으로 분리해, 재사용함으로써 응집도를 강하게 만드는 기능입니다.
AOP에서 부가적인 공통 코드들을 효율적으로 관리하는데 가장 중요한 핵심 개념은 관심 분리 입니다.
위 사진과 같이 메소드마다 공통으로 등장하는 코드들을 횡단 관심이라 하고,
사용자의 요청에 따라 실제로 수행되는 핵심 비즈니스 로직을 핵심 관심이라고 합니다.
두 관심 사항을 완벽하게 분리만 해낸다면 실제로 구현하는 메소드에는 비즈니스 로직만으로 구성할 수 있으므로
더욱 가독성 좋고 응집도가 높은 코드를 구성할 수 있습니다.
⚡️AOP 용어 정리
📌 조인포인트(JoinPoint)
조인포인트는 클라이언트가 호출하는 모든 비즈니스 메소드가 실행되고 있는 어느 한 시점입니다.
메소드 호출이나 필드 값 변경 등이 포함됩니다.
📌 포인트컷(Pointcut)
클라이언트가 호출하는 모든 비즈니스 메소드가 조인포인트라면, 포인트컷은 필터링된 조인포인트를 의미합니다.
수많은 비즈니스 메소드 중에서 원하는 특정 메소드에서만 횡단 관심에 해당하는 공통 기능을 수행시키기 위해
포인트컷을 이용하면 메소드가 포함된 클래스와 패키지, 메소드 시그니처까지 정밀하게 지정할 수 있습니다.
📌 어드바이스(Advice)
어드바이스는 횡단 관심에 해당하는 공통 기능의 코드를 의미하며, 독립된 클래스의 메소드로 작성됩니다.
어드바이스로 구현된 메소드가 언제 동작할지 스프링 설정파일을 통해 지정할 수 있습니다.
구체적인 동작 시점을 나타내는 Advice의 종류는 다음과 같습니다.
🔎 before
메소드가 실행되기 이전에 실행됩니다.
🔎 after
메소드의 종료 후 무조건 실행됩니다. (try-catch에서 finally와 같은 동작)
🔎 after-returning
메소드가 성공적으로 완료되고 리턴한 다음에 실행됩니다.
🔎 after-throwing
메소드 실행 중 예외가 발생하면 실행됩니다. (try-catch에서 catch와 같은 동작)
🔎 around
메소드 호출 자체를 가로채서 메소드 실행 전후에 처리할 로직을 삽입할 수 있습니다.
📌 위빙(Weaving)
위빙은 포인트컷으로 지정한 핵심 관심 메소드가 호출될 때,
어드바이스에 해당하는 횡단 관심 메소드가 삽입되는 과정을 의미합니다.
이 과정을 통해 메소드를 수정하지 않고도 횡단 관심에 해당하는 기능을 추가하거나 변경할 수 있다.
📌 에스펙트(Aspect)
에스펙트는 포인트컷과 어드바이스의 결합으로서,
어떤 포인트컷 메소드에 대해 어떤 어드바이스 메소드를 실행할지 결정합니다.
에스펙트 설정에 따라 AOP의 동작 방식이 결정되므로 AOP 용어 중 가장 중요한 개념이라 할 수 있습니다.
댓글