1. 오늘 학습한 내용
1.1. Aspect Oriented Programming with Spring
- Aspect-oriented Programming complements Object-oriented Programming by providing another waty of thinking about program structure.
- OOP 모듈의 핵심 단위:
Class - AOP 모듈의 핵심 단위:
Aspect(관점, 관심, 어쩌면 기능)→ Cross-Cuting Concerns (횡단 관심사)
- OOP 모듈의 핵심 단위:
- 선택적으로 사용가능하지만 Spring의 핵심 구성요소이며, 2가지 방식으로 제공함
- 일반 클래스 (schema-based approach)
- Annotation이 추가된 일반 클래스 (@AspectJ annotation style)
- Spring에서 AOP를 사용하는 예시
- 선언적 트랜잭션 관리 (Declarative Transaction Management): @Transactional
- 사용자 정의 관점 구현 (Custom Aspects): 개발자가 원하는 부분을 Aspect로 직접 구현할 수 있음
1.2. AOP Concepts
Spring에서만 사용되는 용어가 아니며, 다소 직관적이지 않아 어렵게 느껴질 수 있음
Aspect- 여러 클래스에 걸쳐 있는 관심사의 모듈화된 단위라고 할 수 있음
- 개발자가 커스텀한 Aspect인 경우 횡단 관심사에 공통으로 적용하고자 하는 기능
Join point- 프로그램 실행 중 메서드 실행이나 필드 값 변경, 예외처리와 같이 Advice를 적용할 수 있는 지점
- Spring AOP에서는 메서드 실행을 나타냄 → 프록시를 이용하여 AOP를 구현하기 때문
Advice- 특정
Join point에서Aspect가 수행하는 작업으로 언제 적용할지를 정의하고 있음- Before advice: 대상 객체의 메서드 실행 전 실행
- After returning advice: 대상 객체의 메서드가 Exception 없이 정상적으로 종료된 이후에 실행
- After throwing advice: 대상 객체의 메서드가 Exception을 던저 종료되는 경우에 실행
- After (finally) advcie: Exception 발생 여부와 관련 없이 대상 객체의 메서드 실행 후 실행 (try-catch-finally의 finally 블록과 유사)
- Around advice: 대상 객체의 메서드 실행 전, 후, 또는 Exception 발생 등 다양한 시점에 실행 가능 → 주로 많이 사용 됨
- 필요한 동작을 구현할 수 있는 가장 약한 어드바이스 유형을 사용하는 것이 좋음
- 가장 구체적인 어드바이스 유형을 사용하면 오류 발생 가능성이 적고 프로그래밍 모델이 더 단순해짐
- For example, you do not need to invoke the
proceed()method on theJoinPointused for around advice, and, hence, you cannot fail to invoke it.
- 특정
Pointcut- Join point의 부분 집합으로, 실제로 Advice가 적용되는 Join point를 말함
- 기본적으로 AspectJ의 문법을 이용하여 정의
- 핵심: The concept of join points as matched by pointcut expressions is central to AOP, and Spring uses the AspectJ pointcut expression language by default.
Introduction- 타입을 대신하여 추가 메서드나 필드를 선언하는 것
- Spring AOP를 이용하면 모든 Advised Object 에 새로운 인터페이스와 구현체를 도입할 수 있음
- inter-type declaration 이라고도 함
Advised Object (Target object)- 하나 이상의 Aspect에 의해 adviced 되는 객체, 즉 관심사가 적용된 객체를 말함
- Spring AOP는 런타임 프록시를 사용하여 구현되므로 항상 프록시된 객체임
AOP proxy- AOP 프레임워크가 AOP의 기능을 구현하기 위해 생성하는 객체
- Spring AOP에서는 JDK 동적 프록시 혹은 CGLIB 프록시 2가지 유형임
Weaving- Aspect를 이용하여 실제 Advised 객체로 만드는 과정 자체를 일컫음
- Spring AOP는 기본적으로 런타임에 수행됨
1.3. Spring AOP Capabilities and Goals
- 순수 Java로 구현되어 있음
- 서블릿 컨테이너나 애플리케이션 서버에서 사용하기에 적합
- Spring AOP는 메서드 호출만 지원하므로, Field interception이나 메서드 외의 다른 Join Point를 추가하려면 AspectJ 같은 AOP 전용 도구 사용 필요
- 즉, Spring AOP는 흔히 발생하는 문제 해결에 도움을 주며 부족한 경우에는 AspectJ 사용을 권함. 경쟁이 아니라 상호 보완하면서 사용자에게는 선택권을 제공
2. 더 알아볼 내용 / 다음에 할 내용
- AOP 프록시
3. 참고
- Aspect Oriented Programming with Spring :: Spring Framework
- 최범균. 『초보 웹 개발자를 위한 스프링5 프로그래밍 입문』. 가메, 2018