[Spring Boot] AOP(Aspect Oriented Programming) 란?
들어가며
이전 글들에서 AOP에 대해 설명한 적이 있다. 그런데 AOP가 파면 팔수록 알아야 할 부분이 많다고 느꼈다. 그래서 별도로 AOP에 대한 세부적인 사항들에 대해 다뤄보려 한다.
AOP(Aspect Oriented Programming) 란?
AOP 는 관점 지향 프로그래밍이다. AOP는 자바와 같은 객체 지향 프로그래밍(OOP)을 더욱 OOP 답게 사용할 수 있도록 도와주는 역할을 한다.
AOP에서 관점은 핵심적인 관점과 부가적인 관점으로 나눌 수 있다. 핵심적인 관점은 핵심 비즈니스 로직을 의미하고, 부가적인 관점은 공통으로 처리되어야 하는 코드를 의미한다.
예를 들어, 위 상황에서 필수적으로 처리되어야 하는 권한, 로깅, 트랜잭션 등의 공통 기능이 정말 커다란 시스템에서 각각 추가된다면 똑같은 코드가 얼마나 많아지게 될까? AOP는 이러한 문제를 관점이라는 개념을 통해 해결했다. 앞에서 말한 부가적인 관점에서는 핵심 비즈니스 로직이 어떤 기능을 수행하는지 전혀 알 필요가 없다. 단지, 핵심 비즈니스 로직 안에서 필요한 시점에 부가적인 기능만 수행해주면 될 뿐이다.
AOP를 추가하게 되면 부가적인 관점에서의 공통 기능이 핵심 비즈니스 로직 밖에 포함되게 된다. 때문에, 부가적인 기능들을 일일이 추가하지 않아도 된다.
AOP의 핵심은 기존 핵심 비즈니스 로직에 영향이 가지 않고, 심지어 핵심 비즈니스 로직이 부가적인 기능이 처리되는 것을 모를 정도로 부가적인 공통 기능을 처리해야 한다는 것이다.
이러한 방식을 위해 AOP는 디자인 패턴 중 프록시 패턴과 데코레이터 패턴이 사용됐다.
- 프록시 패턴: 어떤 객체에 대한 접근 권한을 제어하는 용도로 대리인이나 대변인에 해당하는 객체를 제공하는 패턴
- 데코레이터 패턴: 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴
디자인 패턴에 관해서는 추 후에 자세히 다뤄보도록 하겠다.