@참고)
스프링이 지원하는 다양한 데이터 액세스 기술을 살펴보자.
2.1 공통 개념
모든 기술에 공통적으로 적용되는 원칙과 기본 개념을 정리하자
2.1.1 DAO 패턴
- 데이터 액세스 계층은 DAO 패턴이라 불리는 방식으로 분리하는 것이 원칙이다.
- 이를 통해 얻을 수 있는 가장 큰 장점은 이를 통해 서비스 계층의 코드를 기술이나 환경에 종속되지 않는 순수한 POJO로 개발할 수 있다는 것이다.

- 하지만 많은 경우 개발 편의성 및 속도를 위해 Data Access Layer (Persistence Layer) 와 Service Layer (Application Layer)의 Model 이 통합 되는 경우도 많다.
- DAO는 인터페이스를 이용해 접근하고 DI 되도록 만들어야 한다.
- DAO 인터페이스에는 구체적인 데이터 액세스 기술과 관련된 어떤 API나 정보도 노출하지 않는다.
- 메서드 시그니처, 반환 타입, 심지어 예외 까지도!
2.1.2 템플릿과 API
- 데이터 액세스 기술을 사용하는 코드는 대부분 try/catch/finally와 판에 박힌 방복되는 코드로 작성된다.
- 스프링은 템플릿/콜백 패턴을 이용해 이 문제를 해결하였다.
- 스프링은 템플릿/콜백 패턴을 통해 코드 반복 문제 뿐만 아니라 예외 변환과 트랜잭션 동기화 작업 까지 수행해준다.
2.1.3 Datasouce
- Java의 모든 데이터 액세스 기술은 JDBC를 근간으로 하며 DataSource, Connection을 필수 리소스로 가진다.
- 스프링에서 사용되는 주요
DataSource
의 종류를 알아보자. - SimpleDriverDataSource
- 테스트용, 메번 DB 커넥션 생성, 풀 관리 X
- SingleConnectionDataSource
- 테스트용, 하나의 DB 커넥션 사용, 풀 관리 X
See Also)
JDBC Connection을 얻는 법- DriverManagerDataSource
- HikariDataSource - 스프링2.0 이후의 기본 커넥션 풀(DataSource) 구현체
2.2 JDBC
- JDBC는 자바의 데이터 액세스 기술의 기본이 되는 로우레벨의 API이다.
- 안정적이고 유연한 기술이지만 반대로 너무 로우레벨 기술이기도 하다.
- 간단한 SQL을 하나 실행하는 데도 매우 많은 설정코드, try catch 처리가 필요하며 심지어 체크 예외인 SQLException에 대한 처리도 필요하다.
- 앞서 살펴보았듯이 Spring은 Spring data jdbc와 jdbcTemplate을 통해 이 문제를 해결한다.
2.2.1 Spring Jdbc 기술과 동작 원리
JdbcTemple 종류
- JdbcTemplate은 가장 기본이 되는 클래스이다.
- NamedParameterJdbcTemplate 은 ? placeholder 대신 필드의 이름을 사용할 수 있게 해준다.
- 책에 simplejdbctemplate 이녀석이 나오기는 하지만 위 두 클래스가 더 선호되기 때문에 Deprecate 되었다고 한다. 쓰지 말자
- 관련 내용이 2.7.4 에도 있다.
Template 에서 처리 되는 작업
- Connection 조회, (열고 닫기 - Connection pool 을 사용하면 조회)
- Jdbc 사용을 위해 Statement 혹은 PreparedStatement 등을 생성
- Statement 실행
- (RowMapper를 통해) ResultSet을 돌며 쿼리 결과 바인딩
- 예외 처리와 변환 - spring의 추상 예외인 DataAccessException 으로 변환해준다.
- 트랜잭션 처리
코드에서 확인해보자

템플릿에 콜백을 인자로 받는 전형적인 템플릿/콜백 패턴을 사용한 코드를 확인 할 수 있다!

template의 코드
action.doInConnection(conToUse)
를 따라가다 보면 나오는 result set 처리를 담당하는 부분Transaction 처리의 경우
TransactionManager
에서 담당하기 때문에 jdbc.core 패키지에서는 관련 코드를 찾아 볼 수 없다.이후 구체적인 사용법, 2.3 iBatis, SqlMaps와 관련된 부분은 생략합니다.
2.4 JPA, 2.5 하이버네이트
- jpa는 java 표준 ORM 기술이다.
- ORM은 OOP와 RDB간에 존재하는 패러다임의 불일치를 해결하고자 하는 목적으로 등장하였다.
2.6 트랜잭션
- 스프링 트랜잭션 추상화의 핵심 인터페이스는
- PlatformTransactionManager