10월11일 - AOP

Yullgiii·2024년 10월 11일
0

AOP (Aspect Oriented Programming)

AOP는 공통적인 관심 사항을 코드에 일괄적으로 적용하여 코드 중복과 의존 관계 복잡성을 해소하는 방식이다. 각 클래스가 공통 기능을 위해 의존하는 대신, AOP에서는 Aspect를 통해 공통 기능을 핵심 로직에 분리된 형태로 적용한다.

이 방식의 장점은, 핵심 로직 코드를 수정하지 않고도 보안, 로깅, 트랜잭션 같은 공통 기능을 여러 클래스에 쉽게 추가할 수 있다는 것이다.


AOP 주요 용어 설명

AOP의 구조는 다양한 용어로 구성되며, 이를 통해 공통 기능과 핵심 로직이 연결된다.

  • Advice
    공통 관심 기능이 핵심 로직에 언제 적용될지를 정의한다. 예를 들어, 메소드 호출 전(before)이나 후(after)에 로깅 처리를 수행하는 방식이다.

  • Joinpoint
    Advice가 적용 가능한 지점을 뜻한다. 메소드 호출 지점, 예외 발생 지점 등이 포함된다.

  • Pointcut
    Joinpoint의 부분집합으로, 실제로 Advice가 적용되는 지점을 의미한다. 특정 메소드에만 공통 기능을 적용할 때 주로 사용된다.

  • Weaving
    Advice를 핵심 로직 코드에 적용하는 과정이다. AOP 프레임워크에서 주로 자동으로 처리한다.

  • Aspect
    여러 객체에 공통으로 적용할 수 있는 관심 사항을 Aspect라고 한다. 트랜잭션 관리, 보안, 로깅 등이 Aspect의 대표적인 예이다.


코드 예시 - AOP 설정 및 사용 예제

아래는 트랜잭션 관리 Aspect를 적용하는 예제이다. 특정 메소드 실행 전후에 트랜잭션 처리를 통해 공통 기능을 적용한다.

@Aspect
@Component
public class TransactionAspect {

    @Pointcut("execution(* com.example.service.*.*(..))")
    private void transactionMethods() {}

    @Before("transactionMethods()")
    public void beginTransaction() {
        System.out.println("트랜잭션 시작");
    }

    @After("transactionMethods()")
    public void commitTransaction() {
        System.out.println("트랜잭션 커밋");
    }
}

주요 구성 요소 설명

  • @Aspect : 해당 클래스가 Aspect임을 명시
  • @Pointcut : execution 표현식을 통해 특정 패키지 내 메소드 호출에 대해 트랜잭션을 시작
  • @Before@After : 트랜잭션 시작과 종료 시점을 지정

So...

AOP는 공통 기능을 핵심 로직과 분리하여 코드의 유지보수를 용이하게 한다. 이를 통해 보안, 로깅, 트랜잭션 관리 등의 작업을 코드 중복 없이 여러 클래스에 적용할 수 있어 효율적이다. AOP를 잘 활용하면 애플리케이션의 품질과 안정성이 크게 향상될 수 있다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글