Spring - AOP(Aspect Oriented Programming)

YUNU·2023년 7월 26일
0

스프링

목록 보기
7/33
post-thumbnail

🌱 Spring


🟦 AOP(Aspect Oriented Programming)

일반적으로 Java Application은 웹, 비즈니스, 데이터 등 여러 계층으로 응용 프로그램을 개발한다.

로직을 관점에 따라 공통 관심 사항(cross-cutting concern)과 핵심 관심 사항(core concern)으로 나눌 수 있고

핵심 관심 사항은 우리가 적용하고자 하는 핵심 비즈니스 로직이며, 공통 관심 사항은 핵심 로직을 실행하기 위해 행하는 로직으로 DB connect, transaction, 보안, 인증, 로깅 등을 예로 들 수 있다.

공통 관심 사항은 각 계층에 반복적으로 사용하는 코드들로 이들을 각 계층에서 개별적으로 구현한다면 매우 비효율적이다.

➡️ 공통 관심 사항을 모듈화하고 핵심 비즈니스 로직에서 분리하여 재사용한다.

🔷 AOP 적용

공통 관심 사항(cross-cutting concern), 핵심 관심 사항(core concern) 분리

공통 관심 사항을 모아두고 필요한 곳에 적용

@Aspect 어노테이션 사용

AOP

@Aspect
public class AAop {
	
    //타겟팅
	@Around("execution(*com.example..*(..))")//com.example 패키지 하위 전부 적용
    public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
    //...
    }
}

스프링빈 등록

@Configuration
public class SpringConfig {
    
 	@Bean
    public AAop aAop() {
    	return new AAop();
    }
}

🔷 스프링 AOP 동작 방식

AOP 적용 전

AOP 적용 후 의존관계

AOP 적용 전체 흐름)

프록시memberController -> memberConroller -> 프록시memberService -> 실제memberService -> 프록시memberRepository -> 실제memberRepository

인프런 스프링부트입문 - 김영한 참조

profile
DDeo99

0개의 댓글