[인프런] 김영한님 스프링 입문 정리 [4]

김영신·2022년 4월 19일
0

InfLearn

목록 보기
5/5

AOP란? (Aspect Oriented Programming)

AOP : 관점 지향 프로그래밍

공통 관심 사항(cross-cutting-concern)과 핵심 관심 사항(core concern)을
분리하여 프로그래밍 하는 것

하나의 메서드의 실행 시간을 알아내라고 하면 쉽다.
그런데 모든 메서드의 실행 시간을 알아내라고 하면 어떨까?
모든 메서드들에

이런식으로 다 작성을 해야 될 것이다.
메서드가 1000개라면 1000개 다 위와 같은 방식으로 해야 될 것이다.

모든 메서드가 있는 곳에는 시간 측정 로직이 있어야 되므로 위와 같은 그림이 될 것이다.

이것을 해결하기 위하여 나온 것이 AOP 이다.

TimeTraceAop라는 클래스를 만든 후 @Aspect
스프링 빈 등록을 위한 @Component
혹은 @Bean 으로 SpringConfig에 지정하거나 하고

해당 시간 구하는 로직을 구현하여 이 메서드가 어느 범위에서 사용이 될지를 알려주는 @Around 어노테이션을 사용.
joinPoint.proceed();를 이용해 기존의 메서드를 실행하면서
실행이 끝난다면 콘솔로 시간이 얼마나 걸렸는지 출력

동작화면

  • 이로써 핵심 로직인 가입이나, 찾기 이런 기능이 핵심 관심 사항의 로직과 시간을 측정하는 공통 관심 사항을 분리하였다.
  • 핵심 관심 사항을 깔끔하게 유지할 수 있다.

원리


스프링 컨테이너가 AOP를 적용하면 스프링 빈을 불러오기 전에 가짜 프록시 객체를 만들어서 AOP를 실행시키고 AOP가 실행이 다 된다면 proceed를 통해 진짜 스프링 빈을 불러와 실행을 하게 된다.

주관적인 느낀점

이 원리는 의존성 주입(DI)이 가능하기 때문에 사용가능한 프로그래밍인 것 같다.
스프링 컨테이너는 스프링 빈으로 등록하면 자동으로 DI를 해준다.
이 과정에서 스프링 컨테이너가 DI의 주체가 되기 때문에 AOP를 적용하는 경우에도 스프링 컨테이너가 DI하기전에 AOP를 먼저 적용 할 수 있는 것이 아닐까 생각해본다.

profile
어제보다 오늘 더 Developer

0개의 댓글