Git :)

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AOP 용어 및 적용 방법
    Spring Boot/AOP 2023. 10. 22. 18:47
    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 실습 환경 구축
    • 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' 버튼을 클릭한다.
    실행 결과