- Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다.
- '핵심기능': 각 API 별 수행해야 할 비즈니스 로직
ex) 상품 키워드 검색, 관심상품 등록, 회원 가입, 관심상품에 폴더 추가, ....
- '부가기능': 핵심기능을 보조하는 기능
ex) 회원 패턴 분석을 위한 로그 기록, API 수행시간 저장
- 문제점
- 모든 '핵심기능'의 Controller 에 '부가기능' 코드를 추가했을 때..
- '핵심기능' 이 100개라면??
- 100개의 '핵심기능' 모두에 동일한 내용의 코드 추가 필요
- '핵심기능' 수정 시
- 같은 함수 내에 '핵심기능'과 '부가기능'이 섞여 있음
- '핵심기능' 이해를 위해 '부가기능'까지 이해 필요
- '부가기능'의 변경이 필요하다면??
- '핵심기능'의 개수만큼 '부가기능'도 수정해 줘야 함
- '부가기능' 삭제
- 부가기능을 모듈화
- AOP (Aspect Oriented Programming) 를 통해 부가기능을 모듈화
- '부가기능'은 '핵심기능'과는 관점(Aspect), 관심이 다름
- 따라서 '핵심기능'과 분리해서 '부가기능' 중심으로 설계, 구현 가능
- 스프링이 제공하는 AOP
개념적 이해
스프링 실제 동작
AOP 적용 전
AOP 적용 후