본 문서는 인프런의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (김영한) 강의를 공부하며 작성한 개인 노트입니다.
🔫 AOP가 필요한 상황
AOP가 필요한 상황
- 모든 메소드의 호출 시간 측정
- 공통 관심 사항(cross-cutting concern) vs. 핵심 관심 사항(core concern)
- 공통 관심 사항: 시간을 측정하는 로직
- 핵심 관심 사항: 비즈니스 로직 등
문제
try-catch 형태로 인해 시간을 측정하는 로직(공통 관심 사항)과 비즈니스 로직(핵심 관심 사항)이 섞여 유지보수가 어려움
- 시간을 측정하는 로직을 별도의 공통 로직으로 만들기 힘듬
- 코드 변경 시 모든 로직을 찾아가며 변경해야 함
💇🏻♀️ AOP 적용
AOP: Aspect Oriented Programming
- 공통관심사항과 핵심관심사항의 분리
- 시간측정로직을 한 곳에 모두 모으고 원하는 곳에 적용
implementation
- src/main/java/hello.hellospring/aop 패키지 생성
- aop 내 TimeTraceAop 파일 생성
- 클래스에 @Aspect 에노테이션 적용
- 클래스 안에 execute 메소드 구현 > @Around 에노테이션 적용
- SpringConfig에 bean 등록 (클래스에 @Component으로 대체 가능)
AOP 장점
- 핵심관심사항과 공통관심사항의 분리
- 시간 측정 로직을 별도로 분리
- 핵심관심사항은 깔끔하게 유지
- 유지보수가 용이
- 원하는 대상에만 적용 가능