반응형
[광고 누르면 오늘의 행운 상승!!]
Aspect Oriented Programming
- AOP는 관심사의 분리를 통해서 소프트웨어의 모듈성을 향상시키고자 하는 프로그래밍 패러다임
- 소스코드 레벨에서 관심사의 모듈화를 지향하는 프로그래밍 방법이나 도구를 포함한다.
횡단관심
횡단관심(Cross-cutting concern)은 어플리케이션의 다양한 관점(point)에 영향을 미치는 기능
객체지향 개념의 상속과 위임
- 상속은 어플리케이션을 통해 사용되는 동일한 기반 클래스라는 깨지기 쉬운 객체 계층 구조를 사용하게 됨
- 위임은 위임 객체로의 복잡한 호출이 필요할 수 있기 때문에 다루기 어려움
Aspect-oriented
- 많은 환경에서 더 명확해질 수 있는 상속과 위임의 대안으로 사용됨
- AOP를 사용해서 한 곳에 공통된 기능을 정의하며, 새로운 특성을 적용하려는 클래스를 변경하지 않고 해당 기능을 어떻게 어디에 적용할지를 선언적으로 정의함
- Cross-cutting concern은 aspect라고 하는 특별한 객체로 모듈화가 가능함
장점
- 각각의 관심사(concern)에 대한 로직은 코드 여기저기에 모두 흩어져있는 것과는 반대로 한 군데에 모여있음.
- 서비스 모듈들은 주요 관심사(concern) (혹은 핵심 기능)에 대한 코드만을 포함하고 부수적인 관심사(concern)는 aspect로 옮겨지기 때문에 더 명확해짐
Aspect
- 횡단관심사의 동작과 그 횡단관심사를 적용하려는 소스 코드에서의 위치를 모아 둔 것
- 하나 이상의 Advice(동작)과 Pointcut(동작을 적용하는 조건)을 조합한 것
JoinPoint
- Advice가 실행하는 동작을 끼워 넣을 수 있는 때를 의미한다..
- 스프링에서는 메소드가 호출될 때와 메소드가 원래 호출한 곳으로 돌아갈 때가 어드바이스를 끼워 넣을 수 있는 조인포인트이다.
Advice
- Joinpoint에서 실행되는 코드
- 보안, 로깅, 트랜잭션 관리 등의 코드가 기술된다.
Pointcut
- Pointcut은 Joinpoint와 Advice의 중간에 있으면서 처리가 조인포인트에 이르렀을 때 Advice를 호출할지 선별한다.
Java로 작성되는 Spring의 advice
- Sprint내에서 생성되는 모든 advice는 일반적인 Java클래스이다.
- AspectJ는 Java를 확장한 언어로 구현한다.
- AOP에 특화된 언어를 사용하는 것은 세밀하게 aspect를 적용하거나 AOP도구를 사용한다는 장점이 있지만, 새로운 도구와 언어의 문법을 배워야 하는 단점이 있다.
Spring의 실행시 advice 구성
- Aspect들은 Spring이 관리하는 빈(bean)에 실행 시 proxy 클래스와 함께 감싸서 (wrapping) 구성됨
스프링은 메소드 Jointpoint만을 지원한다.
- 스프링은 동적 proxy를 기반으로 하므로 메소드 joinpoint만을 지원하며, 세밀한 advice를 구성을 할 수 없다.
- AspectJ나 Jboss의 경우 생성자 joinpoint나 필드 joinpoint를 추가로 지원한다.
- 스프링은J2EE의구현에 대한 프레임워크를 제공하는데 초점을 맞추기 때문에 메소드 interception 만으로도 충분하다.
- 그 이상의 기능은 AOP가 필요하면 AspectJ와 Spring AOP를 통합해서 사용해야 함
반응형
'5. 웹 프로그래밍 > 6. Spring' 카테고리의 다른 글
DI (Dependency Injection) [Spring] (0) | 2020.05.20 |
---|---|
POJO(Plain Old Java Object) [Spring] (0) | 2020.05.20 |
Spring Framework가 제공하는 Class [Spring] (0) | 2020.05.20 |
Spring MVC Architecture [Spring][MVC] (0) | 2020.05.20 |
Spring FrameWork [스프링 프레임워크] (0) | 2020.05.19 |