면접 준비를 하며, 각 개념에 대해 차이를 알고자 공부하였다.
정확하지 않을 수 있다.
📌 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 안에 인터페이스로 구현
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://imbf.github.io/spring/2020/04/30/Spring-Data.html
https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/
'Spring' 카테고리의 다른 글
[Spring] 로그인 구현 1 - 회원 엔티티, Mapper, Repository 구현 (0) | 2022.12.20 |
---|---|
[Spring] Transaction (0) | 2022.12.19 |
[Spring] Spring boot Java 카카오 페이 단건 결제 구현하기 (0) | 2022.12.08 |
[Spring] 예외 처리 - 사용자 정의 (0) | 2022.10.27 |
[Spring] 예외처리 - 공통화(@RestControllerAdvice) (0) | 2022.10.27 |
댓글