AOP (Aspect-Oriented Programing) : 관점 지향 프로그래밍
OOP (객체 지향 프로그래밍)을 보완하는 수단으로, 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법이다.
흩어진 관심사, 횡단 관심사 (Crosscutting Concerns)의 분리를 허용해 -> 모듈성 증가시키는 것이 목적! 인 프로그래밍 패러다임
여러 객체에 공통 적용할 수 있는 기능 분리해 반복작업 줄이고 핵심 기능에만 집중할 수 있음.
프록시를 사용하자!
프록시(대리자)는 자신이 타깃인것처럼 위장해 클라이언트의 요청을 받아줌.
클라이언트 ----> 프록시 ----> 타깃
공통되는 부가 기능
핵심 기능과 부가 기능의 관점을 분리! -> 부가 기능에서 바라보는 공통된 부분 추출하는 것이 AOP의 개념.
핵심 기능 코드 수정하지 않으면서 반복 공통 부가 기능 추가하는 것이 AOP의 기본 개념.
스프링에서는 런타임 시점에 프록시 객체를 생성하여 공통 기능 삽입 방법으로 AOP 구현.
런타임 시점 : 자바 언어 실행된 이후 -> 자바에서 제공하는 기능인 프록시 생성해 공통기능 삽입.
So 스프링 AOP는 메서드 실행 시점에만 AOP 적용 가능하고, 스프링 컨테이너가 관리할 수 있는 빈에만 AOP 적용 가능.
<참고>