AOP
(Aspect Oriented Programming)
횡단 관심사(Cross-Cutting Concern)의 분리를 허용함으로써, 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임
애러 객체에 공통으로 적용할 수 있는 기능을 분리해서 개발자는 반복 작업을 줄이고 핵심 기능 개발에만 집중할 수 있음.
기존 크드의 수정이 필요, 코드 중복 발생 <- 이를 해결하기 위해 프록시를 사용
프록시
자신이 클라이언트가 사용하려고 하는 실제 대상인 것처럼 위장해서 클라이언트의 요청을 받아주는 것(대리인, 대리자)
사용 목적에 따라
1. 클라이언트가 타깃에 접근하는 방법을 제어하기 위해 -> 프록시 패턴
2. 타깃에 부가적인 기능을 부여해주기 위해서 -> 데코레이터 패턴
핵심기능과 부가기능을 분리하여
부가기능에서 바라보는 공통된 부분을 추출(횡단관심사)하는게 AOP의 개념
핵심 기능에 공통 기능을 삽입하는 방법
1. 컴파일 시점에 코드에 공통 기능 삽입
2. 클래스 로딩 시점에 바이트 코드에 공통 기능 삽입
3. 런타임 시점에 프록시 객체를 생성하여 공통 기능 삽입
Spring 에서는 3번 런타임 시점에 프록시를 생성하여 공통 기능을 삽입하는 방법을 사용
컴파일러나 클래스 로더 조작기를 설정하지 않아도 됨
프록시는 메서드 오버라이딩 개념으로 동작하기 때문에, 스프링 AOP는 메서드 실행 시점에만 AOP를 적용할 수 있음
스프링 AOP는 스프링 컨테이너가 관리할 수 있는 빈에만 AOP를 적용할 수 있음
AspectJ를 집접 사용하는 것이 아니라 AspectJ의 문법을 차용하고 프록시 방식의 AOP를 작용
Ioc/DI 컨테이너
Dynamic Proxy
데코레이터 패턴/ 프록시 패턴
자동 프록시 생성 기법
빈 오브젝트의 후처리 조작 기법
Spring에서 AOP 사용
스프링에서 구현 가능한 Advice 종류
Around Advice(@Around)
- 메서드 실행 전, 후 또는 익셉션 발생 시점
Before Advice(@Before)
- 메서드 호출 전
After Returning Advice(@AfterReturning)
-메서드가 익셉션 없이 실행된 이후
After Throwing Advice
- 메서드를 실행하는 도중 익셉션이 발생한 경우
After Advice
- 익셉션 발생 여부 상관 없이 메서드 실행 후
위의 코드는
Object result = joinPoint.proceed();
타깃을 호출 하기 전
long start = System.nanoTime();
실행 시간을 측정하는 코드
'우아한 테크톡' 카테고리의 다른 글
CI/CD와 무중단 배포 (0) | 2023.01.13 |
---|---|
Servlet vs Spring (0) | 2023.01.12 |
웹 소켓 (Web Socket) (0) | 2023.01.11 |
Spring과 Spring Boot의 차이 (0) | 2023.01.11 |
JVM Stack & Heap (0) | 2023.01.10 |
댓글