1. AOP의 의미와 필요성, 사용되는 용어들에 대해 이해할 수 있다.
- AOP (Aspect Oriented Programming)
✔︎ 부가 기능과 해당 부가 기능을 어디에 적용할 것인지 정의한 것
✔︎ 분리한 부가 기능과 그 기능들을 어디에 적용할지 선택하는 기능을 합해서 하나의 모듈로 만든 것
✔︎ 애플리케이션을 바라보는 관점을 하나 하나의 기능에서 횡단 관심사(cross-cutting concerns) 관점으로 보는 것
✔︎ 애스펙트를 사용하여 다양한 기능들을 분리
✔︎ 핵심 기능과 부가 기능을 분리하고, 분리된 부가 기능을 어디에 적용할 지 선택하는 기능들을 만듦
✔︎ 기존 사용하던 OOP를 대체하기 위한 것이 아닌, 횡단 관심사를 깔끔하게 처리하기 위해 OOP의 부족한 부분을 보조하는 역할
✔︎ 핵심 기능(Core Concerns) : 객체가 제공하는 고유의 기능
(업무 로직 등)을 포함하는 기능
✔︎ 부가 기능(Cross-Cutting Concerns) : 핵심 기능을 도와주는 부가적인 기능
로깅
, 보안
, 트랜잭션
등✔︎ Aspect
어드바이스(Advice)
와 어드바이스를 어디에 적용할지 결정하는 포인트컷(PointCut)
을 합친 개념✔︎ 정의된 기능을 재사용
하기 위해 동작보다는 객체 중심
으로 프로그래밍
✔︎ 공통된 목적
을 띈 데이터와 동작을 묶어 하나의 객체
로 정의하는 것이 핵심🌟
✔︎ 객체를 적극적으로 활용함으로써 기능을 재사용할 수 있는 것이 큰 장점
✔︎ 객체를 잘 활용하기 위해선 관심사 분리(Separation Of Concerns, SOC)
의 디자인 원칙을 준수해야 함
✔︎ 주요 개념
@Controller
, @Service
, @Repository
와 같이 관심사별로 계층을 나눠 객체를 관리모듈화
의 핵심✔︎ 문제점
공존
하게 됨 🚨비즈니스 코드 파악
어려움모듈화
가 어려움✔︎ OOP의 모듈화 핵심 단위는 클래스
이고, AOP의 모듈화 핵심 단위는 관점
✔︎ Aspect는 여러 유형과 객체 간에 발생하는 문제(ex.트랜잭션)의 모듈화를 가능하게 함
✔︎ 조인 포인트 (Join Point)
관심 코드(aspect code)
추가 가능자동
추가프록시 방식
을 사용하므로, 조인 포인트는 항상 메소드 실행 지점
으로 제한✔︎ 어드바이스 (Advice)
조인포인트 S
를 선택✔︎ 포인트컷 (PointCut)
위치
를 선별하는 기능메소드 실행 지점
만 포인트컷으로 선별 가능✔︎ 위빙 (Weaving)
✔︎ AOP 프록시 (Proxy)
JDK 동적 프록시
또는 CGLIB 프록시
✔︎ 타겟 (Target)
✔︎ 어드바이저 (Advisor)
☞ DI보다는 좀 더 이해가 가는 내용들이었다. 아직 실습은 못해봤지만 ,,, 😅
내일까지 AOP를 공부하는 시간으로 잡혀있기에 직접 실습해가면서 내 것으로 만들어야겠다. DI 보다야 덜 중요하다 하지만 알고 지나가는 것과 모르고 지나가는 것은 확실히 다르기에... 최선을 다해서 이해하겠다 😤 오늘도 고생했뜨ㅏ!!!!
・ AOP (Aspect Oriented Programming)