SpringBoot 를 배워보자/9. 추가 기능

AOP (Aspect Oriented Programming)

_Blue_Sky_ 2024. 9. 29. 19:00
728x90
728x90

스프링 부트 AOP (Aspect Oriented Programming): 상세 가이드

서론

스프링 부트는 개발 생산성을 높이고 간편한 설정을 제공하여 개발자들에게 많은 사랑을 받는 프레임워크입니다. 스프링 부트에서 AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)는 코드의 중복을 줄이고 모듈성을 향상시켜 개발 효율성을 높이는 강력한 도구입니다.

이 글에서는 스프링 부트에서 AOP를 사용하는 방법을 상세히 설명하고, 각 개념과 활용 사례를 통해 AOP의 장점을 소개합니다.

AOP란 무엇인가?

AOP는 객체지향 프로그래밍(OOP)을 보완하는 프로그래밍 패러다임으로, 핵심 기능과 부가 기능을 분리하여 모듈화하는 것을 목표로 합니다. 핵심 기능은 비즈니스 로직을 담당하고, 부가 기능은 로깅, 트랜잭션, 보안 등 핵심 기능과 관련된 공통 관심사를 담당합니다. AOP는 이러한 부가 기능을 **애스펙트(Aspect)**로 정의하여 핵심 기능에 엮어줍니다.

728x90

스프링 부트에서 AOP 사용하기

1. 의존성 추가

스프링 부트 프로젝트에서 AOP를 사용하기 위해서는 spring-boot-starter-aop 의존성을 추가해야 합니다.

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-aop'
}
 

2. 애스펙트 클래스 정의

@Aspect 애노테이션을 사용하여 애스펙트 클래스를 정의합니다. 애스펙트 클래스는 @Pointcut을 사용하여 조인 포인트를 지정하고, @Before, @After, @Around 등의 어드바이스를 사용하여 조인 포인트에서 실행될 코드를 정의합니다.

@Aspect
@Component
public class LoggingAspect {
    @Pointcut("execution(* com.example.service.*.*(..))")
    public void serviceMethod() {}

    @Before("serviceMethod()")
    public void before(JoinPoint joinPoint) {
        System.out.println("Before: " + joinPoint);
    }
}
 
  • @Pointcut: 메서드 실행, 예외 발생 등 특정 시점(조인 포인트)을 지정합니다.
  • @Before: 조인 포인트 이전에 실행될 코드를 정의합니다.
  • @After: 조인 포인트 이후에 실행될 코드를 정의합니다.
  • @Around: 조인 포인트를 감싸서 실행 전후에 추가적인 작업을 수행할 수 있습니다.

3. 어드바이스 실행

스프링 컨테이너가 애스펙트 클래스를 스캔하여 빈으로 등록하고, 지정된 조인 포인트에서 어드바이스를 실행합니다.

AOP 활용 사례

  • 로깅: 메서드 호출 시 로그를 남겨 시스템 동작을 추적합니다.
  • 트랜잭션 관리: 메서드 실행 시 트랜잭션을 관리하여 데이터 일관성을 유지합니다.
  • 보안: 메서드 접근 권한을 제어하여 시스템 보안을 강화합니다.
  • 성능 측정: 메서드 실행 시간을 측정하여 성능 병목 지점을 파악합니다.
  • 예외 처리: 예외 발생 시 공통적인 예외 처리 로직을 적용합니다.

AOP의 장점

  • 코드 중복 감소: 공통 관심사를 분리하여 코드 중복을 줄이고 유지보수성을 향상시킵니다.
  • 모듈성 향상: 핵심 기능과 부가 기능을 분리하여 모듈화를 용이하게 합니다.
  • 관심사 분리: 개발자는 비즈니스 로직에 집중할 수 있도록 핵심 기능과 부가 기능을 분리합니다.
  • 확장성: 새로운 애스펙트를 추가하여 기능을 확장할 수 있습니다.

결론

스프링 부트 AOP는 코드의 모듈성과 유지보수성을 높이는 강력한 도구입니다. AOP를 적절히 활용하면 개발 생산성을 향상시키고 시스템의 안정성을 높일 수 있습니다.

 

728x90
728x90

'SpringBoot 를 배워보자 > 9. 추가 기능' 카테고리의 다른 글

테스트 (JUnit, Mockito)  (0) 2024.09.29
캐싱 (Spring Cache)  (0) 2024.09.29
스케줄링 (Spring Scheduling)  (0) 2024.09.29