본문 바로가기
Back End/Spring

Spring - AOP

by SolaKim 2023. 7. 5.

AOP가 필요한 상황

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

출처 : 김영한님의 스프링 입문

MemberService에서 

이와같이 로직하나하나 시간 측정 코드를 추가할 수 있지만 로직이 몇백개가 된다면.. 비효율적이고 시간이 너무 많이 걸린다.

🔻 문제

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

 

해결방법 :

출처 : 김영한님의 스프링 입문

 

./aop/TimeTraceAop.java

@Aspect
@Component
public class TimeTraceAop {
    @Around("execution(* hello.hellospring..*(..))") //hello.hellospirng하위에 모두 적용
    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");

        }
    }
}

이와 같이 aop를 이용하면 

spring 실행 콘솔에서 시간 측정이 제대로 되는것을 확인할 수 있다.

 

해결!!

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

Aop 적용 전 의존관계
aop 적용 후 의존 관계
aop 적용 전 전체 그림
aop 적용 후 전체 그림

출처 : 김영한님의 스프링 입문

'Back End > Spring' 카테고리의 다른 글

Spring - 객체 지향 프로그래밍이란  (0) 2023.07.05
Spring - 스프링이란?  (0) 2023.07.05
Spring - DB접근6 (스프링 데이터 JPA)  (0) 2023.07.05
Spring - DB접근5 (JPA)  (0) 2023.07.04
Spring - DB접근4 (JdbcTemplete)  (0) 2023.07.04