스프링 AOP(Aspect-Oriented Programming)의 이해와 활용

김형진·2024년 3월 6일

Spring

목록 보기
11/15
post-thumbnail

스프링 프레임워크에서 AOP(Aspect-Oriented Programming)은 중복되는 코드를 제거하고 코드의 재사용성과 유지보수성을 향상시키는 데에 사용됩니다. AOP는 핵심 비즈니스 로직과 관련 없는 부가적인 기능(로깅, 트랜잭션 처리 등)을 분리하여 적용할 수 있습니다.

AOP의 개념

AOP는 관점 지향 프로그래밍을 의미합니다. 프로그램을 구성하는 주요 모듈과 주요 모듈에 영향을 미치는 부가적인 모듈(관심사)을 분리하여 개발하는 방법론입니다. 주요 모듈에 영향을 미치는 부가적인 모듈을 'Aspect(관점)'이라고 합니다.

스프링 AOP의 구성 요소

Aspect(관점): 부가적인 모듈을 나타내는 단위입니다. 보통 Advice와 Pointcut을 함께 갖습니다.
Advice(조언): 부가 기능을 정의한 메서드입니다. Advice는 Joint Point에 삽입되어 실행됩니다.
Pointcut(결합점): Advice를 적용할 대상을 지정하는 표현식입니다.
Join Point(조인 포인트): Advice가 적용될 수 있는 지점을 나타냅니다. 예를 들어 메서드 호출이나 객체 생성 등이 조인 포인트가 될 수 있습니다.
Weaving(엮기): Advice를 지정된 지점에 삽입하여 프로그램을 완성하는 과정을 의미합니다.

예시: 로깅 기능 추가하기

아래의 예시에서는 메서드 실행 전후에 로깅 기능을 추가하는 AOP를 구현해 보겠습니다.

@Aspect
@Component
public class LoggingAspect {

    @Before("execution(* com.example.service.*.*(..))")
    public void logBefore(JoinPoint joinPoint) {
        String methodName = joinPoint.getSignature().getName();
        System.out.println("Before method: " + methodName);
    }

    @After("execution(* com.example.service.*.*(..))")
    public void logAfter(JoinPoint joinPoint) {
        String methodName = joinPoint.getSignature().getName();
        System.out.println("After method: " + methodName);
    }
}

위 예시에서 @Aspect 어노테이션은 해당 클래스가 Aspect임을 나타내고, @Before, @After 어노테이션은 Advice를 정의합니다. execution( com.example.service..*(..))는 Pointcut을 정의하여 com.example.service 패키지의 모든 메서드를 대상으로 합니다.

AOP의 장점

모듈성 강화: 부가 기능을 모듈화하여 중복을 제거하고 유지보수성을 향상시킵니다.
관심사의 분리: 핵심 비즈니스 로직과 부가 기능을 분리하여 코드를 더 깔끔하게 유지할 수 있습니다.
재사용성 향상: 부가 기능을 모듈화하여 필요한 곳에서 쉽게 재사용할 수 있습니다.

결론

스프링 AOP는 관점 지향 프로그래밍을 통해 코드의 재사용성과 유지보수성을 향상시키는 도구입니다. 이를 통해 코드의 중복을 제거하고 부가 기능을 쉽게 추가할 수 있습니다.

0개의 댓글