AOP
는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍
이라고 불린다. 관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다.
- 참고 사항
AOP(관점 지향 프로그래밍)는 프로그램 구조에 대한 또 다른 사고 방식을 제공하여 객체 지향 프로그래밍(OOP)을 보완한다. OOP의 모듈화 핵심 단위는 클래스인 반면, AOP의 모듈화 단위는 측면이다.
AOP에서 각 관점을 기준으로 로직을 모듈화한다는 것은 코드들을 부분적으로 나누어서 모듈화하겠다는 의미다. 이때, 소스 코드상에서 다른 부분에 계속 반복해서 쓰는 코드들을 발견할 수 있는 데 이것을 흩어진 관심사 (Crosscutting Concerns)라 부른다.
위와 같이 흩어진 관심사를 Aspect로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 AOP이다.
하지만 주로 하나의 부가 기능이 여러 곳에서 동일하게 사용이 되고는 하는데, 이를 횡단 관심사(cross-cutting concerns)라고 한다. 여러 기능들 사이에 걸쳐서 들어가는 관심사라는 뜻이다.
소프트웨어에서 변경 지점은 하나가 될 수 있도록 모듈화하는 것이 필요한데, 부가 기능과 같은 특정 로직을 애플리케이션 전반에 적용하는 것은 일반적인 OOP
방식으로는 위의 문제점을 해결하기 힘들다.
프록시 패턴 기반의 AOP 구현체, 프록시 객체를 쓰는 이유는 접근 제어 및 부가기능을 추가하기 위해서이다.
스프링 빈에만 AOP를 적용 가능하다.
모든 AOP 기능을 제공하는 것이 아닌 스프링 IoC와 연동하여 엔터프라이즈 애플리케이션에서 가장 흔한 문제(중복코드, 프록시 클래스 작성의 번거로움, 객체들 간 관계 복잡도 증가 ...)에 대한 해결책을 지원하는 것이 목적이다.
+ 스프링 AOP : @AOP
스프링 @AOP를 사용하기 위해서는 아래와 같은 의존성을 추가해야 한다.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
참조 : https://engkimbs.tistory.com/entry/%EC%8A%A4%ED%94%84%EB%A7%81AOP