스프링 입문 7 - AOP

박철민·2022년 8월 29일
0

스프링 완전 정복

목록 보기
8/8

AOP


AOP가 필요한 상황

  • 모든 메서드의 호출 시간을 측정하고 싶다면?
  • 공통 관심사항(cross-cutting concern) vs 핵심 관심 사항(core concern)
  • 회원 가입 시간, 회원 조회 시간을 측정하고 싶다면?

문제

  • 회원가입, 회원 조회에 시간을 측정하는 기능은 핵심 관심 사항이 아니다.
  • 시간을 측정하는 로직은 공통 관심 사항이다.
  • 시간을 측정하는 로직과 핵심 비즈니스의 로직이 섞여서 유지보수가 어렵다.
  • 시간을 측정하는 로직을 별도의 공통 로직으로 만들기 매우 어렵다.
  • 시간을 측정하는 로직을 변경할 때 모든 로직을 찾아가면서 변경해야 한다.

AOP 적용

세상에 많은 개발자들이 저 위의 메서드를 고치는 것을 고민을 하였다.

AOP : Aspect Oriented Programming
공통 관심 사항과 핵심 관심 사항을 나눠서 생각을 해본다.,

package hello.hellospring.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Aspect;

@Aspect
public class TimeTraceAop {

    public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
        long start = System.currentTimeMillis();

        try {
            return joinPoint.proceed();
        } finally {
            long finish = System.currentTimeMillis();
            long timeMs = finish - start;
            System.out.println("END :  " + joinPoint.toString() + " " + timeMs + "ms");
        }
    }
}

@Aspect를 통해 AOP 등록해줌

component어노테이션을 직접 적어도 되는데 Bean 등록을 더 선호
https://programmingrecoding.tistory.com/13

SpringConfig

    @Bean
    public TimeTraceAop timeTraceAop() {
        return new TimeTraceAop();
    }

공통 관심사항을 적용하는 것
@Around

    @Around("execution(* hello.hellospring..*(..))")

hellospring 패키지 밑에서 모든 것들이 적용이 된다.
해결

  • 회원가입, 회원 조회등 핵심 관심사항과 시간을 측정하는 공통 관심 사항을 분리한다.
  • 시간을 측정하는 로직을 별도의 공통 로직으로 만들었다.
  • 핵심 관심 사항을 깔끔하게 유지할 수 있다.
  • 변경이 필요하면 이 로직만 변경하면 된다.
  • 원하는 적용 대상을 선택할 수 있다.
@Around("execution(* hello.hellospring.service..*(..))")

라고 명시하면 service패키지 내에 것만 적용이 된다.

스프링의 AOP 동작 방식 설명

AOP 적용 전 의존 관계

컨트롤에서 서비스를 호출한다.

의존 관계를 호출 한다.

AOP 적용 후 의존 관계

서비스에 AOP가 있으면 가짜 멤버 서비스를 만듭니다(프록시)

빈을 등록할때 가짜가 등록이 된다.

가짜가 끝이 나면

joinPoint.proceed()을 통해 진짜를 호출한다.

https://velog.io/@solar/AOP-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4-%EB%A1%9C%EA%B7%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%82%A8%EA%B8%B0%EA%B8%B0

스프링 입문을 위한 자바 객체지향의 원리와 이해

AOP 적용 전 전체 그림

AOP 적용 후 전체 그림

AOP 적용을 다하면 다음과 같이 됩니다.

AOP 기술에는 가짜를 만들어서 해준다. 이게 DI가 해준다. 이런 점이 DI로 좋다.

profile
넓고 깊은 지식을 위해 삽질 중

0개의 댓글