AOP란?
AOP의 개요와 용어
AOP의 특징 및 구현방식
Aspect와 SpringAOP설치
AOP의 개요와 용어
- 핵심기능(Core Concerns)
업무로직을 포함하는 기능이다.
- 부가기능(Cross-cutting Concerns)
로깅,보안등 부가기능이다.
객체지향의 기본 원칙을 적용하여도 핵심기능에서 부가기능을 분리해서 모듈화하는것은 어렵다.
하지만 AOP 개념을 적용하면 부가기능을 쉽게 분리할 수 있다.
AOP 개요
- 애플리케이션에서의 관심사의 분리(기능의분리)를 말한다.
- 즉, 핵심적인 기능에서 부가적인 기능을 분리하는 것.
- 분리한 부가기능을 애스펙트(Aspect)라는 독특한 모듈형태로 만들어서 설계하고 개발하는 방법이다.
- OOP를 적용하여 핵심기능에서 부가기능을 쉽게 분리된 모듈로 작성하기 어려운 문제점을 AOP가 해결해준다.
- 핵심기능과 부가기능을 분리하여 객체지향적인 가치를 지킬수 있도록 도와주는 개념이다.
Aspect란?
- 부가기능을 정의한 코드 어드바이스이다.(Advice와 어디바이스를 어디에 적용할지 정하는 포인트컷(PointCut)을 합친개념)
- Advice + PointCut = Aspect
- 핵심기능 코드 사이에 침투된 부가기능을 독립적인 애스펙트로 구분가능하다.
- 런타임시점에 필요한 부분에 동적으로 참여하게 가능이다.
AOP용어
- 타겟Target(핵심기능)
핵심기능을 담고 있는 모듈로, 타겟은 부가기능을 부여할 대상이 된다.
- 어드바이스(Advice)
어드바이스는 타겟에 제공할 부가기능을 담고 있는 모듈이다.
- 조인 포인트(Join Point)
어드바이스가 적용될 수 있는 위치를 말한다.
즉, 타겟 객체가 구현한 인터페이스의 모든 메서드는 조인 포인트가된다.
- 포인트 컷(PointCut)
어드바이스를 적용할 타겟의 메서드를 선별하는 정규표현식이다.
포인트컷 표현식은 execution으로 시작하고, 메서드의 Signature를 비교하는 방법을 주로 이용한다.
- 애스펙트(aspect)
애스펙트는 AOP의 기본 모듈이다.
애스펙트 = 어드바이스 + 포인트컷
애스펙트는 싱글톤 형태의 객체로 존재한다.
- 어드바이저(Advisor)
어드바이저 = 어드바이스 + 포인트컷
어드바이저는 Spring AOP에서만 사용되는 특별한 용어이다.
- 위빙(Weaving)
위빙은 포인트컷에 의해서 결정된 카겟의 조인포인트에 부가기능(어드바이스)를 삽입하는과정이다.
위빙은 AOP가 핵심기능(타겟)의 코드에 영향을 주지않으면서 필요한 부가기능(어드바이스)을 추가할 수
있도록 해주는 핵심적인 처리과정이다.
기존(핵심,부가기능이 같이잇음)
한 로직 안에 PrimaryConcern,(핵심기능),Cross_cutting(부가기능) 두가지 모두 같이 있다
ex)로그인체크(부가기능), 회원리스트가져오기(핵심기능)
AOP
Weaving(핵심기능에 적용하는과정)
Pointcout (advice를 적용할 대상을 선별하는식) --------------> PrimaryConcern(핵심기능)
↑(advice)<=부가기능지칭
Cross_cutting(부가기능)
위에 Pointcut+advice = Aspect
로그인체크와 회원리스트가져오기를 분리한다.
회원리스트가져오기(핵심기능)
로그인체크(부가기능)
두가지로 분리하게된다.
Spring AOP의 특징
- Spring은 프록시(Proxy)기반 AOP를 지원한다.
타겟객체에 대한 프록시를 만들어 제공한다.
타겟을 감싸는 프록시는 실행시간(runTime)에 생성된다.
프록시는 어드바이스를 타겟객체에 적용하면서 생성되는 객체이다.
- 프록시(Proxy)가 호출을 가로챈다.
프록시는 타겟 객체에 대한 호출을 가로챈 다음 어드바이스의 부가기능 로직을 수행하고
난 후에 타겟의 핵심기능 로직을 호출한다.(전처리 어드바이스)
또는 타겟의 핵심기능 로직 메서드를 호출한 후에 부가기능(어드바이스)를 수행하는 경우도 있다.(후처리어드바이스)
- 메서드 조인 포인트만 지원한다.
Spring은 동적 프록시를 기반으로 AOP를 구현하므로 메서드 조인 포인트만 지원한다.
즉, 핵심기능(타겟)의 메서드가 호출되는 런타임 시점에만 부가기능(어드바이스)을 적용할 수 있다.
반면에 AspectJ 같은 고급 AOP 프레임워크를 사용하면
객체의 생성, 필드값의 조회와 조작,static메서드 호출 및 초기화 등의 다양한 작업에 부가기능을 적용할 수 있다.
Spring AOP의 구현방식
XML의 기반의 POJO 클래스를 이용한 AOP구현
-부가기능을 제공하는 Advice클래스를 작성한다.
-XML 설정 파일에 Maop:config>를 이용해서 애스펙트를 설정한다.
(즉,어드바이스와 포인트컷을 설정함)
@Aspect 어노테이션을 이용한AOP 구현
-@Aspect어노테이션을 이용해서 부가기능을 제공하는 Aspect클래스를 작성한다.
Aspect클래스는 어드바이스를 구현하는 메서드와 포인트컷을 포함한다.
-XML설정파일에 (aop:aspectj-autoproxy />를 설정한다.
AspectJ와 SpringAOP 라이브러리 설치
Pom.xml에 추가
'개발 소발 > 개발 Spring' 카테고리의 다른 글
AOP어플리케이션 작성 (annotation)이란? (0) | 2017.11.27 |
---|---|
AOP어플리케이션 작성 (XML)이란? (0) | 2017.11.24 |
jdbc환경설정(mysql)이란? (0) | 2017.11.21 |
데이터엑세스개념(jdbc,springjdbc)이란? (0) | 2017.11.21 |
사용자관리프로젝트(컨트롤러,서비스,DAO,도메인모델)란? (0) | 2017.11.21 |