1. AOP 소개
□ AOP 소개
■ AOP (Aspect Oriented Programming)
- 문제를 해결하기 위한 핵심 관심 사항(core concern, 핵심 로직)과 전체에 적용되는 공통 관심 사항(cross-cutting concern,
- 메서드가 호출될 때에만 Advice를 적용할 수 있기 때문에 필드 값 변경과 같은 Joinpoint에 대해서는 적용할 수 없는 한계가 있음.
□ AOP 소개
■ AOP (Aspect Oriented Programming)
- 문제를 해결하기 위한 핵심 관심 사항(core concern, 핵심 로직)과 전체에 적용되는 공통 관심 사항(cross-cutting concern,
공통 기능)을 기준으로 프로그래밍함으로써 공통 모듈을 여러 코드에 쉽게 적용할 수 있도록 해 줌.
■ 공통 관심 사항을 구쳔한 코드를 핵심 로직을 구현한 코드 안에 삽입
■ 공통 관심 사항을 구쳔한 코드를 핵심 로직을 구현한 코드 안에 삽입
- 핵심 로직을 구현한 코드에서 공통 기능을 직접적으로 호출하지 않음.
- 핵심 로직을 구현한 코드를 컴파일하거나, 컴파일된 클래스를 로딩하거나, 로딩된 클래스의 객체를 생성할 때 AOP가 적용되어
핵심 로직 구현 코드 안에 공통 기능이 삽입됨.
- 공통 기능이 변경되더라도 핵심 로직을 구현한 코드를 변경할 필요가 없음.
(공통 기능 코드를 변경한 뒤 핵심 로직 구현 코드에 적용만 하면 됨.)
□ AOP 용어
■ Advice
- 언제 공통 관심 기능을 핵심 로직에 적용할지를 정의.
- 예로, '메서드를 호출하기 전'(언제)에 '트랜잭션을 시작한다'(공통 기능) 기능을 적용한다는 것을 정의.
■ Joinpoint
- Advice를 적용 가능한 지점을 의미.
- 메서드 호출, 필드 값 변경 등이 Joinpoint에 해당.
■ Pointcut
- Joinpoint의 부분 집합으로써 실제로 Advice가 적용되는 Joinpoint를 나타냄.
- 스프링에서는 정규 표현식으나 AspectJ의 문법을 이용하여 Pointcut을 정의.
■ Weaving
- Advice를 핵심 로직 코드에 적용하는 것을 의미.
- 공통 코드를 핵심 로직 코드에 삽입하는 것.
■ Aspect
- 여러 객체에 공통으로 적용되는 공통 관심 사항을 의미.
- 트랜잭션이나 보안 등이 해당.
□ 세 가지 Weaving 방식
■ Advice를 Weaving하는 방식
- 컴파일 시에 Weaving 하기.
- 클래스 로딩 시에 Weaving 하기.
- 런타임 시에 Weaving 하기.
■ 컴파일 방식
- AspectJ에서 사용하는 방식.
- 핵심 로직을 구현한 자바 소스 코드를 컴파일할 때에 알맞은 위치에 공통 코드를 삽입. (AOP가 적용된 클래스 파일이 생성.)
- 컴파일 방식을 제공하는 AOP 도구는 공통 코드를 알맞은 위치에 삽입할 수 있도록 도와주는 컴파일러나 IDE를 함께 제공.
■ 클래스 로딩 방식
- AOP 라이브러리는 JVM이 클래스를 로딩할 때 클래스 정보를 변경할 수 있는 에이전트를 제공.
- 에이전트는 로딩한 클래스의 바이너리 정보를 변경하여 알맞은 위치에 공통 코드를 삽입한 새로운 클래스 바이너리 코드를 사용.
- 원본 클래스 파일은 변경하지 않고 클래스를 로딩할 때에 JVM이 변경된 바이트 코드를 사용하도록 함으로써 AOP를 적용.
- AspectJ 5 버전이 컴파일 방식과 더불어 클래스 로딩 방식을 함께 지원.
■ 런타임 방식
- 소스 코드나 클래스 정보 자체를 변경하지 않음.
- 프록시를 이용하여 AOP를 적용.
- 핵심 로직을 구현한 객체에 직접 접근하는 것이 아니라 중간에 프록시를 생성하여 프록시를 통해서 핵심 로직을 구현한 객체에
■ Advice
- 언제 공통 관심 기능을 핵심 로직에 적용할지를 정의.
- 예로, '메서드를 호출하기 전'(언제)에 '트랜잭션을 시작한다'(공통 기능) 기능을 적용한다는 것을 정의.
■ Joinpoint
- Advice를 적용 가능한 지점을 의미.
- 메서드 호출, 필드 값 변경 등이 Joinpoint에 해당.
■ Pointcut
- Joinpoint의 부분 집합으로써 실제로 Advice가 적용되는 Joinpoint를 나타냄.
- 스프링에서는 정규 표현식으나 AspectJ의 문법을 이용하여 Pointcut을 정의.
■ Weaving
- Advice를 핵심 로직 코드에 적용하는 것을 의미.
- 공통 코드를 핵심 로직 코드에 삽입하는 것.
■ Aspect
- 여러 객체에 공통으로 적용되는 공통 관심 사항을 의미.
- 트랜잭션이나 보안 등이 해당.
□ 세 가지 Weaving 방식
■ Advice를 Weaving하는 방식
- 컴파일 시에 Weaving 하기.
- 클래스 로딩 시에 Weaving 하기.
- 런타임 시에 Weaving 하기.
■ 컴파일 방식
- AspectJ에서 사용하는 방식.
- 핵심 로직을 구현한 자바 소스 코드를 컴파일할 때에 알맞은 위치에 공통 코드를 삽입. (AOP가 적용된 클래스 파일이 생성.)
- 컴파일 방식을 제공하는 AOP 도구는 공통 코드를 알맞은 위치에 삽입할 수 있도록 도와주는 컴파일러나 IDE를 함께 제공.
■ 클래스 로딩 방식
- AOP 라이브러리는 JVM이 클래스를 로딩할 때 클래스 정보를 변경할 수 있는 에이전트를 제공.
- 에이전트는 로딩한 클래스의 바이너리 정보를 변경하여 알맞은 위치에 공통 코드를 삽입한 새로운 클래스 바이너리 코드를 사용.
- 원본 클래스 파일은 변경하지 않고 클래스를 로딩할 때에 JVM이 변경된 바이트 코드를 사용하도록 함으로써 AOP를 적용.
- AspectJ 5 버전이 컴파일 방식과 더불어 클래스 로딩 방식을 함께 지원.
■ 런타임 방식
- 소스 코드나 클래스 정보 자체를 변경하지 않음.
- 프록시를 이용하여 AOP를 적용.
- 핵심 로직을 구현한 객체에 직접 접근하는 것이 아니라 중간에 프록시를 생성하여 프록시를 통해서 핵심 로직을 구현한 객체에
접근.
○ 프록시 기반의 AOP 적용 과정
- 프록시는 핵심 로직을 실행하기 전 또는 후에 공통 기능을 적용하는 방식으로 AOP를 적용.○ 프록시 기반의 AOP 적용 과정
- 메서드가 호출될 때에만 Advice를 적용할 수 있기 때문에 필드 값 변경과 같은 Joinpoint에 대해서는 적용할 수 없는 한계가 있음.
[출처] 3. 스프링 AOP (AOP 소개)|작성자 외계인셩
'Java' 카테고리의 다른 글
HttpServletRequest, HttpServletResponse의 개요 (0) | 2010.07.20 |
---|---|
Java API 한글 문서 Java / 공부나하죠? (0) | 2010.07.20 |
Spring Framework의 기본 개념 Struts / Spring / Architecture (0) | 2010.07.15 |
Struts 2.1.8 과 Tiles 2.1.4 버전을 이용하는 예제 (0) | 2010.07.14 |
스트러츠(struts)를 써보자. (0) | 2010.07.14 |