스프링 부트(Spring Boot) - AOP(Aspect-Oriented Programming)

2경빈·2024년 6월 19일

Spring Boot

목록 보기
8/19

스프링 부트의 장점 3가지

스프링 부트의 주요 장점을 3가지 말하라면,

  1. IoC (Inversion of Control) : 제어의 역전
  2. DI (Dependency Injection) : 의존성 주입
  3. AOP (Aspect-Oriented Programming) : 관점 지향 프로그래밍

이 세 가지를 말할 수 있다.
여기서 IoC, DI는 알고 있으나, AOP는 처음 알게 되었다.

AOP

AOP는 관점 지향 프로그래밍의 한 종류로, 주로 횡단 관심사(cross-cutting concerns)를 모듈화하는 데 사용된다.
횡단 관심사란 애플리케이션의 여러 부분에서 반복적으로 발생하는 문제나 기능을 말한다.
예를 들어, 로깅, 트랜잭션 관리, 보안 검사 등이 횡단 관심사 등이 있다.

*"Aspect-Oriented Programming"의 약자.
이는 소프트웨어 공학에서 사용되는 프로그래밍 패러다임 중 하나로, 관점 지향 프로그래밍이라고 번역할 수 있다.

AOP 주요 요소

  • Aspect (관점)

AOP에서 관점은 횡단 관심사를 구현한 모듈이다.
예를 들어, "모든 메소드 호출 시 로깅을 추가한다"는 관점을 정의할 수 있다.

  • Join Point (조인 포인트)

조인 포인트는 AOP가 적용될 수 있는 특정 위치나 시점을 말한다.
메소드 호출, 예외 발생, 객체 생성 등이 조인 포인트의 예가 될 수 있다.

  • Advice (어드바이스)

어드바이스는 횡단 관심사의 구체적인 구현.
조인 포인트에서 실행될 코드 블록이며, 다섯 가지 유형이 있다
ex) Before, After returning, After throwing, After (finally), Around.

  • Pointcut (포인트컷)

포인트컷은 어드바이스가 적용될 조인 포인트의 집합을 정의하는 방법이다.
포인트컷은 특정 메소드 패턴, 패키지 내 모든 클래스 등을 포함할 수 있다.

  • Weaving (위빙)

위빙은 AOP 프레임워크가 어드바이스를 조인 포인트에 적용하여 실제 코드에 '엮는' 과정을 말한다.
스프링에서는 컴파일 타임, 클래스 로딩 시간, 런타임 중에 위빙을 수행할 수 있다.

스프링 부트에서의 AOP 사용

스프링 부트는 AOP를 사용하여 여러 측면에서 애플리케이션을 개선할 수 있다

  • 로깅 : 모든 메소드 호출 시 로그를 남기는 것과 같이 특정 기능을 모든 메소드에 자동으로 추가할 수 있다.
  • 트랜잭션 : 관리 여러 메소드에 대해 자동으로 트랜잭션을 시작하고 종료할 수 있다.
  • 보안 검사 : 특정 메소드나 클래스에 보안 검사를 자동으로 적용할 수 있다.

예시 코드 :

다음은 스프링 부트에서 AOP를 사용하여 메소드 호출 시간을 측정하는 간단한 예시이다

@Component
@Aspect
public class TimerAop {
    @Around("execution(public void com.kh.app03.board.dao.BoardDao.list() )")
    public void m01(ProceedingJoinPoint jp) throws Throwable{
        long start = System.nanoTime();
        jp.proceed();
        long end = System.nanoTime();
        long time = end - start;
        System.out.println("time : " + time);
    }
}

com.example.service 패키지의 모든 메소드 호출을 감시하고, 각 메소드가 실행된 시간을 측정하여 출력하다.
이러한 방식으로 AOP를 사용하면 애플리케이션의 여러 부분에서 일관된 방식으로 횡단 관심사를 처리할 수 있다.

  • @Aspect : Aspect-Oriented Programming (AOP)을 구현하는 데 사용되는 어노테이션
  • @Around : 스프링 프레임워크에서 AOP를 구현할 때 사용되는 어드바이스(advice) 종류 중 하나로, 메서드 실행 전후에 적용할 수 있는 조언(advice)을 정의할 수 있다.
  • ProceedingJoinPoint : AspectJ와 스프링 AOP에서 사용되는 인터페이스로, @Around 어노테이션과 함께 Advice 메서드에서 사용된다. 이 인터페이스는 @Around Advice에서 대상 메서드의 호출을 제어하고 추가적인 로직을 삽입하는 데 중요한 역할을 한다.

Ex)

결론

스프링 부트의 AOP는 코드의 재사용성과 유지보수성을 높이는 데 중요한 역할을 한다.
AOP를 사용하면 애플리케이션의 핵심 비즈니스 로직과는 별개의 관심사를 분리하여 모듈화하고, 코드의 중복을 줄이며, 코드의 가독성과 유지보수성을 개선할 수 있다.

profile
eggs before hatching

1개의 댓글

comment-user-thumbnail
2024년 6월 19일

정 ~ ~ ~ 말 유익해요

답글 달기