AOP (Aspect Oriented Programming) 란?

관점 지향 프로그래밍

핵심 비지니스 로직과 공통 모듈을 분리함으로써 개발자가 좀 더 비지니스 로직에만 집중해서 처리할 수 있는 방법을 제공 한다.

공통 모듈을 적용해서 발생하는 의존 관계의 복잡성과 코드 중복을 해소해 주는 프로그래밍 기법이다.

즉, 공통 모듈(로깅, 보안인증, 트랜잭션 등)을 별도로 작성한 후 코드밖에서 비지니스 로직 사이에 삽입하는 것이 AOP 기능을 사용해 개발한 것이라고 볼 수 있다.

AOP는 OOP(Object Oriented Programming)를 대신하는 새로운 개념이 아니라, OOP를 더욱 OOP답게 사용할 수 있도록 도와주는 개념이다.

 

AOP 특징

Spring은 프록시(Proxy) 기반 AOP를 지원한다.

- Spring은 타겟(target) 객체에 대한 프록시를 만들어 제공한다.

- 타겟을 감사는 프록시는 실행시간(Runtime)에 생성된다.

- 프록시는 Advice를 타겟 객체에 적용하면서 생성되는 객체이다.

 

프록시(Proxy)가 호출을 가로챈다(intercept)

- 프록시는 타겟 객체에 대한 호출을 가로챈 다음 Advice의 부가기능 로직을 수행하고 난 후에 타겟의 핵심기능 로직을 호출한다.(전 처리 Advice)

- 타겟의 핵심기능 로직 메소드를 호출한 후에 공통 기능(Advice)을 수행한다. (후 처리 Advice)

 

Spring AOP는 메소드 Join Point만 기원한다.

- Spring은 동적 프록시를 기반으로 AOP를 구현하므로 메서드 Join Point 만 지원한다.

- 핵심 기능(타겟)의 메소드가 호출되는 런타임 시점에만 공통 기능(Advice)을 적용할 수 있다.

- AspectJ 같은 고급 AOP 프레임워크를 사용하면 객체의 생성, 필드 값의 조회와 조작, static 메소드 호출 및 초기화 등의 다양한 작업에 공통기능을 적용 할 수 있다. 

+ Recent posts