Study with book/토비의 스프링 3.1

    6장. AOP4

    6.6 트랜잭션 속성 6.6.1 트랜잭션 정의 트랜잭션 전파 트랜잭션 전파란 트랜잭션 경계에서 이미 진행 중인 트랜잭션이 있을 때 또는 없을 때 어떻게 동작할 것인가를 결정하는 방식을 말한다. 1. PROPAGATION_REQUIRED 가장 많이 사용되는 트랜잭션 속성이다. 진행 중인 트랜잭션이 없으면 새로 시작하고, 이미 시작된 트랜잭션이 있으면 이에 참여한다. DefaultTransactionDefinition의 트랜잭션 전파 속성은 바로 이 PROPAGATION_REQUIRED이다. 2. PROPAGATION_REQUIRED_NEW 항상 새로운 트랜잭션을 시작한다. 즉 앞에서 시작된 트랜잭션이 있든 없든 상관없이 새로운 트랜잭션을 만들어서 독자적으로 동작하게 한다. 3. PROPAGATION_NOT..

    6장. AOP3

    6.5 스프링 AOP 6.5.1 자동 프록시 생성 실습 코드 링크 : https://github.com/vvshinevv/toby-spring/tree/feature/6.5.1 프록시 팩토리 빈 방식의 접근 방법의 한계라고 생각했던 두 가지 문제가 있었다. 그 중에서 부가기능이 타깃 오브젝트마다 새로 만들어지는 문제는 스프링 ProxyFactoryBean의 어드바이스를 통해 해결됐다. 남은 것은 부가기능의 적용이 필요한 타깃 오브젝트마다 거의 비슷한 내용의 ProxyFactoryBean 빈 설정정보를 추가해주는 부분이다. 새로운 타깃이 등장했다고 해서 코드를 손댈 필요는 없어졌지만, 설정은 매번 복사해서 붙이고 target 프로퍼티의 내용을 수정해줘야 한다. 중복 문제의 접근 방법 반복적인 프록시의 메소..

    6장. AOP2

    6.4 스프링의 프록시 팩토리 빈 6.4.1 ProxyFactoryBean 실습 코드 링크 : https://github.com/vvshinevv/toby-spring/tree/feature/6.4.1 스프링은 서비스 추상화를 프록시 기술에도 동일하게 적용한다. 따라서 스프링은 일관된 방법으로 프록시를 만들 수 있게 도와주는 추상 레이어를 제공한다. 스프링의 ProxyFactoryBean은 프록시를 생성해서 빈 오브제트로 등록하게 해주는 팩토리 빈이다. 기존에 만들었던 TxProxyFactoryBean과 달리, ProxyFactoryBean은 순수하게 프록시를 생성하는 작업만을 담당하고 프록시를 통해 제공해줄 부가기능은 별도의 빈에 둘 수 있다. ProxyFactoryBean이 생성하는 프록시에서 사용할..

    6장. AOP1

    서비스 추상화와 더블어 스프링 3대 기반기술의 하나인 AOP에 대해서 알아보자. OOP를 대체하려고 하는 것처럼 보이는 AOP라는 이름 뒤에 감춰진, 그 필연적인 등장배경과 스프링이 그것을 도입한 이유, 그 적용을 통해 얻을 수 있는 장점이 무엇인지에 대한 충분한 이해를 해보자. 6.1 트랜잭션 코드의 분리 6.1.1 메소드 분리 실습 코드 링크 :https://github.com/vvshinevv/toby-spring/tree/feature/6.1.1 메소드로 비지니스 로직을 담당하는 코드를 독립시켜보자. 적어도 순수하게 사용자 레벨 업그레이드를 담당하는 비지니스 로직 코드만 메소드에 담겨 있으니 이해하기도 편하고, 수정하기에도 부담이 없다. 6.1.2 DI를 이용한 클래스 분리 실습 코드 링크 : h..

    5장. 서비스 추상화

    DAO에 트랜잭션을 적용해보면서 스프링이 어떻게 성격이 비슷한 여러 종류의 기술을 추상화하고 이를 일관된 방법으로 사용할 수 있도록 지원하는지 살펴보자. 5.1 사용자 레벨 관리 기능 추가 5.1.1 필드 추가 실습 코드 링크 : https://github.com/vvshinevv/toby-spring/tree/feature/5.1.1 5.1.2 사용자 수정 기능 추가 실습 코드 링크 : https://github.com/vvshinevv/toby-spring/tree/feature/5.1.2 5.1.3 UserService.upgradeLevels() 실습 코드 링크 : https://github.com/vvshinevv/toby-spring/tree/feature/5.1.3 로직을 보면 로그인 횟수와..

    4장. 예외

    자바 개발자가 가장 신경 쓰기 귀찮아하는 것 중의 하나가 바로 예외처리다. 정상적인 결과와 흐름을 보여주는 코드를 만들기도 버거운데 예외상황까지 처리해야한다는 사실이 부담스러울 수도 있다. JdbcTemplate을 대표로 하는 스프링의 데이터 엑세스 기능에 담겨 있는 예외 처리와 관련된 접근 방법에 대해 알아본다. 4.1 사라진 SQLException 4.1.1 초난감 예외처리 예외 블랙홀 예외를 잡고는 아무것도 하지 않는다. 예외 발생을 무시해버리고 정상적인 상황인 것처럼 다음 라인으로 넘어가겠다는 분명한 의도가 있는 게 아니라면 연습 중에도 절대 만들어서는 안 되는 코드다. 예외가 발생하면 그것을 catch 블록을 써서 잡아내는 것까지는 좋은데 그리고 아무것도 하지 않고 별문제 없는 것처럼 넘어가 버..

    3장. 템플릿2

    템플릿이란 바뀌는 성질이 다른 코드 중에서 변경이 거의 일어나지 않으며 일정한 패턴으로 유지되는 특성을 가진 부분을 자유롭게 변경되는 성질을 가진 부분으로부터 독립시켜서 효과적으로 활용할 수 있도록 하는 방법이다. 3.5 템플릿과 콜백 3.5.1 템플릿/콜백의 동작원리 템플릿/콜백의 특징 여러 개의 메소드를 가진 일반적인 인터페이스를 사용할 수 있는 전략 패턴의 전략과 달리 템플릿/콜백 패턴의 콜백은 보통 단일 메소드 인터페이스를 사용한다. 템플릿의 작업 흐름 중 특정 기능을 위해 한 번 호출되는 경우가 일반적이기 때문이다. 콜백은 일반적으로 하나의 메소드를 가진 인터페이스를 구현한 익명 내부 클래스로 만들어진다고 보면 된다. 템플릿/콜백의 작업 흐름 1) 클라이언트의 역할은 템플릿 안에서 실행될 로직을..

    3장. 템플릿1

    템플릿이란 바뀌는 성질이 다른 코드 중에서 변경이 거의 일어나지 않으며 일정한 패턴으로 유지되는 특성을 가진 부분을 자유롭게 변경되는 성질을 가진 부분으로부터 독립시켜서 효과적으로 활용할 수 있도록 하는 방법이다, 3.1 다시보는 초난감 DAO 3.1.1 예외처리 기능을 갖춘 DAO 실습 코드 링크 : https://github.com/vvshinevv/toby-spring/tree/feature/3.1.1 일반적으로 서버에서는 제한된 개수의 DB 커넥션을 만들어서 재사용 가능한 풀로 관리한다. DB 풀은 명시적으로 close() 메소드를 호출해서 돌려줘야지만 다시 풀에 넣었다가 다음 커넥션 요청이 있을 때 재사용할 수 있다. 스터디에서 try-with-resources로 자원을 반납하는 것에 대해서 이..

    2장. 테스트

    스프링 개발자에게 제공하는 가장 중요한 가치는 객체지향과 테스트이다. 2.1 UserDaoTest 다시 보기 2.1.1 테스트의 유용성 테스트란 내가 예상하고 의도했던 대로 코드가 정확히 동작하는지를 확인해서 만든 코드를 확실할 수 있게 해주는 작업이다. 2.1.2 UserDaoTest의 특징 웹을 통한 DAO 테스트 방법의 문제점 - 테스트하고 싶었던 것은 UserDao였는데, 다른 계층의 코드와 컴포넌트, 심지어 서버의 설정 상태까지 모두 테스트에 영향을 줄 수 있기 때문에 이런 방식으로 테스트하는 것은 번거롭고 오류가 있을 때 빠르고 정확하게 대응하기가 힘들다. 작은 단위의 테스트 테스트하고자 하는 대상이 명확하다면 그 대상에만 집중해서 테스트하는 것이 바람직하다. 이렇게 작은 단위의 코드에 대해 ..

    1장. 오브젝트 의존관계2

    토비 스프링을 공부하면서 실습했던 내용과 모르는 내용만 기록을 위해서 포스팅한다. 1.5 스프링의 IOC 1.5.1 오브젝트 팩토리를 이용한 스프링 IoC 실습 코드 링크: https://github.com/vvshinevv/toby-spring/tree/feature/1.5.1 스프링에서 빈 팩토리라고 말할 때는 빈을 생성하고 관계를 설정하는 IoC의 기본 기능에 초점을 맞춘 것이고, 애플리케이션 컨텍스르라고 말할 때는 애플리케이션 전반에 걸쳐 모든 구성요소의 제어 작업을 담당하는 IoC 엔진이라는 의미가 좀 더 부각된다. 1.5.2 애플리케이션 컨텍스트의 동작 방식 애플리케이션 컨텍스트는 1) DaoFactory 클래스를 설정정보로 등록해두고 @Bean이 붙은 메소드 이름을 가져와 빈 목록을 만들어둔..