minghxx.blog
  • [Spring] 스프링 입문 7) AOP
    2023년 10월 15일 23시 00분 24초에 업로드 된 글입니다.
    작성자: 민발자
    728x90

    스프링 입문 - 스프링 부트 웹 MVC, DB 접근 기술 

    Session 7 AOP

    1. AOP가 필요한 상황

    1) AOP가 필요한 상황

    회원가입과 같은 로직은 핵심 관심사항, 시간 측정과 같은 로직은 공통 관심 사항이라고 함

    공통 관심 로직이 핵심 비즈니스 로직과 섞이면 유지보수가 어렵다.

    공통 관심 로직을 별도의 공통 로직으로 만들기 매우 어렵고 로직을 변경할 때 모든 로직을 찾아가며 변경해야함

    ▶ 이러한 문제점을 해결하기 위해 AOP를 적용


    2. AOP적용

    1) AOP(Aspect Oriented Programming)

    공통 관심사항과 핵심 관심 사항을 분리

     

    2) 시간 측정 AOP 작성

    @Aspect // AOP 적용
    @Component // 스프링 빈으로 등록하기위해 componentScan방식 사용
    public class TimeTraceAop {
    
        @Around("execution(* hello.hellospring..*(..))") // AOP를 어디에 적용할 것인지 타게팅
        public Object execute(ProceedingJoinPoint joinPoint) throws Throwable{
            long start = System.currentTimeMillis();
            System.out.println("START : " + joinPoint.toString());
    
            try {
                return joinPoint.proceed(); // 메서드 진행
            } finally {
                long finish = System.currentTimeMillis();
                long timeMs = finish - start;
                System.out.println("END : " + joinPoint.toString() + " " + timeMs + "ms");
            }
        }
    }

     

    3) 동작 방식

    왼) AOP 적용 전 의존관계 오) AOP 적용 후 의존관계

    프록시 기술로 컨테이너에 가짜 멤버 서비스 빈을 만들어 진짜 멤버 서비스 앞에 등록

    joinPoint.proceed()통해 실제 멤버 서비스를 호출할 수 있음

    컨트롤러가 호출하는 것은 가짜 멤버 서비스

    왼) AOP 적용 전 전체그림 오) AOP 적용 후 전체 그림

     

     

    728x90
    댓글