본문 바로가기
스터디/Spring

[Spring] AOP(Aspect Oriented Programming)란?

by zoodi 2021. 7. 4.
728x90
AOP란?

AOP(Aspect Oriented Programming)는 직역하면 "관점지향 프로그래밍"이다.

한 마디로 정의하자면 AOP는 흩어진 코드를 한 곳으로 모으는 코딩 기법.

어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다.

AOP를 사용하면 공통 관심 사항과 핵심 관심 사항을 분리하여 로직을 구현 할 수 있다. (공통 관심 사항을 AOP로 구현)

 

-AOP 사용 장점

  • 핵심 관심 사항과 공통 관심 사항 분리 가능
  • 핵심 관심 사항을 깔끔하게 유지 가능
  • 공통 관심 사항 로직 변경 용이
  • 원하는 적용 대상 선택 가능

 

EX) AOP 등록 예시코드 - TimeTraceAop.java

@Aspect
@Component
public class TimeTraceAop {

    // 공통관심사항 적용 할 타겟 지정
    @Around("execution(* hello.hellospring..*(..))")
    public Object excute(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로 빼낸다면 훨씬 더 깔끔하게 코드를 작성하고 코드를 수정하기에도 효율적이다.

 

@Around 어노테이션 옆에 aop를 적용 할 타겟 지정이 가능하다. 위 예시 코드의 경우 hello.hellospring 하위 아래 모든 클래스에 aop를 적용한다는 의미이다.

 

 


*참조

1.스프링 프레임워크 입문 (인프런) - 백기선

2.스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB접근 기술 (인프런) - 김영한

3.https://engkimbs.tistory.com/746 [새로비]

728x90

댓글