ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 20221108 TIL AOP에 대해 알아보다
    TIL 2022. 11. 8. 21:51

     

    스프링을 공부하면서 AOP에 대한 내용이 나왔는데,

    이해가 쉽게 않는 개념이었다.

    그래서 며칠 동안 계속 조금씩 개념을 이해하려고 자료들을 찾아봤고,

    오늘 드디어 AOP와 조금 친해지게 된 것 같다!

     

    위키백과에서 AOP(관점 지향 프로그래밍)를 검색하면 횡단 관심사의 분리를 허용해서

    모듈성을 증가시키기 위한 프로그래밍 패러다임이라고 나온다.

     

    먼저, 횡단 관심사라는 말이 어려운데,

    횡단 관심사는 예를 들면 어떤 특정 클래스에서만 사용하지 않고,

    많은 클래스들에서 공통적으로 사용하게 되는 부가적인 기능이라고 볼 수 있다.

    횡단 관심사로 많이 나오는 예시로 로그를 남기는 기능이 있다.

    로그를 남기는 기능은 많은 부분에서 사용해야 될 수 있는데,

    만약 그 기능을 각각 구현한다면 중복도 많아지고, 유지보수도 어려워질 것이다.

    하지만 로그를 남기는 기능을 따로 분리하면 중복도 제거되고,

    핵심적인 비즈니스 로직이라고 볼 수 없는 로그를 남기는 기능이 제거되어

    핵심적인 비즈니스 로직에만 집중해서 코드를 작성할 수 있게 된다.

    https://miro.medium.com/max/560/1*9Cn_8uBHWbGg9wAdKyW0fA.png

    여러 클래스에서 쓰이는 부가적인 기능을 분리해서 모듈로 만드는 방식을 관점 지향 프로그래밍이라고 할 수 있다.

    그리고 많은 부분에서 공통적으로 갖고 있는 관심사를 cross-cutting concerns라고 부른다.

     

    횡단 관심사에 대해 이해하면 아무것도 이해되지 않던 AOP와 조금 더 친해질 수 있다.

     

    AOP의 중요한 개념들에 대해 더 알아보자.

    Aspect는 여러 클래스들에 공통적으로 사용되는 부가적인 기능을 모듈화 한 것이다.

    Join point는 프로그램이 진행되는 중에 어떤 시점들을 나타내고,

    Advice는 특정 join point에 aspect에 의해 실행되는 부가적인 기능이다.

    그리고 pointcut은 advice를 적용할 시점을 나타낸다. 물론 그 시점은 Join point에 해당한다!

     

    어떤 개념을 이해할 때마다 느끼는 것이지만,

    개념을 이해하기 전까지는 너무 어렵게 느껴지다가도, 

    한 번 이해하고 나면 당연하게 받아들이게 되고, 어떤 부분이 어려웠는지 까먹게 되는 것 같다.

    그래서 모르는 개념을 이해해서 글로 정리를 한다는 게 그냥 이해만 하는 것보다 훨씬 훨씬 시간도 오래 걸리고 어렵지만,

    이런 흔적을 남겨두어야 나중에 나의 올챙이(혹은 알?!)적 시절을 돌아보면서 내가 얼마나 성장했는지를 느낄 수 있을 것 같다.

    내일은 오늘보다 당연하게 받아들이는 개념이 많아질 수 있도록 한 계단씩 올라가보자.

     

    참고 자료

    https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop-introduction-defn

    https://www.baeldung.com/spring-aop-annotation

     

    댓글

Designed by Tistory.