[스프링 입문] AOP 적용

enxnong·2023년 5월 6일
0

Spring

목록 보기
23/26

김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술을 보면서 공부한 내용입니다.

AOP란?

  • Aspect Oriented Programmin (관점 지향 프로그램)
  • 공통 관심 사항(cross-cutting concern)과 핵심 관심 사항(core concern) 분리한다.

AOP 적용

aop 패키지를 만들어 TimeTraceAop 클래스를 생성한다.

@Aspect // AOP를 가능하게 하는 어노테이션
@Component // 스프링 빈으로 등록하는 어노테이션
public class TimeTraceAop {

    @Around("execution(* hello.hellospring..*(..))") // 패키지 하위에 있는 것은 모두 적용
    public Object execut(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");

        }
    }
💡 @Around : 지정된 패턴에 해당하는 메소드의 실행되기 전, 실행된 후 모두에서 동작시키는 어노테이션으로 메소드의 반환 값은 Object여야 한다.
  • pointcut 표현식
    • * : 모든 것
    • .. : 0개 이상
  • execution
    • execution( hello.hellospring..(..))" : hellospring 하위에 있는 것은 모두 적용
💡 joinPoint : AOP를 적용할 수 있는 지점(특정 포인트)을 의미, 인터페이스

해결

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

스프링의 AOP 동작 방식

AOP 적용 의존관계

AOP 적용 의존관계

→ Proxy가 생성됨.


AOP 적용 전체 그림

AOP 적용 전체 그림

프록시 Proxy

  • 클라이언트에서 타겟을 호출하면, 타겟을 감싸고 있는 프록시가 호출되어, 타겟 메소드 실행 전에 선처리, 타겟 메소드 실행 후 후처리를 실행시키도록 구성.
  • getClass()를 통해 프록시 확인하기
@Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
        System.out.println("memberService : " + memberService.getClass());
    }

profile
높은 곳을 향해서

0개의 댓글