DevKim

[01] AOP 본문

Spring Boot

[01] AOP

on_doing 2021. 5. 6. 22:41
728x90

만약.. 모든 메서드에 대해 시간을 측정하고자 한다면 ?


[ 문제 ]

- 회원가입,회원 조회 같은 비즈니스 로직은 "핵심 관심 사항"이다.

- 그러나, 시간을 측정하는 로직은 "공통 관심 사항"이다.

- 시간을 측정하는 로직과 핵심 비즈니스의 로직이 섞여서 유지보수가 어렵다.

- 시간을 측정하는 로직을 별도의 공통 로직으로 만들기 매우 어렵다.

(시작,끝 점에 모두 시간을 측정해야하므로)

- 시간을 측정하는 로직을 변경할 때 모든 로직을 찾아가면서 변경해야 한다

(분 단위로 보다가 초 단위로 변경하려면 모든 로직을 찾아서 일일이 찾아서 변경해야함)


[ 해결 ]

AOP

: 공통 관심 사항(cross-cutting concern) 과 핵심 관심 사항(core concern) 분리


[ 시간 측정 AOP 등록 ]

aop>TimeTraceAop

@Aspect : AOP 이다!

@Around : 어디에 적용할건지

**com.inflearn.re.01 밑에 있는 하위 모든 폴더에 적용**

 

→ 메소드 호출할 때마다 인터셉트해서 딱딱 걸리는 작동원리


[해결]

- 회원가입, 회원 조회와 같은 핵심 관심사항과 시간을 측정하는 공통 관심 사항을 분리한다

- 시간을 측정하는 로직을 별도의 공통 로직으로 만들었다

- 핵심 관심 사항깔끔하게 유지할 수 있다.

- 변경이 필요하면 이 로직만 변경하면된다.

- 원하는 적용 대상을 선택할 수 있다.


[AOP의 동작 방식]


<AOP 적용 의존관계>


<AOP 적용 의존관계>

AOP가 있으면,

프록시라는 가짜 멤버 서비스를 만들어낸다.

 

컨테이너에 스프링 빈을 등록할 때,

진짜 말고 가짜 스프링 빈을 앞에 세워둠.

 

그리고 이 가짜 스프링 빈이 끝난 후

joinPoint.proceed() 타고 진짜 서비스 호출


<AOP 적용 전체 그림>

 

<AOP 적용 전체 그림>

 

 

*자료 출처*

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

728x90
Comments