본문 바로가기
Today/Study

23/12/14

by shulk 2023. 12. 14.

AOP

aop는 관점 지향 프로그래밍이라 불리고 

핵심 기능과 부가 기능을 분리하여 애플리케이션 전체에 걸쳐 사용되는 부가 기능을 모듈화하여 재사용할 수 있도록 지원하는 것이다

 

 

어드바이스

부가기능을 핵심기능에 언제 수행할 건지를 정하는 것이다.
(핵심기능 실행전 or 실행후 or 전후 전부 or 핵심기능이 오류가 난다면 예외 터지면 그때 수행 or 핵심기능 예외없이 성공후 수행)

  • @Around: '핵심기능' 수행 전과 후 (@Before + @After)
  • @Before: '핵심기능' 호출 전 (ex. Client 의 입력값 Validation 수행)
  • @After: '핵심기능' 수행 성공/실패 여부와 상관없이 언제나 동작 (try, catch 의 finally() 처럼 동작)
  • @AfterReturning: '핵심기능' 호출 성공 시 (함수의 Return 값 사용 가능)
  • @AfterThrowing: '핵심기능' 호출 실패 시. 즉, 예외 (Exception) 가 발생한 경우만 동작 (ex. 예외가 발생했을 때 개발자에게 email 이나 SMS 보냄)

 

포인트컷
부가기능 적용 위치 (어떤 컨트롤러,어떤 메소드등에 적용 할 건지)

modifiers-pattern: 접근제어이고 *이면 머던 상관없다 하는거다
return-type-pattern: 어떤 타입의 리턴인가이고 *이면 무엇이던 상관없다
declaring-type-pattern: 클래스명 어떤 부분에 설정할건지

 

 

@Aspect

@Aspect 는 Spring 빈 클래스에만 적용 가능하고, Aop설정 할거다 알려주는거다. (즉 AOP설정하려는 클래스에 Aspect하면 된다)

 

동일 ip 컨트롤러의 모든 기능 사용 횟수 제한 설정

Aop는 원리만 대충 이해하고 직접 경험 해본적은 없어서 오늘 다시 복습하고 어떻게 할까 생각하다가 

관리자가 특정 회원 차단하거나 특정 ip를 차단같은 기능이 생각나서 일단 기본적으로 동일 ip가 컨트롤러의 모든 기능 3번 이용 초과시 이용 못하게 해봤다.(연습이니 DB에 저장 생략해서 서버가 작동중일때만 체크)

 

 

* getOrDefault(Object key, V DefaultValue) 는 찾는 키의 값이 존재하면 그 값을 가져오고 없으면 기본값을 반환

* @Before 어드바이스는 메소드 실행전이니 void타입으로 해야한다.
* @Before 어드바이스는  ProceedingJoinPoint를 사용할 수 없다. 
* ProceedingJoinPoint는 @Around용이고 @Before에서는 JoinPoint를 사용하여 메소드 실행 이전에 조인 포인트의 정보를 가져올 수 있다

 

* 현재 요청한 클라의 ip를 알려면 HttpServletRequest가 필요하니

Aop에서 HttpServletRequest에 접근하려면 이 방법으로 할 수 있다.
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();

* 클라이언트의 ip 찾는 방법은 아직 헤더의 이름 하나하나 의미는 잘 모르나 지금은 Aop해서 중요한게 아니니
이 블로그 참고하고 했다

'Today > Study' 카테고리의 다른 글

23/12/18  (0) 2023.12.18
23/12/15  (0) 2023.12.15
23/12/13  (0) 2023.12.13
23/12/12  (0) 2023.12.12
23/12/08  (0) 2023.12.08