Spring에서 AOP 프로그램을 사용하는 법을 배웠다.
우선, AOP(Aspect Oriented Programming)는
A라는 프로그램이 실행되기 전, "A라는 프로그램이 실행된다"를 콘솔창에 알려주는 프로그램이다.
예를 들어, idCheck라는 메소드를 이용할때에 넘어가는 데이터, 처리된 결과, 처리 시간 등등을
콘솔창에 알려주는것이 AOP 라고 할 수 있다.
스프링에서 AOP를 이용하기 위해서는 pom.xml에서 AOP의 효율성을 위해
버전을 업그레이드 해줄 필요가 있다.
AOP는 aspect라는 라이브러리와 연관이 있기 때문에, aspectj의 버전을 1.9.0으로 지정해주었다.
pom.xml 에서 이 부분이 AOP를 사용하기 위한 라이브러리(aspectj)이다.
정확히 말하면, Aspect의 구조 생성을 위한 드라이버라고 할 수 있다.
위의 드라이버와 비슷해보이는데, 이것은 Aspect에 연결하기 위한 라이브러리(aspectjweaver)이다.
com.webjjang.aop 패키지 생성 - LogAdvice 클래스를 생성한 뒤 코드를 쓰면 된다.
<LogAdvice>
package com.webjjang.aop;
import java.util.Arrays;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
import lombok.extern.log4j.Log4j;
// 자동 생성 - @Controller, @Service, @Repository, @RestController, @Component, @-Advice
@Component
// AOP 프로그램으로 선언
@Aspect
@Log4j
public class LogAdvice {
// AOP로 실행될 메서드 작성
@Around("execution(* com.webjjang.*.service.*.*(..))")
public Object logTimeAndInfo(ProceedingJoinPoint pjp) throws Throwable{
log.info("─────────────── 실행 속도와 처리 정보를 출력하는 AOP ───────────────");
// 실행 전 처리
// 시작 시간 저장 / 실행 클래스 출력/ 넘어가는 데이터 출력 / 실행 결과 출력
// 시작 시간 저장
long start = System.nanoTime();
// 로그인 실행 객체 이름 출력 → service
log.info("* 실행하는 객체 : " + pjp.getTarget());
// 로그로 실행 메서드 이름 출력
log.info("* 실행 메서드 : " + pjp.getSignature().getName() + "()");
// 로그로 넘어 가는 데이터 출력
log.info("* 넘어가는 데이터 : " + Arrays.toString(pjp.getArgs()));
// 실제적인 처리와 결과 저장
Object result = pjp.proceed();
// 실행 후 처리
// 처리 결과 출력
log.info("* 처리된 결과 : " + result);
// 끝 시간 저장 / 처리 소요 시간 출력
long end = System.nanoTime();
log.info("* 처리 소요 시간 : " + (end - start) + "ns");
return result;
}
}
servlet-context.xml의 namespace 탭에서 aop를 추가하면
어떤 프로그램을 실행할 때마다 LogAdvice에서 설정한대로
콘솔창에 결과값이 뜨는것을 확인할 수 있다.
'BACK-END > SPRING' 카테고리의 다른 글
[Spring]예외처리(404에러, 500에러) (0) | 2022.03.15 |
---|---|
[Spring]회원가입 폼 만들기 (0) | 2022.03.14 |
[Spring]JUnit을 이용한 단위 테스트 (0) | 2022.03.11 |
[Spring]Spring-MyBatis를 이용해 공지사항 게시판 만들기 (0) | 2022.03.02 |
[Spring]Spring-MyBatis를 이용해 게시판 만들기 (0) | 2022.02.27 |
댓글