AOP 사용 이유
- 소스코드는 크게 두 가지 형태인 비즈니스 영역과 부가기능 영역(로깅, 보안, 트랜잭션)으로 나뉜다.
- 반복되는 부가기능 영역을 유지보수 좋게 하나의 모듈로 만들어서 사용하면, 반복되는 소스코드가 줄어든다.
- "
반복되는 소스코드가 줄어든다." 라는 말의 의미는 유지보수가 좋아진다. 라는 의미.
- 즉 한 마디로, AOP 쓰는 이유 ==> 개발자들은 비즈니스 영역에만 집중할 수 있고 부가기능 영역은 AOP로 분리하여 유지보수 좋은 환경을 구축할 수 있다.
AOP 용어 정리
Target
Advice
Join Point
Pointcut
- 어드바이스를 적용할 타겟의 메서드를 선별하는 정규표현식이다. (하단의 그림 참고)
Weaving
- 조인 포인트에 부가기능(advice)을 삽입하는 과정
- AOP가 핵심기능(타겟)의 코드에 영향을 주지 않으면서 필요한 부가기능(advice)를 추가할 수 있도록 해주는 핵심적인 처리과정이다.
횡단 관심사
- 반복적으로 수행되는 로깅, 트랜잭션, 보안과 같은 기능들을 '횡단 관심사'라고 지칭한다.
실습환경 Spec
- Gradle ver : 8.2.1
- springBoot ver : 2.7.16
- Java ver : 11
implementation('org.springframework.boot:spring-boot-starter-aop:2.7.10')
AOP 실습 환경 구축
@Aspect
@Component
public class AopDemo {
@Around(value = "execution(* com.example.controller..*(..)) " +
"|| execution(* com.example.service..*(..)) " +
"|| execution(* com.example.domain..*(..))" +
"|| execution(* com.example.infra..*(..))")
public void range(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println(">>>>>>>>>>>>>>>>>>>> message : range") ;
joinPoint.proceed();
}
}
- Controller와 Service 클레스 생성
@RestController
@Log4j2
public class AopController {
@Autowired
AopService aopService ;
@GetMapping("/aopTest")
public void aopTest(){
log.info("aopTest 출력") ;
aopService.aopTest();
}
}
@Service
@Log4j2
public class AopService {
public void aopTest() {
log.info("aopService 출력") ;
}
}
AOP 실습 환경 테스트
- 위와 같이 설정하고 'Send' 버튼을 클릭한다.
실행 결과