본문 바로가기

카테고리 없음

토비의 스프링 - #6.AOP

#AOP는 스프링의 기술 중에서 가장 이해하기 힘든 난해한 용어와 개념을 가진 기술로 악명이 높다.

 

#트랜잭션 코드의 분리 

 - 비즈니스 로직이 주인이어야할 메소드 안에 이름도 길고 무시무시하게 생긴 트랜잭션 코드가 더 많은 자리를 차지

 

 해결책 1. 메소드를 이용한 분리 (비즈니스 로직을 메소드로 뺸다.)

  -> 여전히 트랜잭션 코드가 존재한다. 순수하게 비즈니스 로직을 담고 있는 코드만 놔두고 트랜잭션 경계설정을 담당하는 코드를 외부로 빼낼 수 없을까?

 

 해결책 2. 트랜잭션 기능을 따로 구현한 클래스(분리) + DI

 장점 : 비즈니스 로직을 담당하고있는 코드를 작성 할 때에는 트랜잭션과 같은 기술적인 내용에는 신경쓰지 않아도 된다. 또한 비즈니스 로직에 대한 테스트를 손쉽게 작성할 수 있다.

 

#고립된 단위 테스트

- 테스트 대역 ex) 테스트 스텁, 목 오브젝트

- 목 오브젝트를 활용하면 의존관계 속에 있는 오브젝트도 손쉽게 고립된 테스트로 만들 수 있다. ( Mockito 프레임워크 ) 

 

#다이내믹 프록시와 팩토리 빈

 - 프록시 (proxy) : 자신이 클라이언트가 사용하려고 하는 실제 대상인 것처럼 위장해서 클라이언트의 요청을 받아주는 것을대리자, 대리인과 같은 역할을 한다고 해서 프록시라고 부른다.

 - 타깃 : 프록시를 통해 최종적으로 요청을 위임받아 처리하는 실제 오브젝트

 

#프록시의 사용 목적 

 1. 클라이언트가 타깃에 접근하는 방법을 제어하기 위해 : 프록시 패턴

 2. 타깃에 부가적인 기능을 부여해주기 위해 : 데코레이터 패턴

 

 

 

- DI를 이용한 트랜잭션의 분리는 데코레이터 패턴과 프록시 패턴으로 이해될 수 있다.

- 번거로운 프록시 클래스 작성은 JDK의 다이내믹 프록시를 사용하면 간단하게 만들 수 있다.

- 다이내믹 프록시는 스태틱 팩토리 메소드를 사용하기 때문에 빈으로 등록하기 번거롭다. 따라서 팩토리 빈으로 만들어야 한다. 스프링은 자동 프록시 생성 기술에 대한 추상화 서비스를 제공하는 프록시 팩토리 빈을 제공한다.

- 프록시 팩토리 빈의 설정이 반복되는 문제를 해결하기 위해 자동 프록시 생성기와 포인트컷을 활용할 수 있다. 자동 프록시 생성기는 부가기능이 담긴 어드바이스를 제공하는 프록시를 스프링 컨테이너 초기화 시점에 자동으로 만들어준다.