데이터엑세스개념(jdbc,springjdbc)이란?
데이터엑세스공통개념
SpringJDBC
DAO(data access Object)패턴
- 데이터 액세스 계층은 DAO 패턴을 적용하여 비지니스 로직과 데이터엑세스 로직을 분리하는것이 원칙이다.
- 비지니스로직이 단순하다면 DAO와 Service를 통합할수도있지만 비지니스로직을 가지고있다면 반드시 분리한다.
- 서비스계층에 영향을 주지않고 데이터엑세스 가능하다.
컨넥션 풀링을 지원하는 DataSource
컨넥션풀링이란?
-미리정해진 개수만큼의 DB 컨넥션을 풀(Pool)에 준비해두고, 애플리케이션이 요청할때마나 꺼내서 할당하고 돌려받아 Pool에 넣는 기법이다.
다중사용자를 갖는 엔터프라이즈시스템 즉 웹어플리케이션에서는 반드시 DB컨넥션 풀링 기능을 지원하는DataSource를 사용해한다.
(실제 SQL실행시간보다 컨넥션객체 생성시간이 더걸리게됌)
스프링에서는 DataSource를 공유가능한 SpringBean으로 등록해 주어 사용할 수 있도록 해준다.
DataSource 구현클래스 종류
테스트환경을 위한DataSource
-SimpleDriverDataSource
스프링이 제공하는 가장 단순한 DataSource구현클래스이다.
getConnection()을 호출할 때마다 배번 DB 컨넥션을 새로만들고 따로 풀(pool)을 관리하지 않으므로
단순한 테스트용으로만 사용해야 한다.
-SingleConnectionDriverDataSource
순차적으로 진행되는 통합테스트에서는 사용가능하다.(멀티스레드 적합하지않음)
매번 생성하지않게때문에 SimpleDriverDataSource보단 빠르다.
DataSource종류
오픈소스 DataSource
-Apache Commons DBCP
가장유명한 오픈소스 DB커넥션 풀 라이브러리이다.
-c3p0 jdbc
c3p0는 jdbc3.0 스펙을 준수하는 Connection 과 Statement풀(pool)을 제공하는 라이브러리 이다.
두가지 모두 수정자(setter)메서드 제공 SpringBean으로 등록해서 사용하기편리하다.
JDBC란?
- 모든 자바의 데이터 액세스 기술의 근간이된다.
- 엔티티클래스와 애노테이션을 이용하는 최신 ORM기술이다.(Mybatis,hibernate등)
내부적으로는DB와 연동을 위해 JDBC를 이용한다.
- 안정적이고 유연한 기술이지만, 로우레벨기술이다.
(WHY? 중복된 코드가 반복적으로 사용,DB에따라 일관성없는 정보를 가진채로 Checked Exception로 처리)
SpringJDBC란?
- JDBC의 장점과 단순성을 그대로 유지하면서도 기존JDBC의 단점을 극복한다.
- 단순한,간결한 형태의 API사용법을 제공한다.
- JDBCAPI에서 지원되지않는 편리한기능이다.
즉, JDBC를 개발자들이 사용하기쉽게 만든라이브러리
반복해야하는 작업을 대신 처리해준다.(실행할 SQL정의,실행될시 바인딩될 파라미터,넘겨받을 객체만설정해주면된다)
사용하려면 먼저 DB컨넥션을 가져오는 DataSource를 Bean으로 등록한후 사용해야한다.
Spring JDBC가해주는 작업
- Connection열기와 닫기
예외발생해도 Connection을 닫아준다.
- statement준비와 닫기
SQL정보가 담기는 Statement또는 PreparedStatement를 생성하고 필요한 준비작업을 해주는것도 해준다.
statement도 알아서 닫아준다.
- statament실행
sql던지고 다양한객체로 받아올수있게해준다.
- ResultSetLoop처리
ResultSet에 담김 쿼리 실행결과가 한건 이상이면 ResultSet루프를 만들어 반복해준다.
- Exception 처리와 반환
작업중 발생되는 모든 예외는 SpringJDBC예외변환기가 처리해준다.
즉 DataAccessException타입으로 변환해준다.
jdbc는 반드시 맞는 예외처리를 해주어야하는데 SpringJDBC는 안해도된다.
- Transaction처리
transaction와 관련된 작업을 알아서해준다.(커밋,롤백)
jdbcTemplate클래스
- SpringJDBC의 모든 기능을 최대한 활용할 수 있는 유연성을 제공한다.
- 실행,조회,배치 세가지 작업이 있다.
실행
-INSERT UPDATE
조회
-SELECT
배치
-여러개의 쿼리를 한꺼번에 수행하게해준다.
JdbcTemplate클래스생성
- DataSource는 보통 Bean으로 등록해서 사용하므로 jdbcTemplate이 필요한 DAO클래스에서 DataSourceBean을 DI받아서
jdbcTemplate을 생성할때 인자로 넘겨주면된다.
- 멀티스레드환경해서도 안전하게사용가능하다.
업데이트 메서드
파라미터갯수는 가변인자(한개든 여러개든)가능하다.
결과값은 반영된 갯수이다.
queryForObject()메서드 (SELECT)
여러개의 칼럼,한개의 로우로 반환될때 사용한다.
query()
여러개의 칼럼,여러개의 로우로 반환될때 사용한다.