18강 AOP(Aspect Oriented Programming
- 목차
- 내용
- AOP 개념
- AOP 주요 용어
- 학습 목표
- Aspect Oriented Programming 개념 파악
- AOP 주요 용어 이해
- 스프링 AOP와 AspectJ의 차이점 이해
- 내용
- AOP 개요
- 핵심 기능과 부가 기능
- 업무 로직을 포함하는 핵심 기능(Core Concerns)
- 핵심 기능을 도와주는 부가적인 기능(로깅, 보안 등)을 부가기능(Cross-cutting Concerns)이라 부름
- 객체지향의 기본 원칙을 적용하여도 핵심기능에서 부가기능을 분리해서 모듈화하는 것은 어렵다.
- 애플리케이션에서의 관심사의 분리(기능의 분리).
- 즉, 핵심적인 기능에서 부가적인 기능을 분리, 분리한 부가기능을 Aspect라는 독특한 모듈 형태로 만들어서 설계하고 개발하는 방법!!!
- OOP를 적용하여 핵심기능에서 부가기능을 쉽게 분리된 모듈로 작성하기 어려운 문제점을 AOP가 해결해 준다고 볼 수 있습니다.
- AOP는 부가기능을 애스펙트(Aspect)로 정의하여, 핵심기능에서 부가기능을 분리함으로써 핵심기능을 설계하고 구현할 때 객체지향적인 가치를 지킬수 있도록 도와주는 개념임.
- AOP 는 runtime 시에 핵심 기능과 부가기능을 결합해 주는 것임.
- 핵심 기능과 부가 기능
- Aspect
- 애스펙트는 부가 기능을 정의한 코드인 Advice와 Advice를 어디에 적용하지를 결정하는
PointCut을 합친 개념입니다. - Advice + PointCut = Aspect. 부가기능 코드를 어디에 적용할지.
- 구분된 부가기능 애스펙트를 런타임 시에 필요한 위치에 동적으로 참여하게 할 수 있음.
- 애스펙트는 부가 기능을 정의한 코드인 Advice와 Advice를 어디에 적용하지를 결정하는
- AOP 용어
- 타겟(Target) : 핵심 기능을 담고 있는 모듈로, 타겟은 부가기능을 부여할 대상이 됨.
- 어드바이스(Advice) : 부가 기능을 담고 있는 모듈.
- 조인 포인트(Join Point) : 어드바이스가 적용될 수 있는 위치. 타깃 객체가 구현한 인터페이스의 모든 메소드는 조인 포인트가 됨.
- 포인트 컷(Pointcut) : 어드바이스를 적용할 타깃의 메소드를 선별하는 정규표현식.
포인트컷 표현식은 execution으로 시작하고, 메소드의 Signature를 비교하는 방법을 주로 이용함. - 애스펙트(Aspect) : 애스펙트는 AOP의 기본 모듈임.
애스펙트는 싱글톤 형태의 객체로 존재함. - 어드바이저(Advisor) : == Aspect와 동일한 용어이며, Spring AOP에서만 사용되는 특별한 용어입니다.
- 위빙(Weaving) : 위빙은 포인트컷에 의해서 결정된 타깃의 조인 포인트에 부가기능(advice)을 삽입하는 과정을 뜻함.
위빙은 AOP가 핵심기능(Target)의 코드에 영향을 주지 않으면서 필요한 부가기능(advice)을 추가할 수 있도록 해주는 핵심적인 처리 과정임.
- Spring AOP 의 특징
- 1. Spring은 프록시(Proxy) 기반 AOP 를 지원함
- Spring은 타깃(Target) 객체에 대한 프록시를 만들어 제공함
- 타깃을 감싸는 프록시는 실행시간(Runtime)에 생성됨
- 프록시는 어드바이스를 타깃 객체에 적용하면서 생성되는 객체임
- 2. 프록시(Proxy)가 호출을 가로챔(Intercept).
- 프록시는 타깃 객체에 대한 호출을 가로챈 다음 어드바이스의 부가기능로직을 수행하고 난 후에 타깃의 핵심 기능 로직을 호출함(전처리 어드바이스)
- 타깃의 핵심기능 로직 메소드를 호출한 후에 부가기능(어드바이스)을 수행하는 경우도 있음(후처리 어드바이스)
- 3. Spring AOP는 메소드 조인 포인트만 지원.
- Spring은 동적 프록시를 기반으로 AOP를 구현하므로 메소드 조인 포인트만 지원함.
즉, 핵심기능(타깃)의 메소드가 호출되는 런타임 시점에만 부가기능(어드바이스)을 적용할 수 있음. - 반면에 AspectJ 같은 고급 AOP 프레임워크를 사용하면 객체의 생성, 필드값의 조회와 조작, static 메소드 호출 및 초기화 등의 다양한 작업에 부가기능을 적용할 수 있음.
- Spring은 동적 프록시를 기반으로 AOP를 구현하므로 메소드 조인 포인트만 지원함.
- 1. Spring은 프록시(Proxy) 기반 AOP 를 지원함
'Room 102. Back-end > Spring' 카테고리의 다른 글
[실전 개발자를 위한 Spring Framework ] 강의 - 예외 처리 (0) | 2020.05.31 |
---|---|
[실전 개발자를 위한 Spring Framework ] 강의 - 트랜잭션과 로깅 (0) | 2020.05.31 |
[실전 개발자를 위한 Spring Framework ] 강의 - MyBatis (0) | 2020.05.31 |
[실전 개발자를 위한 Spring Framework ] 강의 - Context 분리와 전략 (0) | 2020.05.31 |
[실전 개발자를 위한 Spring Framework ] 강의 - Data Access (0) | 2020.05.31 |