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