주니어 개발자 성장기

6. AOP란? 본문

Spring/입문

6. AOP란?

Junpyo Lee 2022. 7. 5. 03:56

AOP란

공통 관심 사항(cross-cutting concerns)과

핵심 관심 사항(core concerns) 중에서

 

공통 관심 사항을 축약할 수 있도록 도와주는 기술이다.

 

공통 관심 사항이란, 비즈니스 로직에서 공통적으로 필요한 항목들(메서드의 호출 시간 측정)을 말하고

핵심 관심 사항은 비즈니스 로직에서 다른 비즈니스와 구분되게 해주는 핵심적인 것이라고 할 수 있다.

 

메서드가 호출되면 AOP가 이를 인터셉트해서 코드를 중간 중간에 실행해주고 

어떤 때에 인터셉트 할지 안할지를 쉽게 프로그래밍 할 수 있다.

 

그럼 어떻게 적용할까?

@Aspect
@Component
public class TimeTraceAop {

    @Around("execution(* hello.hellospring..*(..))")
    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");
        }
    }
}

@Aspect, @Component 어노테이션을 사용했는데, 컴포넌트 스캔을 이용하는 대신에 수동으로 스프링빈으로 등록해줄 수도 있다.

 

또한 @Around 어노테이션으로 적용범위를 정한다.

 

 

 

원리는?

스프링 컨테이너가 대상이 되는 클래스의 복제 클래스(프록시)를 만들어 낸다.

복제된 클래스의 메서드가 끝나면 실제 클래스의 메서드가 호출되는 방식이다.

 

-> 프레임워크마다 AOP의 방식은 다르나, 스프링은 상기한 바와 같다고 한다.

 

'Spring > 입문' 카테고리의 다른 글

5. Jdbc의 비교  (0) 2022.07.05
4. 스프링 빈 등록  (0) 2022.07.01
3. Test Case 작성  (0) 2022.06.30
2. 인텔리제이 단축키, 편의 명령어  (0) 2022.06.30
1. 웹 개발 기초  (0) 2022.06.27