❯ AOP(Aspect Oriented Programming)
애플리케이션을 보는 관점이 하나의 기능이 아니라 횡단관심사(cross-cutting concerns) 관점으로 보는것이다.
일반적으로 OOP에서 각 객체는 하나의 기능을 구현하도록 설계했는데, 여러 객체에 걸친 공통적인 기능이 있을경우
객체마다 해당 코드를 직접 작성하게되면 중복된 코드가 많아지고 수정이 필요할 경우 여러군데를 수정해야하는 번거로움이 생긴다.
이를 보완하기 위한것이 AOP로, 부가기능을 따로 분리하여 해당 부가기능을 어디에 적용할지를 정해서 하나의 모듈로 만든것이다.
즉, OOP 모듈화의 핵심은 클래스이고 AOP 모듈화의 핵심은 관점이다.
❯ AOP 관련 용어
- Aspect : 여러 객체에 공통적으로 적용되는 기능을 말한다. Advice와 Pointcut을 합쳐서 모듈화한 개념이다.
- JoinPoint : 애플리케이션 실행 흐름에서 특정 포인트를 말한다. AOP를 적용할 수 있는 위치를 말한다.
- Advice : 타겟에 제공할 부가기능을 담고있는 코드.
- Pointcut : Advice를 적용할 타겟을 선별하는 정규 표현식. AspectJ 표현식을 사용한다.
- Weaving : Pointcut으로 결정된 타겟에 Advice를 적용하는 것을 의미한다. AOP 적용을 위해 Aspect 객체에 연결한 상태이다.
AOP가 타겟의 코드에 영향을 주지 않으면서 Advice를 적용할 수 있도록 해주는 핵심 처리과정이다. - AOP proxy : AOP 기능을 구현하기 위해 만든 프록시 객체를 말한다. JDK 동적 프록시와 CGLIB 프록시가 있다.
- Target : 핵심 기능을 담고있는 모듈을 말한다. Pointcut에 의해 결정된다.
- Advisor : 하나의 Advice와 하나의 Pointcut로 구성된다. (스프링 AOP에서만 사용되는 용어임)
❯ JDK 동적 프록시 / CGLIB 프록시
AOP 프록시를 생성하는 과정에서 자체 검증 로직을 통해서 타겟의 인터페이스 유무를 확인하고, 그 결과에 따라 적합한 프록시를 생성한다.
- JDK Dynamic Proxy : 타겟이 하나 이상의 인터페이스를 구현할 때 생성된다.
자바 리플렉션 패키지에 존재하는 Proxy 클래스를 통해 생성된 객체이다. 타겟의 인터페이스를 기준으로 Proxy를 생성한다. - CGLIB(Code Generator Library) : 클래스의 바이트코드를 조작하여 Proxy 객체를 생성하는 라이브러리를 말한다.
Enhancer 클래스를 통해 Proxy를 생성한다.
참고자료
스프링 관련 내용으로 넘어오고나서부터 글을 읽고있어도 이게 뭐지? 싶은 경우들이 많이 있다.
이론으로는 알것같은 내용도 실제 코드를 보면 두번 세번 봐야 이해가 된다. 조금 더 집중해서 노력해봐야겠다.
'부트캠프 개발일기 > Spring' 카테고리의 다른 글
39일차: Spring Framework(Advice, JoinPoint) (0) | 2023.04.07 |
---|---|
37일차: Spring Container 실습 (0) | 2023.04.05 |
36일차: Spring Framework (DI, Spring Container, Bean) (0) | 2023.04.04 |
35일차: Architecture, Spring Boot (0) | 2023.04.03 |
34일차: Spring Framework (0) | 2023.04.02 |