AOP -개념편-

곽현민·2026년 1월 26일

Aspect-Oriented-Programming

AOP의 목적

AOP의 목적은 중복된 코드를 줄여 유지보수성과 재사용성을 향상시키는 것이다.
주로 메서드 실행 전후 로그 남기기 위해 사용됨.

AOP 관련 어노테이션

어노테이션설명
@AspectAOP 클래스 선언 (횡단 관심사 모듈)
@Around메서드 실행 전후 제어
@Before메서드 실행 전에 수행
@AfterReturning정상 반환 후 수행
@AfterThrowing예외 발생 시 수행
@After정상/예외 관계없이 메서드 실행 후 수행
@PointCut메서드 경로 지정

본격적인 AOP에 대하여

실행 시간 측정 (for 성능)

간단하게 실행 메서드 전후 시간을 로깅하여 실행 시간을 구하는 AOP를 만들어볼 것이다.

@Aspect   // AOP 클래스 선언
@Componet // Bean 생성
@Slf4j    // log 남기기
public class Aop() {

	@Around("execution(* org.example.main.user.service..*(..))")
    // 메서드 전후 실행, execution을 통해 메서드 기준점 지정
    
    public Object executionTime(ProceedingJoinPoint joinPoint) throws Throwable {
    // 메서드명 제외 정규화된 표현

        long start = System.currentTimeMillis();
        // 밀리세컨으로 시작 시간 표시 (현재)

        Object result = joinPoint.proceed(); 
        // 실제 메서드 실행 -> Filter에서 doFilter 와 비슷함.

        long end = System.currentTimeMillis();
        // 밀리세컨으로 종료 시간 표시 (현재)
        
        log.info("[AOP] {} 실행됨 in {}ms" , joinPoint.getSignature() , end - start);
        // 로그 남기기

        return result;
        // 서비스 로직 반환
    }
}

이런 식으로 이뤄지는 매우 간단하고 도움되는 AOP였습니다.

AOP는 다양하게 활용할 수 있게 생겼다.

무엇보다 매력적인 점은 중복 코드를 줄이기 위해 사용된다는 것이다.
이것 하나만으로도 매우 메리트있다고 생각한다.

앞으로 어떻게 활용할 지 계속 탐구해보면 좋을 듯 하다!

0개의 댓글