[책]토비의스프링_6장_AOP
스프링 AOP
애플리케이션의 핵심적인 기능에서 부가적인 기능을 분리해서 애스펙트라는 독특한 모듈로 만들어서
설계하고 개발하는 방법을 애스펙트 지향 프로그래밍
또는 약자로 AOP(Aspect Oriented Programming)이라고 한다.
( => 관점 지향 프로그래밍)
AOP는 OOP를 돕는 보조적인 기술이지 OOP를 완전히 대체하는 새로운 개념이 아니다.
AOP는 결국 애플리케이션을 다양한 측면에서 독립적으로 모델링하고
설계하고 개발할 수 있도록 만들어주는 것이다.
AOP를 이용해 트랜잭션 속성을 지정하는 방법에는 포인트컷 표현식과 메소드 이름 패턴을
이용하는 방법과 타깃에 직접 부여하는 @Transactional 어노테이션을 이용하는 방법이 있다.
@Transactioanl을 이용한 트랜잭션 속성을 테스트에 적용하면
쉽게 DB를 사용하는 코드의 테스트를 만들 수 있다.
스프링 AOP 어노테이션
@Aspect, @Component
해당 클래스가 Aspect를 나타내는 클래스를 명시하고,
스프링 빈으로 등록하기 위해 @Component 어노테이션을 명시
@Pointcut(포인트컷 표현식)
포인트컷은 위에서 부가기능이 적용될 대상(메소드)를 선정하는 방법
@Before
타겟 메소드가 실행하기 이전 어드바이스 기능을 수행
@After
타겟 메도스의 결과에 상관없이 실행 후 어드바이스 기능을 수행
@AfterReturning
타겟 메소드가 정상적으로 결과값을 반환 후 어드바이스 기능을 수행
@AfterThrowing
타겟 메소드가 수행 중 예외를 발생하면 어드바이스 기능을 수행
@Around
어드바이스가 타겟 메소드를 감싸서 타겟 메소드 호출전,후 어드바이스 기능을 수행
Around는 타겟을 실행할 지 혹은 바로 반환할지도 정할 수 있음
정리
관점 지향 프로그래밍(AOP)는 기능을 구현할때 핵심적인 기능과 부가적인 기능을 분리하여
각 관점을 기준으로 모듈화하는 방식
핵심적인 기능 : 비즈니스 로직
부가적인 기능 : 데이터베이스 연결&트랜잭션 관리 , 로깅, 파일 입출력
은행 애플리케이션을 관심사라는 관점으로 표현한 구조
A B C
계좌이체 입출금 이자계산 < --- 비즈니스 로직
로깅 로깅 로깅
트랜잭션 트랜잭션 트랜잭션
보안 보안 보안
로깅, 트랜잭션, 보안은 횡단 관심사라고 한다.
횡단 관심사의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적.