개발/Spring

AOP

더덕2 2022. 10. 17. 20:15

AOP(Aspect-Oriented Programming) : 관점 지향 프로그래밍

 

Java Spring에서 왜 AOP 개념을 사용할까요?

 

객체지향프로그래밍으로 서비스를 구현할 때 핵심기능을 구현할텐데 그 핵심기능들에서 필수부가기능(트랜잭션,보안,로깅 코드)들이 불특정 다수의 클래스에 존재하게 되면 복잡도가 증가하게되고 비즈니스 코드 파악이 어렵게 됩니다.

그러하기 때문에 AOP가 등장을 하게 되었습니다.

 

AOP를 통해 핵심 기능과 부가기능으로 나눌 수 있습니다.

 

AOP 용어 정리

Aspect

-여러 객체에 공통으로 적용되는 기능(공통 기능)

-Advice + PointCut 을 모듈화하여 애플리케이션에 포함되는 횡단기능

-여러 어드바이스와 포인트컷이 함께 존재함

 

Join point

- 클래스 초기화, 객체 인스턴스화, 메소드 호출, 필드 접근, 예외 발생과 같은 애플리케이션 실행 흐름에서의 특정 포인트를 의미

-스프링 AOP는 프록시 방식을 사용하므로 조인 포인트는 항상 메소드 실행지점으로 제한함.

-추상적인 개념이고 AOP를 적용할 수 있는 모든 지점

 

Advice

-조인포인트에서 수행되는 코드를 의미

-Aspect를 언제 핵심 코드에 적용할 지를 정의

-부가기능에 해당됨

-Before , After returning , After throwing , After , Around가 있다.

 

Pointcut

- 조인 포인트 중에서 어드바이스가 적용될 위치를 선별하는 기능

- AspectJ 표현식을 사용해서 지정

- 프록시를 사용하는 스프링 AOP는 메서드 실행 지점만 포인트컷으로 선별 가능

 

Weaving

- 포인트컷으로 결정한 타겟의 조인 포인트에 어드바이스를 적용하는 것 (핵심 기능에 Advice를 적용)

- 핵심 기능코드에 영향 X 부가기능 추가 가능

 

AOP 프록시

- AOP 기능을 구현하기 위해 만든 프록시 객체

- 스프링에서 AOP 프록시는 JDK 동적 프록시 또는 CGLIB 프록시입니다.

(현재 스프링에서는 기본으로 CGLIB프록시를 사용하고있다. JDK보다 성능이 좋고 빠르다고한다.)

 

타겟(Target)

- 핵심 기능을 담고 있는 모듈로 타겟은 부가기능을 부여할 대상이 됨

- Adivce를 받는 객체 포인트컷으로 결정

 

 

'개발 > Spring' 카테고리의 다른 글

JSON으로 들어오는 HTTP 요청 객체로 한번에 받기  (0) 2023.08.14
DTO, 유효성 검증, Jakarta Bean Validation  (1) 2022.10.21
Java 기반 컨테이너  (1) 2022.10.15
Spring Coniner(스프링 컨테이너)  (0) 2022.10.15
DI  (1) 2022.10.13