[Spring] AOP 주요 개념 정리

leesoyeon·2023년 8월 13일
0

Spring

목록 보기
1/3

Aspect(애스펙트) : AOP의 단위가 되는 횡단 관심사

횡단 관심사(Cross-Cutting Concern) :
핵심(core) 비즈니스 로직과 다소 거리가 있지만,
여러 모듈에서 공통적으로 반복적인 처리를 요구하는 내용

횡단 관심사 분리(Separation of Cross-Cutting Concern) :
횡단 관심사에 해당하는 부분(부수적인 것)을 분리해서 한 곳으로 모은다

@Component :
@Aspect 랑 짝궁
component-scan시 ‘여기 봐주세요’라는 의미

JoinPoint :
어드바이스(특정 조인 포인트(무언가 변화가 생겼을 때)에서 실행되는 코드
횡단 관심사를 실제로 구현

Advice : 어떤 부가 기능을 언제 사용할지 정의

  • 언제?
    • Before : 조인 포인트 전에 실행
      (프로그램 실행하기 전에)
    • After : 조인 포인트에서 처리가 완료된 후 실행
      (프로그램의 실행이 끝난 직후)
    • Around : 조인 포인트 전후에 실행
      (메인 로직이 일어나기 전에 로그 한번 찍어주고, 끝난 후에 한번 찍어주고)
    • After Returning : 조인 포인트가 정상적으로 종료 후 실행
    • After Throwing : 조인 포인트에서 예외 발생 시 실행 (예외가 발생 안 되면 실행 안 됨)

AOP 대상 : 로그, 보안, 트랜잭션, 에러

@Before("execution(* kr.or.ddit.*..*(..))") 
public void startLog(JoinPoint jp) {
	log.info("startlog");
    log.info("startlog : {}", jp.getSignature());
    // 출력값 예 : kr.or.ddit.service.BoardService.register(BoardVO)
    log.info("startlog : {}", Arrays.toString(jp.getArgs()));
    // 출력값 예 : [BoardVO (boardNo=1, title=햄스터)]
}

포인트컷 표현식 : *..*(..)

  • * : 임의의 1개의 리턴 타입

  • .. : 임의의 0개 이상

execution : 포인트컷(대상(메소드)을 선별하는 것) 지정자 (대상 : 메인 코어)

  • .getSignature() :
    어떤 클래스의 어떤 메소드가 실행 되었는지 보여짐
    파라미터 타입은 무엇인지 보여줌
  • .getArgs() :
    전달된 파라미터 정보를 보여줌
  • @AfterReturning() :
    AfterReturning 어드바이스
    조인 포인트가 정상적으로 종료한 후에 실행됨 (예외 발생 시 실행 안 됨)
  • @AfterThrowing() :
    조인 포인트에서 예외 발생 시 실행 (예외 발생 안 되면 실행 안 됨ㅇ
  • @Around() :
    ProceedingJoinPoint : around 어드바이스에서 사용
    해당 pjp에서만 around 사용
    횡단관심사 - 부수적, 포인트컷 대상
    스프링 프레임워크가 컨트롤 하고 있는 비즈니스 로직 호출을 가로챔
    책임이 around 어드바이스로 전가됨
    그래서 비즈니스 메소드에 대한 정보를 around 어드바이스 메소드가 가지고 있어야 하고
    그 정보를 스프링 컨테이너가 around 어드바이스 메소드로 넘겨주면
    ProceedingJoinPoint 객체로 받아서 around 어드바이스가 컨트롤 시 활용함

트랜잭션 :
데이터베이스를 변경(I/U/D)하기 위해 수행되어야 할 논리적 단위
여러개의 sql로 구성됨

ACID

  • 원자성(Atomicity) : 흑백논리. All or Nothing
  • 일관성(Consistency) : 성공 시 일관성(무결성) 유지
  • 고립성(Isolation) : 외부 간섭 없음. 화장실 원리.
  • 지속성(Durability) : 성공 시 영속적 보관

@ControllerAdvice :

  • Controller와 동일한 역할 수행 (예외 발생 시 예외만 처리)
  • ControllerAdvice(”특정패키지”) → 특정 패키지 이하에서 catch되지 않은 Exception발생 시 이 어노테이션이 붙은 클래스가 동작
  • Controller에서 Exception이 발생한 것을 DispatcherServlet에서 Java Virtual Machine으로 가기 전에 먼저 예외를 잡음

@ExceptionHandler :

  • RequestMapping과 동일한 역할을 수행
  • 어떤 특정한 오류가 발생했을 때 RequestMapping을 한다

0개의 댓글