Kim-Baek 개발자 이야기

[책] 스프링 철저 입문 - AOP 본문

개발/Spring

[책] 스프링 철저 입문 - AOP

김백개발자 2020. 8. 31. 14:10

구현하고자 하는 비즈니스 로직과는 다소 거리가 있으나, 여러 모듈에 걸쳐 공통적이고 반복적으로 필요로 하는 처리 내용을 횡단 관심사라고 부른다,

 

- 보안

 

- 로깅

 

- 트랜잭션 관리

 

- 모니터링

 

- 캐시 처리

 

- 예외 처리

이러한 것들이 예시가 될 수 있다. 횡단 관심사에 해당하는 부분을 한 곳으로 모으는 것을 횡단 관심사의 분리라 하고, 실현하는 방법을 관점 지향 프로그래밍이라 한다. 

AOP는 관점 지향 프로그래밍을 의미하는 약자로, 여러 클래스에 흩어져 있는 횡단 관심사를 중심으로 설계와 구현을 하는 프로그래밍 기법이다. 인스턴스들이 필요한 공통적인 기능을 외부에서 집어넣는 것이다.

AOP의 개념

- 애스팩트 : 단위되는 횡단 관심사. 예로 "로그를 출력한다", "트랜잭션을 관리한다"와 같은 관심사가 애스팩트이다.

 

- 조인 포인트 : 횡단 관심사가 실행될 지점이나 시점을 말한다. 

 

- 어드바이스 : 특정 조인포인트에서 실행되는 코드로 실제로 구현해서 처리하는 부분.

 

- 포인트컷 : 수많은 조인 포인트 중 실제로 어드바이스를 적용할 곳을 선별하기 위한 표현식

 

- 위빙 : 애플리케이션 코드의 적절한 시점에 애스팩트를 적용하는 것. 라이브러리에 따라 다르고, 컴파일이나 클래스 로딩 등 다양한 시점이 있다. 스프링은 기본적으로 실행 시점이다.

 

- 타깃 : AOP 처리에 의해 처리 흐름에 변화가 생긴 객체를 말한다.

스프링에서 지원하는 어드바이스 유형이다. 아래 그림으로 설명이 가능하다.

스프링 AOP

스프링 안에 AOP를 지원하는 모듈로 스프링 AOP가 포함되어 있다. 빈을 타깃으로 어드바이스를 적용하는 기능이 있다. 프락시 객채를 만들어서 대체하는 방법으로 한다. 어드바이스가 적용된 이후, DI 컨테이너에서 빈을 꺼내보면 프락스 형태로 어드바이스 기능이 덧입혀진 빈이 나온다.

AspectJ라는 AOP프레임워크도 포함되어 있다. 어드바이스를 정의하기 위한 애너테이션이나 포인트컷 표헌 언어 등을 제공한다. 다양한 위빙 시점을 제공한다. 

스프링 프로젝트에서 활용되는 AOP 기능

- 트랜잭션 관리 : @Transactional 애너테이션을 지정하면 관리가 된다. 

 

- 인가 : 스프링 시큐리티에서 제공하는 인가 기능을 AOP 형태로 적용할 수 있다. @PreAuthorize 애너테이션이다. 

 

- 캐싱 : @Cacheable

 

- 비동기 처리  : @Async 를 쓰고 CompleableFuture 타입을 반환하게 하면, 별도의 스레드에서 실행

 

- 재처리 

반응형
Comments