728x90
반응형
- 이 글은 필자가 공부 정리하는 잡 글입니다.
AOP(Aspect Oriented Programming) [관점 지향 프로그래밍]
어떤 로직을 기준으로 핵심적인 관점, 공통적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화
- 여러 객체에 공통으로 적용할 수 있는 기능을 분리
- 재사용성을 높여주는 프로그래밍 기법.
[활용]
- 메소드 실행 시 로그 기록과 같은 공통 기능을 프록시가 수행하도록 하고 메소드는 핵심 기능만 작성
- DB연동시 공통으로 들어가는connection, close 작업을 프록시가 수행하고 각 메소드는 DB쿼리의 핵심 기능만 수행
[구현]
- 컴파일 시점에 코드에 공통 기능을 삽입하는 방법
- 클래스 로딩 시점에 바이트 코드에 공통 기능을 삽입하는 방법
- 런타임에 프록시 객체를 생성해서 공통 기능을 삽입하는 방법 [스프링에서 제공하는 방식]
[주요 용어]
Advice [When] | 언제 공통 관심 기능을 핵심 로직에 적용할 지 정의 |
Joinpoint [Where] | Advice를 적용할 수 있는 지점 의미. 메소드 호출이 해당 |
Pointcut [At] | Joinpoint의 부분 집합으로 실제 Advice가 적용되는 Joinpoint |
Weaving | Advice를 핵심 로직 코드에 적용하는 행위 |
Aspect [What] | 여러 객체에 공통으로 적용되는 기능 |
[Advice 종류(공통 기능 적용 시기)]
Before Advice | 대상 객체의 메서드 호출 전 |
After Returning Advice | 대상 객체의 메서드가 Exception 없이 실행된 이후 |
After Throwing Advice | 대상 객체의 메서드 실행 중 Exception 발생 시 |
After Advice | Exception 여부와 상관없이 메서드 실행 후 |
Around Advice | 대상 객체의 메서드 실행 전,후 또는 Exception 발생 시점. |
클래스 1, 2, 3에 공통인 코드를 각각 작성하면 3번의 반복 작업이 필요하지만
공통적인 부분은 한번만 작성하고 필요한 곳에 호출하여 사용할수 있도록 하는 개념
호출을 개발자가 할 것인지, 스프링에서 할 것인지.
시간 측정 하는 예시
- Factorial을 구하는 두 개의 클래스를 만들어 시간을 측정
반복문을 이용하여 factorial을 구하는 클래스와 재귀문을 이용하여 factorial을 구하는 클래스
프록시(Proxy)
반응형