[Spring] 데이터 액세스 기술 유형(SQL 중심 / 객체 중심(ORM)) + Spring Data JDBC란?
JDBC란?
JDBC : Jaba Database Connectivity
= 데이터를 db에 저장, 업데이트 하거나
db에 저장된 데이터를 Java 코드 레벨에서 사용할 수 있게 해주는 표준 API
JDBC API를 사용하면 개발자는 다양한 벤더 (Oracle, MySQL, MS SQL) 데이터베이스와 연동할 수 있다.
Java에서 제공되며,
데이터 액세스 기술의 기본이 되는 저수준 API지만, 구체적 사용법은 배우지 않아도 된다. (지금 내 단계 한정)
JDBC를 직접적으로 사용하기 보다는 JDBC를 내부적으로 이용하는
Spring Data JDBC나 Spring Data JPA 로 더 편하게 데이터 액세스 로직 구현할 수 있기 때문!
대신 JDBC 동작 흐름 정도는 알아둬야 한다.
JDBC API의 동작 흐름
JDBC API를 사용하기 위해서는
JDBC 드라이버를 먼저 로딩한 후에 db와 연결한다.
*JDBC 드라이버?
: JDBC API를 사용하기 위해 로딩되어야 하는 인터페이스 (db와 통신을 담당)
JDBC드라이버의 구현체를 사용해서 Oracle, MySQL 같은 특정 벤더에 맞게 db에 액세스 할 수 있다.
JDBC API 사용 흐름
Connection 객체 : DriverManeger 를 통해 db와 연결되는 세션
Statement 객체 : SQL 쿼리문을 실행하기 위한 객체 (생성 후 정적인 SQL 쿼리문을 문자열로 가짐)
ResultSet 객체 : 실행된 SQL 쿼리문에 대한 결과 데이터 셋
* JDBC API를 통해 사용된 객체들은 사용 이후에
사용한 순서의 역순으로 차례대로 close
*Connection Pool 이란? (=DBCP, Dabatase Connection Pool)
: Connection 관리자
데이터베이스 Connection을 미리 만들어서 보관,
애플리케이션이 필요할때 Connection을 제공해주는 역할을 한다.
* 마치 자바의 스레드풀(Thread-Pool)과 유사함!
Connection객체 생성은 비용이 많이 들어서,
애플리케이션 로딩 시점에 미리미리 생성해둬야 성능을 향상시킬 수 있기 때문!
(db연결이 필요한 경우 connection 객체 새로 생성X
미리 만들어둔 connection 객체를 사용한다)
ex) HikariCP
Spring Data JDBC ?
Spring에서 사용가능한 대표적 데이터 액세스 기술 -
- mybatis
- Spring JDBC
- Spring Data JDBC
- JPA
- Spring Data JPA
이 데이터 액세스 기술은 SQL 중심 기술 / 객체(Object) 중심 기술로 나뉜다.
SQL 중심 기술
ex) mybatis, Spring JDBC
애플리케이션에서 DB에 접근하기 위해 SQL 쿼리문을
애플리케이션 내부에 직접적으로 작성한다.
= SQL 쿼리문이 코드 안에 직접적으로 포함되어 있다.
*과거부터 많이 사용하던 방식이지만,
현재 추세 : SQL 중심의 기술 ➡ 객체 중심 기술로 지속적 이전 중!
↕
객체(Object) 중심 기술 = ORM(Object-Relational Mapping)
ex) JPA(대표적), Spring Data JDBC, Spring Data JPA
: 데이터를 SQL 쿼리문 위주로 생각하는 것이 아닌,
모든 데이터를 객체 관점으로 바라보는 기술
Java 객체를 이용해 애플리케이션 내부에서 객체를 SQL 쿼리문으로 자동 변환 후에
데이터베이스 테이블에 접근!
* 용어가 비슷해서 헷갈린다면?
Spring JDBC (sql 쿼리 기반 기술) : JDBC에서 파생된 기술
Spring Data JDBC : Spring JDBC를 ORM 기술로 만든 것
JPA : 대표적인 ORM 기술
Spring Data JPA : JPA 기술을 이용해 Spring 전용으로 만듬
Spring Data JDBC란?
: JPA처럼 ORM 기술을 사용, but JPA의 기술적 복잡도를 낮춤
- 2018년에 처음 릴리즈 (꾸준히 기능 업그레이드 중)
- JPA 보다는 상대적으로 적게 사용됨
- 애플리케이션 규모 상대적으로 크지 않고, 복잡하지 않을 경우 Spring Data JDBC 굿
*JPA - 실무에서 많이 사용한다
* Spring Data JPA - Spring 에서 JPA 기술을 편리하게 사용하기 위함 (선행지식 필요)