나만보는페이지

[스터디정리] 토비스프링 6장 AOP (1) 본문

study

[스터디정리] 토비스프링 6장 AOP (1)

pplenty 2020. 4. 6. 02:36

토비스프링 6장 AOP (1)

학습 목표

AOP 가치를 이해하고 효과적으로 사용할 방벙을 찾아보자.

트랜잭션 코드 분리 단계

UserService 내에는 비즈니스 로직과 트랜잭션 로직이 함께 존재하기 때문에 분리 해야 한다.

(1) 메소드 분리

  • 장점
    • 메소드가 분리되어 깔끔해짐.
  • 단점
    • 비즈니스 로직 코드에 트랜잭션을 적용하고 있다는 사실이 드러남.
    • 부가기능(트랜잭션)을 어디에 적용할 것인가가 코드에 노출됨.

(2) DI를 이용한 데코레이터 패턴 적용

  • 장점
    • 비즈니스 로직을 담은 클래스의 코드에는 영향을 주지 않고 트랜잭션이라는 부가기능을 자유롭게 부여할 수 있는 구조.
    • 비즈니스 로직에 대한 테스트를 쉽게 만들 수 있다.
    • 타깃의 코드를 손대지 않고, 클라이언트가 호출하는 방법도 변경하지 않은 채로 새로운 기능을 추가할 때 유용.
  • 단점
    • 클라이언트가 핵심기능을 가진 클래스를 직접 사용해버리면 부가기능은 적용되지 않는다.
    • 프록시를 만드는 일이 상당히 번거로움.
    • 타깃의 인터페이스를 구현하고 위임하는 코드를 작성해야함.
    • 부가기능 코드가 중복될 가능성이 많음.

(3) 다이내믹 프록시를 이용한 트랙잭션 부가기능(FactoryBean)

  • 장점
    • 타깃의 종류에 상관없이도 적용 가능.
    • 프록시 클래스 코드 작성의 부담이 없어지고 중복도 제거됨.
  • 단점
    • 동일한 기능의 프록시를 여러 오브젝트에 적용할 경우 오브젝트 단위의 중복이 생김.

(4) 스프링 프록시 팩토리 빈(ProxyFactoryBean)

  • 장점
    • 부가기능을 담은 어드바이스와 부가기능 선정 알고리즘을 담은 포인트컷이 프록시에서 분리됨.
    • 여러 프록시에서 공유해서 사용 가능.
  • 단점
    • 트랜잭션 적용 대상이 되는 빈(타깃)마다 일일이 프록시 팩토리 빈을 설정해 줘야함.

(5) 스프링 빈생성 후처리 기법을 활용한 자동 프록시 생성과 포인트컷

  • 장점
    • 프록시 적용 대상을 일일이 지정하지 않고 패턴을 이용해 자동으로 선정.
    • 포인트컷 표현식을 이용해 적용 대상을 손쉽게 선택

뇌새김

  • 의존성 주입은 기본적으로 타입이 일치하는 빈을 찾아준다. 같은 타입이 2개 이상이면 필드 이름(bean name)을 이용해 빈을 찾는다.
  • 프록시 패턴은 클라이언트가 타깃에 접근하는 방법을 제어(예를 들면 권한 체크)하기 위해 또는 타깃에 부가적인 기능(예를 들면 트랜잭션)을 부여해주기 위해 사용
  • 스프링은 '&'를 빈 이름 앞에 붙여주면 팩토리 빈 자체를 돌려준다.
  • AOP 용어 정리
  • 스프링은 프록시 빈을 등록할 때, 경우에 따라 JDK dynamic proxy 또는 CGLib 을 이용하여 프록시 객체를 생성한다.

Reference

  • 토비의 스프링 3.1

'study' 카테고리의 다른 글

[스터디정리] 토비스프링 6장 AOP (2)  (0) 2020.04.12
[스터디정리] HTTP client  (0) 2020.04.06
Comments