티스토리 뷰

코딩

AOP

ehzim 2024. 6. 25. 14:23

AOP 는 Aspect Oriented Programming 의 약자이다. 단어 자체만 본다면 Aspect 는 관점, Oriented 는 지향하다 즉, 관점 지향적 프로그래밍이라고 할 수 있다. 관점을 중심으로 두고, 지향하는, 그런 프로그래밍을 말한다.

그렇다면 여기서 말하는 관점(Aspect)란 무엇일까? AOP 에서 말하는 Aspect 는 흩어진 관심사(concern)을 응집시킨 것을 말한다.

기존 객체지향 프로그래밍에서는 설계시 책임, 관심사에 따라 단일 책임을 지도록 클래스를 분리한다. 객체지향적 설계로 인해 응집도가 높아지고 결합도는 낮아진 모듈들은 수정과 변경에 대한 책임의 전파를 약화 시키므로 변화하는 요구사항에 대해 보다 안전한, 생산성 높은 프로그래밍이 가능해진다.

하지만 특정 클래스들에서 공통적으로 사용하는 기능이 있을 수 있다. 로깅, 트랜잭션, 캐싱, 보안 등등 클래스에서 비즈니스 로직에 부가적으로 들어가게 되는 기능들이다.

 

AOP(Aspect-Oriented Programming)에서 config, pointcut, aspect, after-throwing의 역할에 대해 설명드리겠습니다. AOP는 핵심 비즈니스 로직과 부가적인 기능(횡단 관심사)을 분리하여 코드의 모듈화를 향상시키는 데 목적이 있습니다.

1. config

config는 AOP 설정을 정의하는 요소입니다. AOP 설정 파일이나 클래스에서 어떤 애스펙트가 적용될지, 포인트컷과 어드바이스가 어떻게 구성될지 설정합니다. 스프링 AOP에서는 XML 설정 파일이나 자바 설정 클래스를 사용하여 config를 정의할 수 있습니다.

예시 (XML 설정 파일):

<aop:config>
    <aop:pointcut id="serviceMethods" expression="execution(* com.example.MyService.*(..))"/>
    <aop:advisor advice-ref="myAdvice" pointcut-ref="serviceMethods"/>
</aop:config>

2. pointcut

pointcut은 애플리케이션의 어느 부분(메서드, 클래스 등)에 AOP를 적용할지를 정의하는 표현식입니다. 포인트컷은 특정 조건을 만족하는 조인 포인트를 식별합니다.

예시:

<aop:pointcut id="serviceMethods" expression="execution(* com.example.MyService.*(..))"/>

위 예시는 com.example.MyService 클래스의 모든 메서드에 AOP를 적용하도록 설정하는 포인트컷입니다.

3. aspect

aspect는 횡단 관심사를 모듈화한 것입니다. 애스펙트는 하나 이상의 어드바이스와 포인트컷으로 구성됩니다. 스프링 AOP에서는 애노테이션을 사용하거나 XML 설정 파일을 통해 애스펙트를 정의할 수 있습니다.

예시 (애노테이션 사용):

@Aspect
@Component
public class MyAspect {
    @Around("execution(* com.example.MyService.*(..))")
    public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("Method: " + joinPoint.getSignature().getName() + " is called");
        Object result = joinPoint.proceed();
        System.out.println("Method: " + joinPoint.getSignature().getName() + " execution completed");
        return result;
    }
}

4. after-throwing

after-throwing은 메서드가 예외를 던졌을 때 실행되는 어드바이스 유형입니다. 예외가 발생한 후에 특정 로직을 실행하고자 할 때 사용됩니다.

예시 (XML 설정 파일):

<aop:config>
    <aop:pointcut id="serviceMethods" expression="execution(* com.example.MyService.*(..))"/>
    <aop:aspect ref="myAspect">
        <aop:after-throwing pointcut-ref="serviceMethods" method="handleException"/>
    </aop:aspect>
</aop:config>

 

예시 (어드바이스 메서드):

public class MyAspect {
    public void handleException(Throwable ex) {
        System.out.println("Exception: " + ex.getMessage());
    }
}

위 예시는 com.example.MyService 클래스의 메서드가 예외를 던졌을 때 handleException 메서드가 실행되도록 설정한 것입니다.

요약

  • config: AOP 설정을 정의합니다.
  • pointcut: AOP가 적용될 지점을 식별하는 표현식입니다.
  • aspect: 횡단 관심사를 모듈화한 것으로, 여러 어드바이스와 포인트컷으로 구성됩니다.
  • after-throwing: 메서드가 예외를 던진 후 실행되는 어드바이스입니다.

 

 

 

 

'코딩' 카테고리의 다른 글

이번주 리뷰  (0) 2024.07.05
JAVA 정리 - 1  (0) 2024.04.12
[19주 4일차] 프로젝트  (1) 2024.02.15
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday