[네번째] Spring 사내 스터디

2012. 11. 26. 19:00Study/Study group

반응형
스터디 인원 대거 합류..!!
1~2장 : 백, 박, 석, 김, 강
6~7장 : 공, 박, 권, 김, 차(결석)

2012/10/23 - [Study/Study group] - [첫번째] Spring 사내 스터디

2012/10/31 - [Study/Study group] - [두번째] Spring 사내 스터디

2012/11/12 - [Study/Study group] - [세번째] Spring 사내 스터디


[스프링 스터디 4번째]

토비 vol 1, 6~7장 (분량 대략 300페이지)

1) AOP - IoC/DI / 서비스추상화와 더불어 스프링의 3대 기반 기술 중 하나 이다.

2) 목 프레임워크 : 그중에서도 Mockito라는 프레임워크는 사용하기도 편리하고, 코드도 직관적이라
                        최근 많은 인기를 얻고 있음.
3) 트랜젝션
    - 핵심기능, 부가기능 : 부가기능과 핵심기능의 분리 => 프록시

4) 프록시 : 클라이언트가 사용하려고 하는 실제 대상인 것처럼 위장해서 클라이언트의 요청을
              받아주는 것을 대리자, 대리인과 같은 역할을 한다고 해서 프록시(proxy)라고 부른다.
최종적으로 요청을 위임받아 처리하는 실제 오브젝트를 타깃(target) 또는 실체(subject) 라고 부른다.

ex) 프록시 생성
Hello proxiedHello = (Hello)Proxy.newProxyInstance(
    getClass().getClassLoader(),
     -> 동적으로 생성되는 다이내믹 프록시 클래스의 로딩에 사용할 클래스 로더

    new Class[] {Hello.class}, <- 구현할 인터페이스
    new UppercaseHandler(new HelloTarget()))); -> 부가기능과 위임코드를 담은 핸들러

토비 1 - 431p
     클라이언트  ------------->        프록시  ------------->       타깃 


"데코레이터 패턴" : 인터페이스를 통해 위임, 프록시를 사용
"프록시 패턴" : 클라이언트에게 타깃에 대한 레퍼런스를 넘겨야하는데, 실제 타깃 오브젝트는 만드는
                 대신 프록시를 넘겨주는 것이다. 프록시의 메소드를 통해 타깃을 사용하려고 시도하면,
                 그때 프록시가 타깃 오브젝트를 생성하고 요청을 위임해주는 식이다.



interface에 선언된 메소드들을 쓰지도 않는 것들은 구현 할 필요가 없다.




"다이내믹 프록시" : 타깃의 인터페이스와 같은 타입으로 만들어진다.
                         + 리플렉션 방식(Java.lang.reflect)
 - 프록시 기능 : 타깃과 같은 메소드를 구현하고 있다가 메소드가 호출되면 타깃 오브젝트로 위임한다.
                 지정된 요청에 대해서는 부가기능을 수행 한다.
 - 리플렉션 : 자바의 코드 자체를 추상화해서 접근하도록 만든 것이다.
    ex) String의 length() 메소드라고 하면
        1)  Method lengthMethod = String.class.getMethod("length");
        2) invoke() : 메소드를 실행시킬 대상 오브젝트와 파라미터 목록을 받아서 메소드를
                         호출한 뒤에 그 결과를 Object  타입으로 돌려준다.




 - 어드바이스(Advice) : 타깃 오브젝트에 적용하는 부가기능을 담은 오브젝트
 - 포인트 컷(PointCut) : 부가기능 적용 대상 메소드 선정 방법

      <1> 프록시는 클라이언트로부터 요청을 받으면 먼저 포인트컷에게 부가기능을 부여할 메소드를
            확인 해달라고 요청한다.
      <2>확인 받은 뒤 어드바이스를 호출 한다.
 -  어드바이저 : 여러개의 어드바이스와 포인터컷이 추가 될 수 있기 때문에 따로 등록 시
                     어떤 어드바이스(부가기능)에 대해 어떤 포인트컷(메소드 선정)을 적용 할지
                     애매해진다.
                     그래서 어드바이스와 포인트컷을 묶은 오브젝트를 어드바이저라고 부른다.
                     어드바이저 = 포인트컷(메소드 선정 알고리즘)+어드바이스(부가기능)



"빈 후처리기" : 자동프록시 생성
 1) DefaultAdvisorAutoProxyCreator 빈 후처리기가 등록 되어있으면
 2) 스프링은 빈 오브젝트를 만들 때마다 후처리기에게 빈을 보낸다.
 3) DefaultAdvisorAutoProxyCreator는 빈으로 등록된 모든 어드바이저 내의 포인트컷을 이용해
     전달 받은 빈이 프록시 적용 대상인지 확인 한다.
 4) 프록시 적용 대상이면 내장된 프록시 생성기에게 현재 빈에 대한 프록시를 만들게 하고, 만들어진
     프록시에 어드바이저를 연결
해준다.
 5) 빈 후처리기는프록시가 생성되면 원래 컨테이너가 전달해준 빈 오브젝트 대신
     프록시 오브젝트를 컨테이너에게 돌려준다.



"확장된 포인트컷" : 사실..한가지가 더 있었음..--;;
포인트컷은 클래스 필터와 메소드 매처 2가지를 돌려주는 메소드를 가지고 있다.
public interface Pointcut{
    ClassFilter getClassFilter();  -> 프록시를 적용할 클래스인지 확인
    MethodMatcher getMethodMatcher(); -> 어드바이스를 적용할 메소드인지 확인
}



"포인트컷 표현식(pointcut expression)"
복잡함, 세밀함 -> class, method 선정 ==> pointcut expression


AOP란? Aspect Oriented Programming(애스팩트 지향 프로그래밍)


위처럼 핵심적인 기능에서 부가적인 기능을 분리해서 애스펙트라는 독특한 모듈로 만들어서 설계하고 개발하는 방법.
AOP는 OOP를 돕는 보조적인 기술이지 OOP를 대체하는 새로운 개념은 아님.

"AspectJ" : 프록시 처럼 간접적인 방법이 아닌 타깃 오브젝트를 뜯어고쳐서 부가기능을
                직접 넣어주는 직접적인 방법
                즉, 컴파일된 타깃의 클래스 파일 자체를 수정하거나 클래스가 JVM에 로딩되는 시점을
                가로채서 바이트코드를 조작하는 방법   

512p~555p 

 - 끝 -

AOP : cross cutting concern
1) 로그
2) 에러처리,
3) 트랜젝션 처리
 - select (read only)
    insert*
    update*
    delete
    (CUD)
정책에 따라 사전에 해줘야 함.
AOP 적용 시 명명규칙이 중요 함. 레벨(Service, Fasade Layer)결정- 최상위 레벨을 확인
서비스 단위는 업무적으로 각기 다르다. 또는 서로 연관이 있을 수 도 있다.

트랜젝션 전파
 - 특정 메소드 제외

Q) 각각의 서비스도 class 프록시로 구분이 가능 할 꺼 같음. - 상위가 있을 경우 한단계 UP
    구분 가능.






반응형