일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 플러터 개발
- JPA공부
- Axon framework
- 플러터 공부
- K8S
- Kafka
- 알고리즘공부
- 프로그래머스
- nestjs
- 기술면접공부
- 스프링
- JPA스터디
- 스프링부트
- nestjs공부
- querydsl
- 기술공부
- 스프링부트공부
- 코테공부
- JPA
- 자료구조공부
- 자바공부
- Flutter
- JPA 공부
- 스프링 공부
- DDD
- 스프링공부
- 코테준비
- JPA예제
- 카프카
- nestjs스터디
- Today
- Total
DevBoi
AOP(Aspect Oriented Programming) 개념 정리 본문
1. AOP : 스프링의 3대 요소중 하나, 관점 지향 프로그래밍이라는 뜻...
스프링은 프록시 기반 AOP, 빈 AOP 설정 등에 특화
쉽게 말하면, 중복 사용되는 코드들을 재사용 가능하게, 자바로 치면 class화 시켜서 코딩하는 것
- 가장 쉬운 예, Log print , 트랜잭션 처리, 시간처리
Aspect는 포인트 컷 + 어드바이스의 결합이다.
포인트 컷 : 어떤 메소드에 대해
어드바이스 메소드 : 어떤 메소드를 실행??
약간 인터셉터랑 비슷하다고 생각한다. 물론, Request 단이냐 Servlet 단이냐에 따라 다르긴하지만...
동작시점설명
Before | 메소드 실행 전에 동작 |
After | 메소드 실행 후에 동작 |
After-returning | 메소드가 정상적으로 실행된 후에 동작 |
After-throwing | 예외가 발생한 후에 동작 |
Around | 메소드 호출 이전, 이후, 예외발생 등 모든 시점에서 동작 |
ex-code)
@Aspect
@Component
public class LogAspectMethod{
//static 변수 선언
private static Logger logger = LoggerFactory.getLogger(LogAspectMethod.class);
@Around("execution(* com.example.ysj.controller.indexController.*(..))") //이것이 포인트 컷 (어떤 어노테이션들에서 수행할것인지)
public Obect logging(ProceedingJoinPoint pjp) throws Trowable{
LogFunction logfunction = new LogFunction();
logfunction.strat();
logger.info("start - sysdate");
Object result = pjp.proceed();
logger.info("finish - sysdate");
return;
}
}
이렇게 Around 로, 특정 컨트롤러 하위의 모든 메소드를 지정하고,
특정 메소드가 실행되면, pjp 변수로 받은 메소드가 실행후에 항상 logger.info 로 찍는다.
너무 많으면 log print 시간도 고려해서, 핵심 로직에만 넣는 것이 옳다고 생각한다.
execution(* com.example.ysj.controller.indexController.*(..))"
execution 파라미터로는 리턴타입, 패키지 지정, 매개변수의 개수상관없이 모든 매개 변수를 지정한다는 의미 (추후 코딩때 좀더 다양한 케이스에 대해서 정리)
Around execution 매게 변수로 구글링 하면 뭐 많이 나온다.
프록시, 랩핑오브젝트
스프링에서는 사용자가 프록시를 호출, 타겟메소드 전에 선처리, 메소드, 후처리 방식으로 진행
프록시 기반, AOP는, 각각 다른 비즈니스 로직이 아닌, 개발단에서 꼭 필요한,
로깅, 시간체크, 보안(이것도 로깅과 관련이 있다.)
무튼, 비즈니스 로직 외에 공통으로 필요한 개발 로직들은 AOP로 감싸는 것이 기본...(핵심 로직만... 주문 결제 등등...)
오늘은 노트북 충전기를 회사에 놓고 온 관계로... 다음엔 코드를 직접 짜면서 공부를 해야겠다....
글만 적으니... 약간 뜬구름 잡는 듯한...그래도 개념정리에 도움이 되었다.
개발하면서 느낀건 개념정리도 정말 중요하다는...
'Develop > [Spring]' 카테고리의 다른 글
스프링 부트 vs 스프링 (0) | 2021.10.18 |
---|---|
DispatcherServlet이란? (0) | 2021.06.24 |
@RequestBody,ResponseBody,Requestparam 등등 (0) | 2021.06.13 |
@RequstMapping 기본구조 및 사용 방법 예제 (0) | 2021.06.13 |
@AutoWired 사용 이유, 의존성 개념 (0) | 2021.06.04 |