DI/PSA와 달리 이해하기 어려웠던 AOP는 복잡한 엔터프라이즈 애플리케이션에서 객체지향(OOP)만으로는 해결하기 어려운 '횡단 관심사(Cross-cutting Concerns)' 문제를 해결하기 위해 등장했습니다. 🧩
횡단 관심사는 인증, 인가, 로깅, 트랜잭션 등 여러 모듈에 걸쳐 반복적으로 나타나지만 캡슐화하기 어려운 부가 기능들로, 비즈니스 로직을 오염시키고 유지보수를 어렵게 만듭니다. 객체지향은 이러한 횡단 관심사 처리에 취약합니다. ✂️
AOP는 이러한 횡단 관심사를 핵심 비즈니스 로직으로부터 분리하여 코드의 응집도를 높이고 중복을 줄이며, 개발자가 핵심 로직에 더 집중할 수 있도록 돕습니다. 🎯
Spring AOP의 핵심 개념은 Aspect (AOP 적용 명시), Advice (언제 적용할지, 예: before, after, around), Join Point (메서드 실행 지점) 세 가지입니다. 이를 통해 스프링 환경에서 AOP를 쉽게 적용할 수 있습니다. ⚙️
AOP는 강력한 기술이지만, 모든 기능을 AOP로 구현하려 하면 코드의 가독성, 디버깅, 유지보수성을 해치게 됩니다. AOP는 오직 횡단 관심사 문제에만 적용해야 하며, 객체지향을 대체해서는 안 됩니다. ⚠️
어떤 기술이 좋아 보인다고 무조건적으로 사용하는 것보다, '무엇을 위해 이 기술을 사용할 것인가' 즉, 해결하고자 하는 본질적인 문제가 무엇인지에 집중하는 것이 중요합니다. 💡