728x90
반응형
SMALL
AOP이란?
AOP(Aspect Orient Programming), 관점지향 프로그래밍이라고 하며, 공통된 영역와 비즈니스 로직을 구분하고 필요한 곳에 비즈니스 로직만 구현하겠끔 집중하게 도와준다.
장점
1. 코드 중복 줄어듬
2. 공통된 영역과 비즈니스 로직이 구분돼 개발이 좀더 용이해짐
용도
1. 로깅
2. DB 트랜젝션
3. vaildation
...
기본적인 문법
- JoinPoint:
- 현재 실행되고 있는 패키지 영역
- PointCut:
- 어떤 패키지 JoinPoint를 사용할 것인지를 결정
- 실행하고 있는 모듈을 사용자가 원하는 범위까지 조절할 수 있다.
- Advice: 각 JoinPoint에 삽입되어져 동작할 수 있는 코드
- Before : 조인포인트 전에 실행
- AfterReturning : 조인포인트에서 정상적으로 리턴되면 실행
- AfterThrowing : 예외가 발생하였을 경우 실행
- After : 조인포인트에서 메서드의 실행결과에 상관없이 무조건 실행
- Around : 조인포인트의 전후로 실행
코드 예시
@Aspect
@Component
public class LogAspect {
private static final Logger logger = LoggerFactory.getLogger(LogAspect.class);
@Pointcut("execution(public * com.sideproject.bankcheck..*(..))")
private void log(){}
@Around("log()")
public Object sampleAdvice(ProceedingJoinPoint pjp) throws Throwable {
logger.info("테스트 속도 시작");
StopWatch sw = new StopWatch();
sw.start();
Object result = pjp.proceed();
sw.stop();
logger.info("테스트 속도 끝");
logger.info("걸린시간: {} ms", sw.getLastTaskTimeMillis());
return result;
}
}
테스트 후
....
2021-07-17 00:26:03.646 INFO 16856 --- [0.1-8080-exec-4] c.s.b.controller.MemberController : org.springframework.security.core.userdetails.User [Username=test@naver.com, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_MEMBER]]
2021-07-17 00:26:03.646 INFO 16856 --- [0.1-8080-exec-4] com.sideproject.bankcheck.aop.LogAspect : 테스트 속도 끝
2021-07-17 00:26:03.646 INFO 16856 --- [0.1-8080-exec-4] com.sideproject.bankcheck.aop.LogAspect : 걸린시간: 0 ms
2021-07-17 00:26:07.161 INFO 16856 --- [0.1-8080-exec-5] com.sideproject.bankcheck.aop.LogAspect : 테스트 속도 시작
2021-07-17 00:26:07.172 INFO 16856 --- [0.1-8080-exec-5] com.sideproject.bankcheck.aop.LogAspect : 테스트 속도 시작
Hibernate: select boardentit0_.id as id1_0_, boardentit0_.author as author2_0_, boardentit0_.content as content3_0_, boardentit0_.created_date as created_4_0_, boardentit0_.modified_date as modified5_0_, boardentit0_.title as title6_0_ from board_entity boardentit0_ order by boardentit0_.id desc
2021-07-17 00:26:07.186 INFO 16856 --- [0.1-8080-exec-5] com.sideproject.bankcheck.aop.LogAspect : 테스트 속도 끝
2021-07-17 00:26:07.186 INFO 16856 --- [0.1-8080-exec-5] com.sideproject.bankcheck.aop.LogAspect : 걸린시간: 13 ms
2021-07-17 00:26:07.203 INFO 16856 --- [0.1-8080-exec-5] c.s.b.controller.BoardController : list 거침
2021-07-17 00:26:07.204 INFO 16856 --- [0.1-8080-exec-5] com.sideproject.bankcheck.aop.LogAspect : 테스트 속도 끝
2021-07-17 00:26:07.204 INFO 16856 --- [0.1-8080-exec-5] com.sideproject.bankcheck.aop.LogAspect : 걸린시간: 42 ms
....
현업에서는?
예제에서 했던 거랑 크게 틀리지가 않음
728x90
반응형
LIST
'spring' 카테고리의 다른 글
mockito 개념 및 활용 (0) | 2021.07.31 |
---|---|
Junit 개념 및 활용 (0) | 2021.07.24 |
[Springboot] Logback 사용하기 (0) | 2021.03.21 |
[Gradle] build.gradle 기본 구조(dependencies) (0) | 2021.03.15 |
스프링 시큐리티 회원가입 & 로그인 & 로그아웃 (0) | 2020.02.06 |