Categories
Algorithm🧩
백준 📝
BookReview📕
CleanCode✨
Network 📨
Database 🗄
DevOps☁️
에러 일기📕
Etc💬
Fishy Fish 🎣
Spring🌱
AOP
기본 용어
- 관심사
- 어플리케이션을 개발하기 위한 구현 기능들
- 어플리케이션의 비즈니스 중요 기능들
- 횡단 관심사
- 여러 모듈에 걸쳐 공통적이고 반복적으로 필요로 하는 처리 내용
- 횡단 관심사 분리
- 횡단 관심사를 한 곳으로 모는 것
- 실현하는 방법 =
관점 지향 프로그래밍
Aspect Oriented Programming
여러 비즈니스 모듈에서 공통으로 사용되는 횡단 관심사를 중심으로 설계, 개발하는 프로그래밍 기법
- 객체지향 프로그래밍보다 완성도 높인 프로그래밍 패러다임
- 횡단 관심사와 이에 영향 받는 객체간의 결합도를 낮춘다.
- 장점
- 전체 코드에 흩어져 있는 관심사들이 하나의 장소로 응집
- 기타 비즈니스 모듈들은 본질적인 처리들을 위한 핵심 기능에 대한 코드만 기술
- 공통 관심사들은 공통 모듈로 옮겨지므로 코드가 깔끔해짐
- 개발자들은 횡단 관심 모듈을 각각 독립된 모듈로 중복없이 작성
- DI 설정을 통해 핵심 관심 모듈의 적합한 위치에 결합
중요 용어
- Advice: 조인 포인트에 삽입되어 실행되는 코드
- 횡단 관심사 구현 부분
- Join Point: 횡단 관심사가 실행되는 지점
- Advice 적용 가능한 지점
- 클래스 인스턴스 생성 시점, 메소드 호출 시점, 예외 발생 시점
- Pointcut: 수많은 Join Point 중 실제 적용될 지점
- 표현식으로 선별
- 설정은 XML, 어노테이션 방식으로 설정
- Aspect: 공통 관심사의 추상적 명칭
- Advicedhk Pointcut 정보를 조합하여 합친 개념
- Target: 핵심 로직을 구현하는 클래스
- 횡단 관심사를 적용받게 되는 대상으로 어드바이스가 적용되는 객체
- Introduction: Target애 없는 새로운 메서드나 인스턴스 변수를 추가하는 것
- Weaaving: Advice와 Target이 결합되어 Proxy객체를 만드는 과정
- Porxy: Advice가 적용되었을 때 만들어지는 객체
Advice의 유형
- before: 조인포인트 앞에서 실행할 어드바이스
- after: 조인포인트 뒤에서 실행할 어드바이스
- 예외, 일반 종료
- after returning: 조인포인트가 완전히 종료된 다음 실행되는 어드바이스
- 일반종료, 예외
- around: 조인포인트 앞뒤에서 실행되는 어드바이스
- after throwing: 조인포인트에서 예외가 발생했을 때 실행되는 어드바이스
스프링 AOP 설계 방식
Proxy 패턴 방식을 통해 구현
- 어떤 객체를 사용하고자 할 경우 객체를 직접적으로 참고하는 것이 아니라 그 객체를 대리하는 객체를 통해 대상 객체에 접근하는 방식
- 스프링 컨테이너 초기화 과정에서 스프링 빈 객체를 대행할 프록시 객체 생성
- 객체 핵심 코드에 대한 영향 없이 객체의 접근 전, 후에 대한 중요 처리 가능
AOP 구현 3가지 방법
- XML을 이용한 AOP 구현
- XML 스키마 기반의 POJO클래스를 이용한 구현 방식
- Annotation을 이용한 AOP 구현
- 애노테이션 기반의 구현 방식
- 자바 코드를 이용한 AOP 구현
- JAVA 기반의 구현 방식