본문 바로가기
Spring

[Spring] JDBC와 Spring JDBC, Spring Data JDBC, Spring Data JPA

by Bhinney 2022. 12. 17.

면접 준비를 하며, 각 개념에 대해 차이를 알고자 공부하였다.

정확하지 않을 수 있다.


📌 JDBC

JDBC란?
  • Java DataBase Connectivity
  • Java 기반 애플리케이션의 코드 레벨에서 사용하는 데이터를 데이터베이스에 저장 및 업데이트 하거나 데이터베이스에 저장된 데이터를 Java 코드 레벨에서 사용할 수 있도록 해주는 Java에서 제공하는 표준 API
  • Java 프로그램이 데이터 베이스와 연결되어 데이터를 주고 받을 수 있게 하는 프로그래밍 인터페이스
  • JDBC는 DBMS에 종속되지 않는 관련 API를 제공
  • JDBC API는 JDK에서 제공
  • 프로그래밍을 위해서는 JDBC 드라이버가 필요
동작 원리
  • 사용할 JDBC 드라이버 선정 → 커넥션 생성 → 질의(Query)를 excuteSQL에 삽입 → ResultSet으로 받음
특징
  • 종료 시, close 함수를 Statement, Connection, ResultSet 에 모두 해야 메모리 누수 방지 + 안전한 종료


📌 Spring JDBC

  • Spring JDBC는 Datasource만 입력해주면 아래의 작업을 처리
• Connection 열기 및 닫기
 Statement 준비 및 닫기
 Statement 실행
 ResultSet 반복 처리
 예외 처리 반환
 Transaction 처리

 

📌 Spring Data 

Spring Data란?
  • 목적 : 기본 데이터 저장소에 특수한 특성을 유지하면서, 데이터 접근을 위한 친숙하고 일관된 Spring 기반의 프로그래밍 모델 제공
  • 데이터 접근 기술, 관계형 데이터 베이스 및 비관계형 데이터 베이스, map-reduce 프레임 워크, 클라우드 기반 서비스를 쉽게 사용할 수 있도록 도움
특징
  • 강력한 저장소 및 사용자 정의 객체 맵핑 추상화
  • 저장 메서드 이름으로부터 동적 쿼리 파생
  • 기본 속성을 제공하는 Implementation domain 기본 클래스
  • Auditing을 위한 지원
  • 사용자 정의 저장소 코드를 통합 할 수 있는 가능성
  • Spring MVC 컨트롤러와 향상된 통합

 

주요 모듈
  • Spring Data Commons : 모든 Spring 모듈을 뒷받침하는 핵심 Spring 개념 (CrudRepository 인터페이스, PagingAndSortingRepository 인터페이스)
  • Spring Data JDBC : Spring JDBC에 대한 Spring Data 추상화를 제공하는 모듈 (SimpleJdbcRepository 클래스)
  • Spring Data JPA : JPA를 위한 Spring Data 저장소 지원 (JpaRepository 인터페이스, SimpleJpaRepository 클래스)
  • Spring Data MongoDB : MongoDB를 위한 스프링 기반 객체 문서 지원 및 저장소
  • Spring Data REST : 스프링 데이터 저장소들을 하이퍼미디어 기반의 Restful 리소스로 export 해주는 모듈 
  • Spring Data Redis : Spring Application에서 Redis를 손쉽게 구성 및 접근할 수 있도록 하는 모듈

📌 Spring Data JDBC

  • Spring JDBC에 대한 Spring Data 추상화를 제공하는 모듈 (SimpleJdbcRepository 클래스)
  • JDBC Template을 제공
  • 트랜잭션 매니저 지원
  • 버전 관리에 장점
  • 지연 로딩, 캐싱, 스키마 자동 관리 (ddl-auto) 불가능
  • Spring Data JDBC에서 메서드 호출은 순수한 SQL로 변환되고 JDBC를 통해 실행

📌 Spring Data JPA

  • JPA를 위한 Spring Data 저장소 지원 (JpaRepository 인터페이스, SimpleJpaRepository 클래스)
  • JPA는 Java 진영의 대표적인 ORM 스펙, Spring Data JPA는 이 JPA를 추상화한 기술
  • Hibernate를 쉽게 사용할 수 있게 도와주는 모듈
  • 지연 로딩, 캐싱, 스키마 자동 관리 (ddl-auto) 가능
  • Querydsl 사용 가능
  • 버전 관리에 단점

💡 JPA

  • Java Persistence API
  • Java Application에서 관계형 데이터 베이스를 사용하는 방식을 정의한 인터페이스 (Not 라이브러리)
  • 단순 명세이기 때문에 구현이 없음
  • javax.persistence
  • EntityManager는 javax.persistence 안에 인터페이스로 구현
 

EntityManager (Java(TM) EE 7 Specification APIs)

Interface used to interact with the persistence context. An EntityManager instance is associated with a persistence context. A persistence context is a set of entity instances in which for any persistent entity identity there is a unique entity instance. W

docs.oracle.com

package javax.persistence;
 
import ...
 
public interface EntityManager {
 
    public void persist(Object entity);
 
    public <T> T merge(T entity);
 
    public void remove(Object entity);
 
    public <T> T find(Class<T> entityClass, Object primaryKey);
 
   ...
}

💡 Hibernate

  • JPA 구현체
  • 인터페이스를 직접 구현한 라이브러리
  • JPA와 Hibernate는 마치 자바의 interface와 해당 interface를 구현한 class와 같은 관계

참고 자료

https://blog.neonkid.xyz/223

 

[Spring boot] JDBC와 Spring JDBC 그리고 MyBatis

지난 포스트에서 MVC 패턴과 Spring Data Rest를 이용해 간단한 REST API 서버를 개발해보는 시간을 가졌었는데요. 그런데, 우리가 여기에서 DB와 연동하기 위해 사용했던 디펜던시가 있었죠. 바로 Spring

blog.neonkid.xyz

https://imbf.github.io/spring/2020/04/30/Spring-Data.html

 

Spring Data란 무엇인가?

이 글에서는 Spring Data란 무엇인지에 대해서 알아볼 것이다.

imbf.github.io

https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/

 

JPA, Hibernate, 그리고 Spring Data JPA의 차이점

개요 Spring 프레임워크는 어플리케이션을 개발할 때 필요한 수많은 강력하고 편리한 기능을 제공해준다. 하지만 많은 기술이 존재하는 만큼 Spring 프레임워크를 처음 사용하는 사람이 Spring 프레

suhwan.dev


 

 

댓글