AOP란? (Spring 한스푼 첨가)
AOP란?
Aspect Oriented Programming 관점 지향 프로그래밍
어플리케이션의 각각의 기능들을 관심사라고 하고
여러 모듈에 걸쳐 공통적이고 반복적으로 처리하는 내용을 횡단관심사라고 한다.
(AOP에서는 모듈을 Aspect라고 표현함.)
여러 관심사에서 공통을 상용하는 횡단관심사를 중심으로 개발하는 프로그래밍 방식을 AOP라고 한다.
AOP는 여러 경계에 걸쳐있는 기능들을 잘 포장하는 방식이고 AOP를 잘 활용하면 유지관리와 확장에 용이하다.
AOP와 OOP는 서로 보관하는 관계에 있으며, 대표적으로 로깅, 트랜젝션등을 개발할때 사용된다.
간단히 표현하면 반복적으로 쓰는 코드를 한군데 모아 관리하는 개념이다.
AOP 용어?
주요 용어
Aop의 주요 용어에 대해 알아보자.
Aop 용어는 spring과 같은 하나의 커뮤니티만의 용어가 아닌 AOP라는 개념을 사용하는데 쓰이는 공통 용어이다.
Advice
조인 포인트에 삽입되어 실행되는 코드, 횡단 관심사의 구현부분.
Join Point
횡단 관심사가 실행되는 지점 또는 시점
Pointcut
Join Point 중에서 실제 적용될 지점들
Aspect (Advisor)
공통 관심사의 추상적 명칭
Target
횡단 관심사를 적용 받게 되는 대상, 어드바이스가 적용되는 객체
Introduction
Target에는 없는 새로운 메서드나 인스턴스 변수들을 추가하는 것
Weaving
Advice와 Target이 결합되어서 Proxy 객체를 만드는 과정
Aop Proxy
Advice가 적용되었을 때 만들어지는 프록시 객체
스프링 Advice 유형
before
조인포인트 앞에서 실행할 어드바이스
after (finally)
조인포인트 뒤에서 실행할 어드바이스
after returning
조인포인트가 완전히 종료된 다음에 실행되는 어드바이스
(정상종료여야함) / Exception 터지면 안됨
after throwing
조인포인트에서 예외가 발생했을 때 실행되는 어드바이스
around
조인포인트 앞뒤에서 실행되는 어드바이스
스프링에서 AOP 설계방식
스프링에서는 Aop를 프록시 패턴을 통해 구현하고 있다.
객체를 참조하려할때 지정한 advice와 함께
프록시 객체를 생성하는 방식으로 요청의 전후를 인터셉트한다.