DevKim
[01] AOP 본문
만약.. 모든 메서드에 대해 시간을 측정하고자 한다면 ?
[ 문제 ]
- 회원가입,회원 조회 같은 비즈니스 로직은 "핵심 관심 사항"이다.
- 그러나, 시간을 측정하는 로직은 "공통 관심 사항"이다.
- 시간을 측정하는 로직과 핵심 비즈니스의 로직이 섞여서 유지보수가 어렵다.
- 시간을 측정하는 로직을 별도의 공통 로직으로 만들기 매우 어렵다.
(시작,끝 점에 모두 시간을 측정해야하므로)
- 시간을 측정하는 로직을 변경할 때 모든 로직을 찾아가면서 변경해야 한다
(분 단위로 보다가 초 단위로 변경하려면 모든 로직을 찾아서 일일이 찾아서 변경해야함)
[ 해결 ]
AOP
: 공통 관심 사항(cross-cutting concern) 과 핵심 관심 사항(core concern) 분리
[ 시간 측정 AOP 등록 ]
@Aspect : AOP 이다!
@Around : 어디에 적용할건지
**com.inflearn.re.01 밑에 있는 하위 모든 폴더에 적용**
→ 메소드 호출할 때마다 인터셉트해서 딱딱 걸리는 작동원리
[해결]
- 회원가입, 회원 조회와 같은 핵심 관심사항과 시간을 측정하는 공통 관심 사항을 분리한다
- 시간을 측정하는 로직을 별도의 공통 로직으로 만들었다
- 핵심 관심 사항을 깔끔하게 유지할 수 있다.
- 변경이 필요하면 이 로직만 변경하면된다.
- 원하는 적용 대상을 선택할 수 있다.
[AOP의 동작 방식]
<AOP 적용 전 의존관계>
<AOP 적용 후 의존관계>
AOP가 있으면,
프록시라는 가짜 멤버 서비스를 만들어낸다.
컨테이너에 스프링 빈을 등록할 때,
진짜 말고 가짜 스프링 빈을 앞에 세워둠.
그리고 이 가짜 스프링 빈이 끝난 후
joinPoint.proceed() 타고 진짜 서비스 호출
<AOP 적용 전 전체 그림>
<AOP 적용 후 전체 그림>
*자료 출처*
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (김영한)
'Spring Boot' 카테고리의 다른 글
[에러 해결] Test code -No runnable method 오류 해결법 (0) | 2021.05.13 |
---|---|
간단한 테스트 코드 작성, Live template으로 자주 쓰는 것들 출력 키워드 만들기 (0) | 2021.05.09 |
[01] 회원 관리 예제 - 회원 웹 기능 (홈 화면 추가,등록,조회 화면 추가) (0) | 2021.05.06 |
[01] 스프링 Bean과 의존관계 - 컴포넌트 스캔과 자동 의존관계 VS. 직접 스프링 빈 등록 (0) | 2021.05.06 |
[01] 회원 관리 예제 - 회원 service 개발 & Test Code 작성 (0) | 2021.05.06 |