JDBC
Java Database Connectivity
자바에서 데이터베이스에 접속할 수 있도록하는 자바 API이다.
DB에서 자료를 쿼리하거나 업데이트하는 방법을 제공
어떤 DB를 사용하던 같은 인터페이스를 통해 사용할 수 있도록 도와준다.
DB 벤더들이 JDBC 인터페이스를 구현해서 제공을 한다.
→ JDBC 드라이버 (MySQL JDBC 드라이버, Oracle 등등)
SQLMapper : JdbcTemplate, Mybatis → SQL 만 할 줄 알면 쉬움
ORM : JPA → SQL 안짜도 됨 but 어려움
트랜잭션 관련 코드가 서비스 레이어인 비지니스 로직에 침투하면 안된다.
PlatformTransactionManager
, DataSourceUtils
이제는 트랜잭션때문에 생기는 반복적인 코드를 제거해보자.
getConnection → biz logic → commit or rollback 꼴이 반복되니 biz logic만 남길 수 있도록 해보자.
Template callback 패턴 → TransactionTemplate
클래스 사용
AOP 사용 → @Transactional
Proxy 기반으로 동작 : 스프링의 기능이다.
⇒ 비지니스 로직과 트랜잭션 로직을 분리할 수 있게 된다.
테스트할때 @TestConfiguration
이라는걸 쓰면..
@TestConfiguration
static class TestConfig {
@Bean
DataSource dataSource() {
return new DriverManagerDataSource(URL, USERNAME, PASSWORD);
}
...
}
// 사용
@Autowired
Datasource datasource;
스프링부트의 자동 리소스 등록
스프링부트가 없을 때는 DataSource나 TransactionManager 같은 것들을 다 직접 빈으로 등록해줘야했다.
만약 직접 등록한다면 스프링 부트는 중복으로 등록하지 않는다. → @ConditionalOnMissingBean
스프링부트는 application.properties에 있는 속성을 통해서 Datasource를 생성한다.
TransactionManager도 PlatformTransactionManager를 자동으로 스프링 빈에 등록한다.
예외를 전환할때는 꼭 기존 예외 정보를 넘겨주자. → 그래야 stackTrace에서 원인을 찾아갈 수 있음.