정리/Spring

[Spring] 스프링 입문 7) AOP

민발자 2023. 10. 15. 23:00
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