본문 바로가기
Spring Framework

AOP - 어드바이스(Advice) & 인터셉터(Intercepter)

by 짱닭 2020. 6. 28.
반응형

AOP(Aspect Oriented Programing)

- 요청에 따른 처리를 하다보면 공통적인 처리부분이 있다. 예를들어 모든 트랜잭션이 종료된 후 로깅이란 과정을 반드시 수행한다고 했을 때 로깅 수행은 트랜잭션에 상관없이 공통적으로 수행되는 부분이다. 

이와같이 프로그램을 횡단하는 곳에 나타나는 공통적인 코드를 횡단적 관심사(Crosscutting Concern)이라고 한다

공통된 부분을 모듈화(클래스로 생성)하고 호출코드만으로 사용한다.

AOP는 호출코드까지 생략시켜 완전한 코드의 분리를 만든다.

 

 

필터(Servlet filter)

- 스프링 프레임워크와 무관하게 지정된 자원에 대해 동작

- 스프링은 Dispatcher Servlet 으로부터 시작되므로 필터는 스프링 컨텍스트 밖에 존재(스프링과 관계없음)

 

인터셉터(Intercepter)

- 스프링의 Dispathcer Servle이 컨트롤러를 호출할 때 전후로 끼어듬

- 스프링 컨텍스트 내부에 존재

 

인터셉터의 메소드

preHandle()

- 컨트롤러 메소드 실행 직전에 수행

- true를 반환하면 계속 진행되고, false를 리턴하면 실행체인(다른 인터셉터, 컨트롤러 실행)이 중지됙 반환

- 필터의 응답처리가 있다면 그것은 실행함

 

postHandle()

- 컨트롤러 메소드 실행 직후에 실행

- View 페이지가 렌더링되기 전에 ModelAndView객체 조작 가능

 

afterCompletion()

- View 페이지가 렌더링 된 후에 실행

 

afterConcurrentHandlingStarted()

- 비동기 요청시 postHandle()과 afterCompletion()은 실행되지 않고, 이 메소드가 실행됨

 

 

 

Advice 

- 공통된 부분(코드)를 어드바이스(Advice)라고 함

 

Advice 어노테이션

@Before - Joinpoint 전에 실행

@Around - Joinpoint 전, 후에 실행

@After - Joinpoint 호출이 리턴되기 전에 실행

@AfterReturning - Joinpoint 메소드 호출이 정상적으로 졸요된 뒤에 실행

@AfterThrowing - 예외가 발생했을 때 실행

 

 

Joinpoint

- 어드바이스를 끼울 부분(위치)을 조인포인트(Joinpoint) 라고 함

- Joinpoint의 모음이 Pointcut

 

Weaving

- Advice 를 Joinpoint에 끼워넣는 작업이 Weaving(=Crosscutting)

 

* Advisor

- 스프링에만 있는 어드바이스와 포인트컷을 한데 묶어 다룸

 

 

반응형

댓글