개요
- 비즈니스 로직(서비스에 필요한 핵심 기능 등)
인프라 로직 (시간 재기-로그 남기기, 트랜잭션 걸기, 권한체크 등 부가 기능)
- 인프라 로직 : 애플리케이션의 전 영역에서 나타남. 중복 코드를 만들어 낼 가능성 때문에 유지보수가 힘들 수 있음. ex) 1억 개의 메서드에 동일한 내용의 어떤 기능이 기재되어 있다면? 그 기능을 바꿀 때 1억번 수정...?!
- 이처럼 메서드(기능)마다 추가 되어 있는 인프라 로직을
횡단 관심 (cross-cuttig concern)
이라 한다.![](https://velog.velcdn.com/images/yoneeki1177/post/96931bc2-84fa-4cb8-ac6e-5bc7352122e9/image.jpeg)
AOP
- AOP : Aspect-Oriented Programming (관점 지향 프로그래밍). 앞서 말한 횡단 관심에 따라 프로그래밍을 하는 것.
AOP 주요 용어
- Target : 어떤 대상에 부가 기능을 부여할 것인가.
- Advice : 어떤 부가 기능을 부여할 것인가. Before, AfterReturning, AfterThrowing, After, Around..
- Join Point : 어디에 적용할 것인가. 메서드, 필드, 객체, 생성자 등
- Point Cut : 실제 advice가 적용될 지점. Spring AOP에서는 advice가 적용될 메서드를 선정
AOP의 구현 방법
Transactional
- @Transactional으로 생성된 프록시 객체는 @Transactional이 적용된 메소드가 호출될 경우, PlatformTransactionManager를 사용하여 트랜잭션을 시작하고, 정상 여부에 따라 Commit/Rollback 동작을 수행한다.
- 이로 인해 우리는 비즈니스 로직에만 집중하고 트랜잭션이라는 인프라 로직은 AOP로 분리되게 된다.
- @Interceptor, @Filter도 AOP의 일종이다.