[Spring] AOP(Aspect-Oriented Programming)

2025. 1. 22. 23:19·Spring

AOP(Aspect-Oriented Programming)


 

공통 관심 사항을 분리하여 핵심 비즈니스 로직과 독립적으로 관리할 수 있게 하는 프로그래밍 기법

 

필요 상황


  • 모든 메소드의 호출 시간 측정하고 싶을 때
  • 회원 가입 시간, 회원 조회 시간을 측정하고 싶을 때(핵심 관심 사항x)
  • 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern) 
 

> 시간 측정 로직은 공통 관심 사항으로, 핵심 비즈니스 로직과 분리하는 것이 유지보수 좋음
> 시간 측정 로직이 핵심 로직과 섞이면 수정이 어렵고, 변경 시 모든 코드를 찾아 수정해야 하는 문제 발생

 

적용


 -시간 측정 AOP 등록

@Component
@Aspect //AOP
public class TimeTraceAop {

    @Around("execution(* hello.hello_spring..*(..))")//공통 관심사항 타겟팅
    public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
    	//ProceedingJoinPoint : AOP에서 메서드 실행 지점(join point)에 대한 정보, 메서드 실행 제어 할 수 있는 객체
        long start = System.currentTimeMillis();
        System.out.println("START: " + joinPoint.toString());//실행중인 메서드 정보 문자열
        try {
            return joinPoint.proceed(); //원래 메서드 실행
        } finally {
            long finish = System.currentTimeMillis();
            long timeMs = finish - start;
            System.out.println("END: " + joinPoint.toString()+ " " + timeMs +"ms");
        }

    }
}

@Component 말고 코드로빈등록 하는게 좋음

 

execution( [반환타입] [패키지].[클래스].[메서드]( [매개변수] ) )
execution(...) 특정 메서드 실행 시점(AOP 적용 대상) 지정
* 모든 반환 타입
hello.hello_spring.. hello.hello_spring 패키지 및 그 하위 패키지 전부 포함
* 모든 클래스와 모든 메서드 적용
(..) 모든 매개변수 허용

 

결과

START: execution(MemberService hello.hello_spring.SpringConfig.memberService())
END: execution(MemberService hello.hello_spring.SpringConfig.memberService()) 1ms

 

 

동작 방식


컨테이너에 스프링빈 등록될 때 가짜 스프링 빈을 앞세움

joinPoint.proceed()실행되면 진짜를 호출함

 

'Spring' 카테고리의 다른 글

[Spring] 스프링 컨테이너와 스프링 빈 조회  (0) 2025.02.14
[Spring] 스프링 개요, SOLID, DI 컨테이너 💡  (0) 2025.01.31
[Spring] 스프링 DB 접근(JDBC,JdbcTemplate,JPA,스프링 데이터 JPA)  (0) 2025.01.12
[Spring] From 입력, 조회  (0) 2024.12.22
[Spring] 스프링 빈 등록과 의존관계  (0) 2024.12.19
'Spring' 카테고리의 다른 글
  • [Spring] 스프링 컨테이너와 스프링 빈 조회
  • [Spring] 스프링 개요, SOLID, DI 컨테이너 💡
  • [Spring] 스프링 DB 접근(JDBC,JdbcTemplate,JPA,스프링 데이터 JPA)
  • [Spring] From 입력, 조회
Naah
Naah
  • Naah
    blueprint
    Naah
  • 전체
    오늘
    어제
    • 분류 전체보기 (106)
      • Java (28)
      • Kotlin (0)
      • TypeScript (7)
      • React (22)
      • Next.js (1)
      • Spring (22)
      • JPA (12)
      • Spring Data JPA (6)
      • Querydsl (1)
      • Error (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
    • manage
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Naah
[Spring] AOP(Aspect-Oriented Programming)
상단으로

티스토리툴바