AOP
AOP는 Aspect Oriente Programming의 약자로, 여러 객체에 공통으로 적용할 수 있는 기능을 분리해서 재사용성을 높여주는 프로그래밍 기법이다. AOP는 핵심 기능과 공통 기능의 구현을 분리함으로써 핵심 기능을 구현한 코드의 수정 없이 공통 기능을 적영 할 수 있게 만들어준다.
AOP의 기본 개념은 핵심 기능에 공통 기능을 삽입하는 것이다. 즉 핵심 기능의 코드를 수정하지 않으면서 공통 기능의 구현을 추가하는 것이 AOP이다. 핵심 기능에 공통 기능을 삽입하는 방법에는 다음 세 가지가 있다.
- 컴파일 시점에 코드에 공통 기능을 삽입하는 방법
- 클래스 로딩 시점에 바이트 코드에 공통 기능을 삽입하는 방법
- 런타임에 프록시 객체를 생성해서 공통 기능을 삽입하는 방법
첫 번째 방법은 AOP 개발 도구가 소스 코드를 컴파일 하기 전에 공통 구현 코드를 소스에 삽입하는 방식으로 동작한다. 두 번째 방법은 클래스를 로딩할 때 바이트 코드에 공통 기능을 클래스에 삽입하는 방식으로 동작한다. 이 두가지는 스프링 AOP에서는 지원하지 않으며 AspectJ와 같이 AOP 전용 도구를 사용해서 적용할 수 있다.
스프링이 제공하는 AOP 방식은 프록시를 이용한 세 번째 방식이다. 두 번째 방식을 일부 지원하지만 널리 사용되는 방법은 프록시를 이용한 방식이다. 프록시 방식은 중간에 프록시 객체를 생성한다. 그리고 실제 객체의 기능을 실행하기 전/후에 공통 기능을 호출한다.
AOP 주요 용어
용어 | 의미 |
Advice | 언제 공통 관심 기능을 핵심 로직에 적용할 지를 정의하고 있다. 예를 들어 '메서드를 호출하기 전'(언제)에 '트랜잭션 시작'(공통 기능) 기능을 적용한다는 것을 정의한다. |
Joinpoint | Advice를 적용 가능한 지점을 의미한다. 메서드 호출, 필드 값 변경 등이 Jointpoint에 해당한다. 스프링은 프록시를 이용해서 AOP를 구현하기 때문에 메서드 호출에 대한 jointpoint만 지원한다. |
Pointcut | Jointpoint의 부분 집합으로서 실제 Advice가 적용되는 Jointpoint를 나타낸다. 스프링에서는 정규 표현식이나 AspectJ의 문법을 이용하여 Pointciut을 정의할 수 있다. |
Weaving | Advice를 핵심 로직 코드에 적용하는 것을 weaving이라고 한다. |
Aspect | 여러 객체에 공통으로 적용되는 기능을 Aspect라고 한다. 트랜잭션이나 보안 등이 Aspect의 좋은 예이다. |
스프링에서 구현 가능한 Advice 종류
종류 | 설명 |
Before Advice | 대상 객체의 메서드 호출 전에 공통 기능을 실행한다. |
After Returing Advice | 대상 객체의 메서드가 익셉션 없이 실행된 이후에 공통 기능을 실행한다. |
After Throwing Advice | 대상 객체의 메서드를 실행하는 도중 익셉션이 발생한 경우에 공통 기능을 실행한다. |
After Advice | 익셉션 발생 여부에 상관없이 대상 객체의 메서드 실행 후 공통 기능을 실행한다.(try-catch-finally의 finally 블록과 비슷하다.) |
Around Advice | 대상 객체의 메서드 실행 전, 후 또는 익셉션 발생 시점에 공통 기능을 실행하는데 사용된다. |
출처: www.yes24.com/Product/Goods/62268795
스프링5 프로그래밍 입문
스프링 프레임워크의 버전업으로 개선된 내용을 담았다. 처음 스프링을 배우고자 하는 독자들이 입문할 때 필요한 것은 스프링의 방대한 내용이 아닌 기초와 전반적인 흐름을 잡아주는 것으로
www.yes24.com
'프로그래밍 > Spring' 카테고리의 다른 글
[SPRING] 스프링 웹 개발 기초 (2) | 2022.09.20 |
---|---|
[SPRING] 프로젝트 환경설정 (0) | 2022.09.18 |
[spring] 빈 라이프사이클과 범위 (0) | 2021.04.15 |
[spring] 컴포넌트 스캔 (0) | 2021.04.12 |
[spring] 의존 자동 주입 (0) | 2021.04.12 |