AOP

도리·2024년 10월 7일

JAVA

목록 보기
6/7

AOP란 무엇인가?

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

말 그대로 애플리케이션의 공통 관심사항을 모듈화하는 방법

AOP를 통해서 로깅, 트랜잭션 관리, 보안 등과 같이 공통 기능을 애플리케이션의 다른 부분에 영향을 주지 않고 분리해서 관리하는 것을 말한다고 봐도 되겠다.

스프링 AOP는 메소드 실행 전/후 또는 예외 발생 시점에 추가적인 행동을 정의할 수 있게 해준다.

이 글에서는 스프링 AOP의 기본개념 이해와, 실제 애플리케이션에서 적용하는 방법에 대해 공부해보는 목적을 가지고 작성하였습니다.

스프링 AOP의 핵심 개념

Aspect, Join point, Advice, Pointcut, Target 이라고 볼 수 있다.

  • Aspect : 공통 관심 사항을 모듈화 한 것. (예: 로깅, 보안 등의 기능을 Aspect로 정의할 수 있다.)
  • Join Point : Aspect가 적용될 수 있는 위치, 즉 메소드 호출이나 필드 접근과 같은 프로그램 실행의 특정 지점을 의미한다.
  • Advice : Aspect의 실제 구현체라고 보면 된다. 특정 Join Point에서 Aspect의 코드가 실행되는 시점을 정의한다.(예: 메소드 실행 전/후)
  • Pointcut : Join Point의 부분 집합으로, 실제로 Advice가 적용될 위치를 선별하는 표현식이다.
  • Target : Advice가 적용되는 대상 객체를 의미한다.

AOP적용 사례

 @Aspect
    public class LoggingAspect {
        @Around("execution(* com.example.service.*.*(..))")
        public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
            long start = System.currentTimeMillis();
            Object proceed = joinPoint.proceed();
            long executionTime = System.currentTimeMillis() - start;
            logger.info(joinPoint.getSignature() + " executed in " + executionTime + "ms");
            return proceed;
        }
    }

이 코드는 서비스 레이어의 모든 메소드 실행 전/후에 실행시간을 로그로 기록한다.
@Around 어노테이션으로 메소드 실행 전 후에 로그를 남기는 Advice를 정의했다.

이 외에도 트랜잭션 관리나 보안 검사 등 다양한 공통 기능을 AOP를 통해 쉽게 구현할 수 있고, 이는 애플리케이션의 코드를 깔끔하게 유지하고 유지보수를 용이하게 한다.

profile
헬로

0개의 댓글