Good Morning

Spring AOP 입문자 가이드: 자동 로깅 예제로 배우는 AOP 본문

Back-End/Spring

Spring AOP 입문자 가이드: 자동 로깅 예제로 배우는 AOP

욘쥰 2024. 8. 8. 17:07

들어가며

안녕하세요! 오늘은 Spring AOP(Aspect-Oriented Programming)에 대해 쉽게 알아보겠습니다. AOP가 뭔지, 어떻게 동작하는지 간단한 예제를 통해 설명해드릴게요.

AOP란 무엇인가?

AOP는 프로그램의 주요 기능에 영향을 주지 않으면서 추가 기능을 넣을 수 있는 프로그래밍 방식입니다. 쉽게 말해, 우리 일상에서 일어나는 일을 기록하는 '자동 일기장'을 상상해보세요. 여러분은 평소처럼 생활하고, 이 일기장은 알아서 모든 것을 기록합니다.

예제로 배우는 AOP

우리의 예제는 간단한 수학 수업을 통해 AOP를 설명합니다.

1. 수학 선생님 (MyMath 클래스)

@Component
public class MyMath {
    public int add(int a, int b) {
        return a + b;
    }
    // 다른 메서드들...
}

 

이 클래스는 덧셈, 뺄셈, 곱셈 같은 기본적인 수학 연산을 수행합니다.

2. 조용한 기록자 (LoggingAdvice 클래스)

@Aspect
@Component
public class LoggingAdvice {
    @Around("execution(* com.fastcampus.ch3.aop.MyMath.*(..))")
    public Object methodCallLog(ProceedingJoinPoint pjp) throws Throwable {
        // 메서드 실행 전 로깅
        // 실제 메서드 실행
        // 메서드 실행 후 로깅
    }
}

 

이 클래스는 MyMath의 모든 메서드 실행을 기록합니다. 수업 시작 시간, 내용, 결과, 종료 시간을 모두 적습니다.

3. 학교 규칙 (root-context_aop.xml)

<aop:aspectj-autoproxy/>
<context:component-scan base-package="com.fastcampus.ch3.aop"/>

 

이 설정은 "모든 수학 수업에는 기록자가 참석해야 한다"라는 규칙을 만듭니다.

4. 수업 진행 (AopMain2 클래스)

public class AopMain2 {
    public static void main(String[] args) {
        ApplicationContext ac = new GenericXmlApplicationContext("file:src/main/webapp/WEB-INF/spring/root-context_aop.xml");
        MyMath mm = (MyMath) ac.getBean("myMath");
        System.out.println("mm.add(3, 5) = " + mm.add(3, 5));
    }
}

 

이 클래스는 실제로 수업을 시작하고 선생님에게 계산을 요청합니다.

어떻게 동작하나요?

  1. 수업이 시작됩니다 (AopMain2 실행).
  2. 학교 규칙에 따라 수학 선생님과 기록자가 준비됩니다.
  3. "3 더하기 5는 얼마예요?"라는 질문이 들어옵니다.
  4. 기록자가 "선생님이 3과 5의 덧셈을 시작합니다"라고 적습니다.
  5. 선생님이 계산을 합니다.
  6. 기록자가 "결과는 8입니다. 계산하는 데 0.001초 걸렸습니다"라고 적습니다.
  7. "3 더하기 5는 8입니다"라고 최종 발표됩니다.

AOP의 장점

  1. 관심사의 분리: 선생님(MyMath)은 수학만 가르치면 되고, 기록은 다른 누군가(LoggingAdvice)가 담당합니다.
  2. 재사용성: 다른 과목의 수업에도 같은 기록 방식을 쉽게 적용할 수 있습니다.
  3. 유지보수의 용이성: 기록 방식을 바꾸고 싶다면 LoggingAdvice만 수정하면 됩니다.

마치며

Spring AOP를 사용하면 프로그램의 주요 로직을 건드리지 않고도 로깅, 보안 검사, 트랜잭션 관리 등 다양한 기능을 쉽게 추가할 수 있습니다. 이는 코드를 더 깔끔하게 유지하고, 변경에 유연하게 대응할 수 있게 해줍니다.

AOP는 처음에는 복잡해 보일 수 있지만, 이해하고 나면 정말 유용한 도구가 됩니다. 여러분의 프로그래밍 여정에 AOP가 큰 도움이 되길 바랍니다!