AOP란?

마라탕천재 ㅣ 2024. 9. 11. 15:02

1. AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)란?

소프트웨어 개발에서 횡단 관심사를 모듈화하여 코드의 재사용성과 유지보수성을 높이는 프로그래밍 패러다임이다. 횡단 관심사는 애플리케이션의 핵심 로직과는 별개로 여러 모듈에서 공통으로 발생하는 로직을 의미하며, 예를 들어 로깅, 보안, 트랜잭션 관리 등이 그 예이다.

 

 

2. AOP의 주요 개념

 

  • Aspect (관점): 횡단 관심사를 모듈화한 단위로, 애플리케이션의 특정 기능(예: 로깅, 보안)을 담당하는 모듈이다.
  • Join Point (조인 포인트): 애플리케이션 실행 중에 Aspect가 적용될 수 있는 지점이다. 메서드 호출, 예외 처리, 필드 접근 등이 이에 해당한다.
  • Advice (어드바이스): Join Point에서 실행될 실제 코드이다. Advice는 Aspect의 구체적인 행동을 정의하며, 메서드 실행 전후 또는 예외가 발생했을 때 실행될 수 있다. 종류에는 다음이 있다:
    • Before: 메서드 실행 전에 실행
    • After: 메서드 실행 후에 실행
    • After Returning: 메서드가 정상적으로 종료된 후 실행
    • After Throwing: 예외가 발생한 후 실행
    • Around: 메서드 실행 전후로 실행

 

 

  • Pointcut (포인트컷): Join Point 중에서 특정 Advice가 실행될 지점을 정의하는 표현식이다. 예를 들어 특정 패키지나 클래스 내의 메서드들에만 Advice를 적용할 수 있다.
  • Weaving (위빙): Pointcut과 Advice를 실제로 결합하여 코드를 실행할 때, Aspect가 적절한 지점에서 동작하게 만드는 과정이다. 위빙은 컴파일 시점, 로드 시점, 런타임 시점에 이루어질 수 있다.

 

 

3. AOP의 장점

  • 관심사 분리: 핵심 비즈니스 로직과 공통적인 기능(로깅, 보안, 트랜잭션 등)을 분리하여 코드 가독성과 유지보수성을 높인다.
  • 코드 중복 제거: 중복되는 공통 기능을 Aspect로 분리하여 코드 중복을 최소화할 수 있다.
  • 유연한 변경: 특정 기능(로깅, 트랜잭션 등)을 다른 비즈니스 로직에 영향을 주지 않고 쉽게 변경할 수 있다.

 

 

4. 사용 예시

스프링 프레임워크에서 AOP는 주로 트랜잭션 관리, 로깅, 보안 등의 기능을 구현할 때 사용된다. 예를 들어, @Transactional 어노테이션은 AOP의 대표적인 활용 예로, 비즈니스 로직에 트랜잭션 관리를 자동으로 적용해 준다.

@Aspect
@Component
public class LoggingAspect {

    @Before("execution(* com.example.service.*.*(..))")
    public void logBeforeMethod(JoinPoint joinPoint) {
        System.out.println("메서드 실행 전: " + joinPoint.getSignature().getName());
    }
}

위 코드에서 @Before 어드바이스는 com.example.service 패키지의 모든 메서드가 실행되기 전에 로그를 출력하는 Aspect를 정의한다.