본문 바로가기

BOOK

(16)
[1권] 토비의 스프링 8일차 확장된 포인트컷 기존의 MethodMatcher는 Method에 Proxy를 적용하기 위해 사용하는 메소드이다. 스프링 빈 오브젝트를 프록시 오브젝트로 만들기 위해 사용하는 Method는 getClassFilter()이다. 만약 PointCut 선정 기능을 모두 적용한다면, 먼저 프록시를 적용할 클래스인지 판단하고 나서, 적용 대상 클래스라면 어드바이스를 적용할 메소드인지 확인하는 식으로 동작한다. -> 결국 두가지를 충족해야 타깃의 메소드에 어드바이스가 적용되는 것이다. 즉, 모든 빈에 대해 프록시 자동 적용 대상을 선별해야 하는 빈 후처리기인 DefaultAdvisorAutoProxyCreator는 클래스와 메소드 선정 알고리즘을 모두 갖는 포인트컷이 필요하다. 설정 즉, Parent Attribut..
[1권] 토비의 스프링 7일차 중복문제의 해결방법 변하지 않는 부분 -> Proxy 생성 팩토리에 맞기고 변하는 부분은 프록시 생성 팩토리에 DI로 적용. 반복적인 ProxyFactoryBean 설정문제 -> 설정 자동기법(다이내믹 프록시가 인터페이스만 제공하면 모든 메소드에 대한 구현 클래스를 자동으로 만들듯이) 빈후처리기를 이용한 자동 프록시 생성기 확장 포인트 BeanPostProcessor인터페이스를 구현해서 만든 빈 후처리기 -> 말그대로 빈 오브젝트로 만들어지고 난 후에, 빈 오브젝트를 다시 가공할수 있게 해준다 -> 빈 후처리기를 스프링에 적용 -> 빈 후처리기 자체를 빈으로 등록 -> 스프링은 빈 후처리기가 등록되어 있다면 빈이 생성될때마다 후처리기로 보내 후처리 작업을 진행한다 -> 스프링이 등록하는 빈 오브젝트의 일..
[1권] 토비의 스프링 6일차 다이내믹 프록시를 위한 팩토리 빈 스프링 빈 기본적으로 클래스 이름과 프로퍼티로 정의된다. 스프링은 지정된 클래스 이름을 가지고 리플렉션을 이용해서 해당 클래스 오브젝트를 만든다. 스프링은 클래스 정보를 가지고 디폴트 생성자로 오브젝트를 만든다. 다이내믹 프록시를 만들어주는 팩토리 빈 Proxy의 newProxyInstance() 메소드를 통해서만 생성이 가능한 다이내믹 프록시 오브젝트는 일반적인 방법으로는 스프링의 빈으로 등록할수 없다. 대신 팩토리 빈을 사용하면 가능하다. 팩토리 빈의 getObject() 메소드에 다이내믹 프록시 오브젝트를 만들어주는 코드를 넣으면 되기 때문이다. MethodInterceptor의 invoke() Method는 ProxyFactoryBean으로부터 타깃 오브젝트에 대..
[1권] 토비의 스프링 5일차 데이터레터 패턴 인터페이스를 기반으로 여러개의 데코레이터 객체를 붙일수 있다. 어떤 데코레이터를 쓸지는 런타임시에 외부에서 주입 다이나믹 프록시 프록시 팩토리에 의해 런타임 시 다이나믹하게 만들어지는 오브젝트이다. Invocation Handler를 구현하여 프록시시 작동할 제공 코드는 직접 작성해야 한다. 다이나믹 프록시는 클라이언트의 모든 요청을 리플렉션 정보로 변홚서 InvocationHandler 구현 오브젝트의 invoke() 메소드로 넘기는 것이다. 작동방식 기존의 Bean Factory를 활용하여, Bean 컨텐이너를 만든다. 만든 컨테이너를 통해, ProxyFactory를 활용하여, 부가기능이 추가된 Proxy Bean을 만든다. ProxyFactoryBean : Advise 한줄평 오늘은..
[1권] 토비의 스프링 4일차 서비스 추강화 ( 인터페이스 화) 클라이언트에 구현클래스를 노출하지 않고 런타임 시에 DI를 사용하는 이유는 일반적으로 구현 클래스를 바꿔가면서 사용하기 위함이다. 테스트시에는 테스트 구현클래스를, 일반적인 경우 일반적인 구현 클래스를.. 데이터레터 패턴 프록시 패턴 : 참조 방식 변경 -> 해당 객체에 대한 레퍼런스만 넘겨주 후 사용할때 생성하는것. 다이나믹 프록시(인터페이스 기반) -> InvocationHandler
[1권] 토비의 스프링 3일차 트랜잭션 경계설정 Dao -> DatasourceTransactionManager -> getConnection() -> Connection 결과에 따라서 Commit() or RollBack() 1) DataSourceTransactionManager library = 'org.springframework', name: 'spring-jdbc' 2) Class Diagram 3) DataSource, Connection DataSource getConnection을 통해 Connection을 획득한다. 3) 여러개의 DB에 넣는 작업 -> 로컬 Transcation으로는 불가. 글로벌 Transcation 방법 사용 Hibernate를 이용하는 작업 -> 기존의 Connection방법과는 다르다. Se..
[1권] 토비의 스프링 2일차 + [2권] 앞부분 트랜잭션 서비스 추상화 원자성 - 모두 이루어지거나 모두 이루어지지 않거나. 책을 회사에 두고 왔다.... 목수가 장비탓을 하면 쓰나. 집에 있는 2권 처음부분을 읽고 정리한다. IOC, DI ApplicationConext -> Bean Factory 상속 -> Bean 설정위한 Meta 정보 Bean Definition 활용 실제로 해보려면, RootBeanDefinition를 생성하고 name, value값을 준 후, staticApplicationContext.registerBeanDefinition() 메소드를 통해 빈으로 등록이 가능하다. Pojo class + Bean Definition Meta 정보 = Spring Run time Object GenericApplicationContext..
[1권] 토비의 스프링 1일차 관심사의 분리 리팩토링 메소드 추출 - 공통적으로 사용하는 코드 추출화하여 메소드화 DB 커넥션 만들기의 독립 상속을 통한 확장 디자인 패턴 추상 메소드 팩토리 패턴 - 템플릿 메소드 패턴 ( 훅 메소드, 추상 메소드 ) 전략 패턴 - IOC, DI와 연관 객체 지향 원칙 Solid원칙 -> DIP(Dependency Inversion Principle) - 의존 역전 원칙 IOC의 활용 -> 생성자를 통해 생성시 구현클래스에 의존하게 되므로 확장성에 무리가 발생한다. 따라서 내부코드에서는 인터페이스에 의지하고 외부에서 그 인터페이스를 상속하는 객체를 주입함으로써 의존성을 탈피하고 확장성을 증진시킨다. Solid원칙 -> OCP ( Open-Closed Principal ) 높은 응집도, 낮은 결합도 F..