AOP
AOP(Aspect Oriented Programming)공식문서
AOP를 한글로 번역하면 관심 지향 프로그래밍 정도로 해석할 수 있음
AOP에서의 Aspect는 애플리케이션에 필요한 기능 중에서 공통적으로 적용되는
공통 기능에 대한 관심과 관련이 있음
## 공통 관심 사항과 핵심 관심 사항
면 애플리케이션 전반에 걸쳐 공통적으로 사용되는 기능들이 있기 마련인데,
이러한 공통 기능들에 대한 관심사를 바로 공통 관심 사항(Cross-cutting concern)이라고 함
비즈니스 로직 즉, 애플리케이션의 주목적을 달성하기 위한 핵심 로직에 대한 관심사를
핵심 관심 사항(Core concern)이라고 함
핵심 관심 사항에 반대되는 개념으로 공통 관심 사항을 부가적인 관심 사항이라고 표현하기도 함
커피 주문을 위한 애플리케이션을 예로 들면,
커피 전문점의 주인이 고객에게 제공하는 커피 메뉴를 구성하기 위해 커피 종류를 등록하는 것과
고객이 마시고 싶은 커피를 주문하는 기능은 애플리케이션의 핵심 관심 사항에 해당 됨
하지만 커피 주문 애플리케이션에 아무나 접속하지 못하도록 제한하는 애플리케이션 보안에 대한 부분은 애플리케이션 전반에 공통적으로 적용되는 기능이기 때문에 공통 관심 사항에 해당 됨
애플리케이션의 핵심 업무 로직에서 로깅이나 보안, 트랜잭션 같은 공통 기능 로직들을 분리하는 것
AOP를 사용하는 이유
핵심 로직에서 공통 기능을 분리하는 이유
- 코드의 간결성 유지
- 객체 지향 설계 원칙에 맞는 코드 구현
- 코드의 재사용
Spring AOP
의존성 추가
1
2
3
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-aop'
}
1. 주요 용어 이해하기
| 용어 | 설명 |
|---|---|
| Aspect | - 공통적인 기능들을 모듈화 한것을 의미합니다. |
| Target | - Aspect가 적용될 대상을 의미하며 메소드, 클래스 등이 이에 해당 됩니다. |
| Join point | - Aspect가 적용될 수 있는 시점을 의미하며 메소드 실행 전, 후 등이 될 수 있습니다. |
| Advice | - Aspect의 기능을 정의한 것으로 메서드의 실행 전, 후, 예외 처리 발생 시 실행되는 코드를 의미합니다. |
| Point cut | - Advice를 적용할 메소드의 범위를 지정하는 것을 의미합니다. |
2. 주요 어노테이션
| 메서드 | 설명 |
|---|---|
| @Aspect | 해당 클래스를 Aspect로 사용하겠다는 것을 명시합니다. |
| @Before | 대상 “메서드”가 실행되기 전에 Advice를 실행합니다. |
| @AfterReturning | 대상 “메서드”가 정상적으로 실행되고 반환된 후에 Advice를 실행합니다. |
| @AfterThrowing | 대상 “메서드에서 예외가 발생”했을 때 Advice를 실행합니다. |
| @After | 대상 “메서드”가 실행된 후에 Advice를 실행합니다. |
| @Around | 대상 “메서드” 실행 전, 후 또는 예외 발생 시에 Advice를 실행합니다. |
This post is licensed under CC BY 4.0 by the author.