AOP 적용 대상 : 선언적 트랜잭션
비즈니스 로직과 트랜잭션 경계설정은 완벽하게 독립적
트랙잭션의 시작과 종료 사이에 비즈니스 로직이 실행되는 조건만 지키면 됨
→ 비즈니스 로직을 담당하는 코드를 메소드로 추출해서 독립
비즈니스 로직 분리 but 트랜잭션 담당 코드가 여전히 서비스 안에 있음
DI 의 기본 아이디어 : 실제 사용할 오브젝트의 클래스 정체는 감추고 인터페이스 통해 간접 접근
→ 이로 인해 구현 클래스를 외부에서 자유롭게 변경 가능
인터페이스 이용해 구현 클래스 클라이언트에 노출하지 않고 런타임 시에 DI를 통해 적용하는 방법을 쓰는 이유 → 구현 클래스를 상황에 따라 바꿔가면서 사용하기 위해. (테스트 때는 테스트 구현, 정식 운영 시에는 정규 구현 클래스 등) 한 번에 한 가지 클래스를 선택해서 적용
한 번에 두 개의 인터페이스 구현 클래스를 동시에 이용한다면 ?
ex) ****동시에 비즈니스 로직, 트랜잭션 적용
트랜잭션 담당 클래스는 비즈니스 로직 안 담고 있음 → 인터페이스 구현 클래스에 실제적인 로직 처리 작업은 위임하는 것. 그리고 그 위임을 위한 호출 작업 이전과 이후에 적절한 트랜잭션 경계 설정