AOP (Aspect Oriented Programming)
간단하게 말하면, 프로그램에서 여기저기에 공통으로 들어가는 코드가 있다면 그 코드를 따로 모듈화시켜서 재사용하는 하는 것을 말합니다.
위키백과에서 인용한 문구입니다.
It does so by adding additional behavior to existing code (an advice) without modifying the code itself, instead separately specifying which code is modified via a "pointcut" specification, such as "log all function calls when the function's name begins with 'set' ".
기존 코드를 수정하지 않고 추가적인 메소드를 사용하는 방법입니다. 그러면 기존 코드는 무엇이고 추가되는 코드는 무엇일까요? Aspect Oriented Programming을 생각해보면, 관점 지향 프로그래밍입니다. AOP에서는 핵심적인 관점과 부가적인 관점으로 나누어서 모듈화 합니다.
아래 이미지에서 서비스 1과 2, 3은 핵심 기능입니다. 그런데 코드에서 Pre()과 Post()라는 공통된 메소드가 있는 것을 볼 수 있습니다. 이것들을 매번 추가, 삭제, 수정하기는 굉장히 번거롭습니다. 그래서 Pre()와 Post()를 따로 분리하여 사용합니다. 따로 분리한 모듈은 쉽게 재사용 할 수 있습니다.
AOP 용어
- Aspect : 적용할 부가 공통 기능.
- Target : 핵심 기능을 담은 모듈. 부가 기능을 부여할 대상.
- Advice : Aspect을 언제 핵심 코드에 적용할 지 정의.
- Joinpoint : Advice를 적용 가능한 지점.
- Pointcut : Joinpoint의 부분 집합으로, Advice가 적용되는 Joinpoint
- Weaving : Advice를 핵심 코드에 적용한 것.
- Advice 종류
* Before advice : joinpoint가 실행되기 전에 실행되는 Advice.
* After returning advice : joinpoint가 완료되고 리턴한 다음에 실행되는 advice.
* After throwing advice : joinpoint가 Exception을 던지면 종료된 다음에 실행되는 advice.
* After advice : joinpoint가 정상적으로 종료된 여부에 관계 없이 항상 실행되는 advice.
* Around advice : 가장 강력한 advice로 method 호출의 이전과 이후에 특정한 행동을 수행하도록 하는 것도 가능.
더 자세한 설명은 여기에서 찾아보세요. 공식 레퍼런스는 여기입니다.
프록시 패턴 (Proxy Pattern)
프록시 패턴이라는 디자인 패턴을 사용해서 AOP 효과를 낼 수 있습니다. 기존의 코드를 변경하지 않고 기능을 추가할 수 있습니다.
Spring에서는 어노테이션(Annotation)을 이용한 쉬운 AOP를 할 수 있기 때문에 자세히 다루지 않겠습니다. 프록시 패턴을 만드는 방법은 이 분의 블로그를 참고했습니다.
Spring AOP
스프링은 어노테이션(Annotation) 기반의 AOP를 제공합니다. 개발자는 어노테이션을 만들어서 AOP를 적용할 수 있습니다.
아직 사용하지 않기 때문에 만드는 방법은 나중에 올리겠습니다. 혹시, 어노테이션을 만들 때 선언해야 할 Aspect, Pointcut, Advice를 알고 싶으면 Spring 공식 레퍼런스인 여기를 참고하시면 됩니다.
참고
- 위키백과
'IT > Spring' 카테고리의 다른 글
[안드로이드 앱 서버 만들기] 2. AWS EC2와 MariaDB 생성 (0) | 2021.07.06 |
---|---|
[안드로이드 앱 서버 만들기] 1. 프로젝트 생성 (0) | 2021.07.03 |
[IntelliJ] 내가 필요한 단축키 모음 (0) | 2021.06.26 |
PSA (Portable Service Abstraction) (0) | 2021.06.24 |
IoC (Inversion of Control) (0) | 2021.06.22 |