일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Spring Boot
- AOP
- @AspectJ
- spring framework
- STS
- Spring JDBC
- 리눅스
- Dependency Injection
- Linux
- myBatis
- @test
- unix
- XML
- java
- spring
- JDBC TEMPLATE
- 프로퍼티
- spring aop
- Di
- Ubunt
- POJO
- @Spring-Test
- SpringJDBC
- pointcut
- java spring
- @JUnit
- JdbcTemplate
- Framework
- 마이바티스
- 컨테이너
- Today
- Total
개키우는개발자 : )
AOP 개요 본문
Spring Framework AOP 개요
학습 목표
- AOP의 개요와 용어
- AOP의 특징 및 구현방식
- AspectJ 와 SpringAOP 설치
1.AOP의 개요와 용어
1-1 핵심기능과 부가기능
- 업무(Biz) 로직을 포함하는 기능을 핵심 기능(Core Concerns)
- 핵심기능을 도와주는 부가적인 기능(로깅,보안 등)을 부가기능(Cross-cutting Concerns) 이라고 부른다.
- 객체지향의 기본 원칙을 적용하여도 핵심기능에서 부가기능을 분리해서 모듈화하는 것은 매우 어렵다.
핵심기능과 부가기능
1-2 AOP(Aspect Oriented Programming)의 개요
AOP는 애플리케이션에서의 관심사의 분리(기능의 분리) 즉, 핵심적인 기능에서 부가적인 기능을 분리한다.
분리한 부가기능을 애스펙트(Aspect)라는 독특한 모듈형태로 만들어서 설계하고 개발하는 방법
- OOP를 적용하여도 핵심기능에서 부가기능을 쉽게 분리된 모듈로 작성하기 어려운 문제점을 AOP가 해결해 준다고 볼 수 있다.
- AOP는 부가기능을 애스펙트(Aspect)로 정의하여, 핵심기능에서 부가기능을 분리함으로써 핵심기능을 설계하고 구현할때 객체지향적인 가치를 지킬 수 있도록 도와주는 개념이다.
1-3 애스펙트(Aspect)
- 애스펙트는 부가기능을 정의한 코드인 어드바이스(Advice)와 어드바이스를 어디에 적용할지를 결정하는 포인트컷(PointCut)을 합친 개념이다.
Advice + PointCut = Aspect
- AOP 개념을 적용하면 핵심기능 코드 사이에 침투된 부가기능을 독립적인 애스펙트로 구분해 낼 수 있다.
- 구분된 부가기능 애스펙트를 런타임 시에 필요한 위치에 동적으로 참여하게 할 수 있다.
1-4 AOP 용어
- 타겟(Target)
- 핵심기능을 담고 있는 모듈로, 타겟은 부가기능을 부여할 대상이 된다.
- 어드바이스(Advice)
- 어드바이스는 타겟에 제공할 부가기능을 담고 있는 모듈이다.
- 조인 포인트(Join Point)
- 어드바이스가 적용될 수 있는 위치를 말한다.
- 즉, 타겟 객체가 구현한 인터페이스의 모든 메서드는 조인 포인트가 된다.
- 포인트(Pointcut)
- 어드바이스를 적용할 타겟의 메서드를 선별하는 정규표현식이다.
- 포인트컷 표현식은 execution으로 시작하고, 메서드의 Signature를 비교하는 방법으로 주로 이용한다.
- 애스펙트(Aspect)
- 애스펙트는 AOP의 기본 모듈이다.
- 애스펙트 = 어드바이스 + 포인트컷
- 애스펙트는 싱글톤 형태의 객체로 존재한다.
- 어드바이저(Advisor)
- 어드바이저 = 어드바이스 + 포인트컷
- 어드바이저는 Spring AOP에서만 사용되는 특별한 용어이다.
- 위빙(Weaving)
- 위빙은 포인트컷에 의해서 결정된 타겟의 조인 포인트에 부가기능(어드바이스)을 삽입하는 과정을 뜻한다.
- 위빙은 AOP가 핵심기능(타겟)의 코드에 영향을 주지 않으면서 필요한 부가기능(어드바이스)을 추가할 수 있도록 해주는 핵심적인 처리과정이다.
AOP(Aspect Oriented Programming)의 개요
2.AOP의 특징 및 구현방식
2-1 Spring AOP의 특징
(1) Spring은 프록시(Proxy) 기반 AOP를 지원한다.
- Spring은 타겟(target) 객체에 대한 프록시를 만들어 제공한다.
- 타겟을 감싸는 프록시는 실행시간(Runtime)에 생성된다.
- 프록시는 어드바이스를 타겟 객체에 적용하면서 생성되는 객체이다.
Spring AOP의 특징
(2) 프록시(Proxy)가 호출을 가로챈다(Intercept).
- 프록시는 타겟 객체에 대한 호출을 가로챈 다음 어드바이스의 부가기능 로직을 수행하고 난 후에 타겟의 핵심기능 로직을 호출한다. (전처리 어드바이스)
- 또는 타겟의 핵심기능 로직 메서드를 호출한 후에 부가기능(어드바이스)을 수행하는 경우도 있다.(후처리 어드바이스)
프록시(Proxy)가 호출을 가로챈다(Intercept).
(3) Spring AOP는 메서드 조인 포인트만 지원한다.
- Spring은 동적 프록지를 기반으로 AOP를 구현하므로 메서드 조인 포인트만 지원한다. 즉, 핵심기능(타겟)의 메서드가 호출되는 런타임 시점에만 부가기능(어드바이스)을 적용할 수 있다.
- 반면에 AspectJ 같은 고급 AOP 프레임워크를 사용하면 객체의 생성, 필드값의 조회와 조작, static 메서드 호출 및 초기화 등의 다양한 작업에 부가기능을 적용할 수 있다.
2-2 Spring AOP의 구현 방식
XML 기반의 POJO 클래스를 이용한 AOP 구현
- 부가기능을 제공하는 Advice 클래스를 작성한다.
- XML 설정 파일에 <aop:config>를 이용해서 애스펙트를 설정한다.
(즉, 어드바이스와 포인트컷을 설정함.)
@Aspect 어노테이션을 이용한 AOP 구현
-@Aspect 어노테이션을 이용해서 부가기능을 제공하는 Aspect 클래스를 작성한다. 이때 Aspect 클래스는 어드바이스를 구현하는 메서드와 포인트컷을 포함한다.
- XML 설정 파일에 <aop:aspectj-autoproxy />를 설정한다.
3.AspectJ 와 SpringAOP 설치
3-1 AspectJ Runtime 라이브러리 설치
https://mvnrepository.com/artifact/org.aspectj/aspectjrt/1.9.2
가장 많이 다운받은 최신버전을 설치하였습니다.
1 2 3 4 5 6 7 | <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjrt --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.9.2</version> </dependency> | cs |
3-2 AspectJ Weaver 라이브러리 설치
https://mvnrepository.com/artifact/org.aspectj/aspectjweaver/1.9.2
1 2 3 4 5 6 7 | <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.2</version> </dependency> | cs |
3-3 Spring AOP 라이브러리 설치
https://mvnrepository.com/artifact/org.springframework/spring-aop/3.2.3.RELEASE
현재 프로젝트와 같은 버전의 AOP 설치
1 2 3 4 5 6 7 | <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>3.2.3.RELEASE</version> </dependency> | cs |
3-4 AspectJ Runtime API 문서
https://www.eclipse.org/aspectj/doc/next/runtime-api/index.html
완성된 프로젝트 코드를 다운받으실수 있습니다.
'JAVA > Spring Framework' 카테고리의 다른 글
AOP애플리케이션 작성(2) (0) | 2019.02.08 |
---|---|
AOP애플리케이션 작성(1) (0) | 2019.02.08 |
Spring Framework JDBC 환경설정 (0) | 2019.02.07 |
Spring Framework JDBC 개요 (0) | 2019.02.07 |
사용자관리 프로젝트 (0) | 2019.02.07 |