6.8.3 테스트를 위한 트랜잭션 애노테이션
- @Rollback
테스트용 트랜잭션은 테스트가 끝나면 자동으로 롤백된다. 롤백을 하지 않고 DB에 커밋하고 싶다면 @Rollback 애너테이션을 사용하자.
@Test
@Transactional
@Rollback(false)
public void transactionSync() {
...
}
- @TransactionConfiguration
@Transaction은 테스트 클래스에 넣어서 모든 테스트 메소드에 일괄 적용할 수 있지만 @Rollback 애너테이션은 메서드 레벨에만 적용할 수 있다.
클래스 레벨에 @Rollback(false)를 적용하고싶다면? -> @TransactionConfiguration(defaultRollback=false)를 적용하자.
- NotTransactional과 Propagtion.NEVER
NotTransactional - 클래스 레벨의 @Transactional 설정을 무시하고 트랜잭션을 시작하지 않은 채로 테스트를 진행한다.
@Transactional(propagation=Propagation.NEVER) - 트랜잭션이 시작되지 않는다.
- 효과적인 DB 테스트
7장. 스프링 핵심 기술의 응용
스프링의 3대 핵심 기술 - IoC/DI, 서비스 추상화, AOP
7.1 SQL과 DAO의 분리
SQL을 DAO에서 분리하는 작업을 시도하자.
7.1.1 XML 설정을 이용한 분리
SQL을 스프링의 XML 설정파일로 빼내는 것
- 개별 SQL 프로퍼티 방식
- SQL 맵 프로퍼티 방식
7.1.2 SQL 제공 서비스
- SQL 서비스 인터페이스
- 스프링 설정을 사용하는 단순 SQL 서비스
7.2 인터페이스의 분리와 자기참조 빈
7.2.1 XML 파일 매핑
- JAXB
XML의 정보를 그대로 담고 있는 오브젝트 트리 구조로 만들어준다. XML 정보를 오브젝트처럼 다룰 수 있어서 편리
- SQL 맵을 위한 스키마 작성과 컴파일
- 언마샬링
XML 문서를 읽어서 자바의 오브젝트로 변환하는 것을 JAXB에서는 언마샬링이라고 부른다.
7.2.2 XML 파일을 이용하는 SQL 서비스
- SQL 맵 XML 파일
- XML SQL 서비스
7.2.3 빈의 초기화 작업
7.2.4 변화를 위한 준비: 인터페이스 분리
- 책임에 따른 인터페이스 정의
- SqlRegistry 인터페이스
public interface SqlRegistry {
void registerSql(String key, String sql);
String findSql(String key) throws SqlNotFoundException;
}
- SqlReader 인터페이스
7.2.5 자기참조 빈으로 시작하기
- 다중 인터페이스 구현과 간접 참조
- 인터페이스를 이용한 분리
- 자기참조 빈 설정
7.2.6 디펄트 의존관계
- 확장 가능한 기반 클래스
- 디폴트 의존관계를 갖는 빈 만들기
7.3 서비스 추상화 적용
7.3.1 OXM 서비스 추상화
Castor XML, JiBX, XmlBeans, Xstream
- OXM 서비스 인터페이스
- JAXB 구현 테스트
- Castor 구현 테스트
7.3.2 OXM 서비스 추상화 적용
- 멤버 클래스를 참조하는 통합 클래스
- 위임을 이용한 BaseSqlService의 재사용
7.3.3 리소스 추상화
- 리소스
- 리소스 로더
인터페이스인 어플리케이션콘텍스트는 ResourceLoader 인터페이스를 상속하고 있으며 리소스 로더이기도 하다.
- Resource를 이용해 XML 파일 가져오기
7.4 인터페이스 상속을 통한 안전한 기능확장
7.4.1 DI와 기능의 확장
- DI를 의식하는 설계
SqlService의 내부 기능을 적절한 책임과 역할에 따라 분리, 인터페이스를 정의해 느슨하게 연결, DI를 통해 유연하게 의존관계 지정
- DI와 인터페이스 프로그래밍
인터페이스 분리 원칙 - 오브젝트가 그 자체로 충분히 응집도가 높은 작은 단위로 설계됐더라도, 목적과 관심이 각기 다른 클라이언트가 있다면 인터페이스를 통해 이를 적절하게 분리해줄 필요가 있다.
7.4.2 인터페이스 상속
7.5 DI를 이용해 다양한 구현 방법 적용하기
7.5.1 ConcurrentHashMap을 이용한 수정 가능 SQL 레지스트리
동기화된 해시 데이터 조작에 최적화되도록 만들어진 ConcurrentHashMap을 사용하는 방법이 일반적으로 권장된다.
- 수정 가능 SQL 레지스트리 테스트
- 수정 가능 SQL 레지스트리 구현
7.5.2 내장형 데이터베이스를 이용한 SQL 레지스트리 만들기
내장형 DB? 애플리케이션에 내장돼서 애플리케이션과 함께 시작되고 종료되는 DB를 말한다. 데이터는 메모리에 저장되기 때문에 IO로 인해 발생하는 부하가 적어서 성능이 뛰어나다.
- 스프링의 내장형 DB 지원 기능
자바에서 많이 사용되는 내장형 데이터베이스 - Derby, HSQL,H2
- 내장형 DB 빌더 학습 테스트
- UpdatableSqlRegistry 테스트 코드의 재사용
- XML 설정을 통한 내장형 DB의 생성과 적용
7.5.3 트랜잭션 적용
- 다중 SQL 수정에 대한 트랜잭션 테스트
- 코드를 이용한 트랜잭션 적용
7.6 스프링 3.1의 DI
- 자바 언어의 변화와 스프링
1. 애노테이션의 메타정보 활용
2. 정책과 관례를 이용한 프로그래밍
'Spring-Boot' 카테고리의 다른 글
토비의 스프링 3.1 Vol.1 750p ~ 850p 정리 (완료) (2) | 2024.01.05 |
---|---|
토비의 스프링 3.1 Vol.1 650p ~ 750p 정리 (2) | 2024.01.04 |
토비의 스프링 3.1 Vol.1 450p ~ 550p 정리 (0) | 2024.01.02 |
토비의 스프링 3.1 Vol.1 350p ~ 450p 정리 (0) | 2023.12.31 |
토비의 스프링 3.1 Vol.1 250p ~ 350p 정리 (1) | 2023.12.30 |