AOP
관점 지향 프로그램
스프링 어플리케이션, MVC웹 어플리케이션에서 Web Layer, Business Layer ,Data Layer로 정의한다.
- Web Layer : Rest Api 제공, Client 중심의 로직 적용
- Business Layer : 내부 정책에 따른 logic 를 개발
- Data Layer : 데이터 베이스 및 외부와의 연동 처리
횡단 관심
특정 구역의 반복되는 로직들을 한곳에서 코딩해준다.
ex) 각 메소드가 시간이 얼마나 걸렸는지 로그를 남긴다.
Annotation | 의미 |
@Aspect | 자바에서 많이 사용되는 AOP 프레임워크 AOP를 정의한는 Class에 할당 |
@Pointcut | 기능을 어디에 적용시킬지(메소드, 패키지 하위)등 AOP를 적용 시킬 지점을 설정 |
@Before | 매소드가 실행하기 이전 |
@After | 메소드가 성공적으로 실행후, 예외 발생하더라도 실행된다. |
@AfterReturing | 메소드 호출 후 성공 실행 시 |
@AfterThrowing | 메소드 호출 후 실패 예외 발행 |
@Around | Before/After 모두 제어 |
🍫 실무사례 1
중요한 메서드들에 어떤 값이 들어갔고 나왔는지,log를 남겨 볼수있다.
🍫 실무사례 2
메서드의 실행 시간으로 서버의 부화 및 상태를 로깅해 볼 수 있다.
📑 build.gradle
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-aop'
implementation 'org.springframework.boot:spring-boot-starter'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
1) AOP를 사용하기 위해서는 디펜던시(dependencies)를 추가해야한다.
implementation 'org.springframework.boot:spring-boot-starter-aop'
📑 aop . java
@Aspect //aop 사용 선언
@Component // 빈으로 만들어서 스프링에서 관리
public class ParameterAop{
//실행시킬 포인트 지점 (어떤 메서드)
// 1) 선언한 패키지(컨트롤러) 하위의 모든 메서드에서 사용
@Pointcut("execution(* com.example.aop.controller..*.*(..))")
public void cut(){}
//들어갈때 (메서드명)
//JoinPoint 들어가는 지점에 대한 정보들을 가져오는 객체
@Before("cut()")
public void before(JoinPoint joinPoint){
//어떤 메서드들이 호출이 되어 실행을 했는지 확인가능
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
Method method = methodSignature.getMethod();
//조인포인트에 들어가고 있는 메게변수 배열
Object[] args = joinPoint.getArgs();
for(Object obj : args){
System.out.println("type :" + obj.getClass().getSimpleName());
System.out.println("value :" + obj);
}
}
//반환값 (메서드명)
@AfterReturning("cut()", returning ="reobj")
public void afterReturn(JoinPoint joinPoint,Object reobj){
System.out.println("return obj :" + reobj);
}
}
'BackEnd > Spring Boot' 카테고리의 다른 글
[ Spring Boot ] Validation (1) (0) | 2023.03.08 |
---|---|
[ Spring ] Annotation 정리 (1) (0) | 2023.03.07 |
[ Spring ] Ioc/Aop 의존관계 주입 개념 (0) | 2023.03.07 |
[ Spirng ] Security - java (4) Spring-Security를 사용한 암호화 (0) | 2023.03.06 |
[ Spirng ] Security - java (3) 회원권한 설정 (0) | 2023.03.05 |