AOP

jm·2023년 11월 7일
0

Spring

목록 보기
3/3

1. AOP

AOP 란
관점 지향 프로그램을 뜻하고 Java OOP 확장의 필요한 기능.
흩어진 Aspect, 공통의 관심 사항(Cross-Cutting Concern)으로 모아서 모듈화.
비즈니스 로직을 헤치지 않고 재사용하는 프로그래밍 기법

비즈니스 로직에 핵심적이지 않은 동작들을 프로그램에 추가할 수 있게 함. 이는 관점 지향 프로그램의 기반이 된다.

특징

관심사의 분리: AOP는 시스템에서의 다양한 관심사(예: 로깅, 보안, 트랜잭션 관리)를 별도의 모듈로 분리하여 코드를 더 모듈화하고 관심사 간에 서로 간섭하지 않도록 합니다.

교차 커팅 관심사: AOP는 여러 모듈 또는 객체에 걸쳐서 발생하는 관심사를 한 곳에 집중시켜 중복 코드를 최소화하며 코드의 가독성을 향상시킵니다.

코드 중복 제거: AOP를 사용하면 공통 관심사를 한 번만 구현하고 여러 곳에서 재사용할 수 있으므로 코드 중복을 줄일 수 있습니다.

2. 장단점

장점
모듈화 및 유지 보수 개선: AOP를 사용하면 각 관심사를 별도의 모듈로 관리할 수 있으므로 코드의 모듈화 및 유지 보수가 개선됩니다.

중복 코드 감소: 공통 관심사를 한 번만 정의하여 여러 곳에서 재사용할 수 있으므로 중복 코드를 제거할 수 있습니다.

비즈니스 로직 간 규모 확장: AOP를 사용하면 비즈니스 로직과 관심사를 별도로 유지하므로 비즈니스 로직을 더 쉽게 확장하고 변경할 수 있습니다.

단점
복잡성: AOP를 이해하고 구현하는 데 시간이 걸릴 수 있으며, 코드의 복잡성을 높일 수 있음.

오용: AOP를 오용하면 코드의 가독성을 저하시킬 수 있으며, 잘못된 사용으로 인해 유지 보수가 어려워질 수 있음.

성능 영향: AOP를 사용하면 실행 시간에 관심사를 추가하기 때문에 일부 성능 오버헤드가 발생할 수 있음.

3. 주요 개념

관심사 (Concern):
AOP에서 관심사는 애플리케이션의 다양한 측면 또는 관심 분야. 예를 들어, 로깅, 보안, 트랜잭션 관리는 각각 다른 관심사이다.

타깃 (Target):
타깃 객체는 관심사가 적용될 대상 객체. 타깃 객체에는 비즈니스 로직이 포함되며, AOP의 관심사 모듈에서 타깃 객체의 메서드를 대상으로 선택적으로 기능을 삽입할 수 있다.

어드바이스 (Advice):
어드바이스는 관심사 모듈에서 조인 포인트에 삽입되는 코드 블록입니다. 어드바이스는 언제, 어떻게, 무엇을 할지를 정의함. 주요 종류로는 before, after, around 등이 있음.

조인 포인트 (Join Point):
어드바이스가 적용되는 시점. 메서드 호출, 예외 발생, 필드 접근 등과 같이 특수한 실행 지점이 조인 포인트에 해당. ( joinPoint.proceed(); )

포인트컷 (Pointcut): 포인트컷은 어떤 조인 포인트에 어떤 어드바이스를 적용할 것인지를 선택하는 패턴 또는 규칙입니다. 포인트컷은 정규 표현식 또는 특정 메서드 패턴 등을 사용하여 정의할 수 있음.
@Pointcut("execution(* method(..))") - method로 시작하는 모든 메소드에 적용
@Pointcut("@annotation(com.domain.a.test)") - 사용자 지정 어노테이션

애스펙트 (Aspect):
공통 관심사를 모듈화 한 것으로 어디바이스와 포인트컷으로 이루어짐.

위빙 (Weaving):
위빙은 애스펙트를 타깃 객체에 적용하는 프로세스. 이 과정에서 AOP 프레임워크는 포인트컷을 기반으로 어드바이스를 조인 포인트에 삽입. 바이트 코드 및 객체 조작과정

4. 예시

실제 사용은 Spring AOP와 Aspectj가 있음

  • execution = 모든 domain 중 service 에서 실행되는 모든 메소드에 적용
  • serviceLog를 Before, Arround 등 조인포인트에서 사용

실행 후

  • 메소드를 실행하면 global.aop 가 실행되는 것을 볼 수 있다.


❓ Exception Handler도 AOP 인가?



참고
관점 지향 프로그래밍
자바 AOP의 모든 것(Spring AOP & AspectJ)
https://gr-st-dev.tistory.com/985

profile
ㅎㅎ

0개의 댓글

관련 채용 정보