본문 바로가기

백엔드 기술/Spring

JDBC, Spring Data JDBC, JPA, Spring JPA

데이터 엑세스 기술

Spring에서 사용할 수 있는 데이터 액세스 기술에는
mybatis, Spring JDBC, Spring Data JDBC, JPA, Spring Data JPA 등이 있다.

 

A. SQL 중심 기술

애플리케이션에서 DB에 접근하기 위해 SQL 쿼리문을 애플리케이션 내부에 직접적으로 작성하는 것.
즉, SQL 쿼리문을 기반으로 DB의 특정 테이블에서 데이터를 조회 후, Java 객체로 변환
mybatis, Spring JDBC가 대표적인 SQL 중심 기술.

 

B. 객체(Object) 중심 기술 ( Object Relational Mapping )

데이터를 SQL 쿼리문 위주로 다루는 것이 아니라, 모든 데이터를 객체의 관점으로 다루는 기술.
즉, DB에 접근하기 위해 SQL 쿼리문을 직접적으로 작성하지 않고,
DB의 테이블에 데이터를 저장하거나 조회할 경우, Java 객체를 이용해
애플리케이션 내부에서 이 Java 객체를 SQL 쿼리문으로 자동 변환 한 후 DB의 테이블에 접근한다.
JPA가 대표적인 Java ORM 중심 기술.

 

1. JDBC (Java Database Connectivity)

Java 기반 애플리케이션의 코드 레벨에서 사용하는 데이터를 DB에 저장 및 업데이트 하거나,
반대로 DB에 저장된 데이터를 Java 코드 레벨에서 사용할 수 있도록 해주는 Java에서 제공하는 표준사양.

JDBC 동작 흐름

Java 애플리케이션에서 #JDBC API 를 이용해 적절한 DB 드라이버를 로딩 후, DB와 인터렉션 한다.

* JDBC 드라이버
DB와의 통신을 담당하는 인터페이스.
(Oracle, MS SQL, MySQL 의 벤더에서는 적절한 JDBC 드라이버를 구현하여 제공하고,
우리는 이 JDBC 드라이버의 구현체를 이용해서 DB에 엑세스 한다.)

 

JDBC API 흐름

1. JDBC 드라이버 로딩
사용하고자 하는 JDBC 드라이버를 DriverManager라는 클래스를 통해 로딩한다.

2. Connection 객체 생성
JDBC 드라이버가 정상 로딩되면, DriverManager를 통해 DB와 연결되는 세션인 Connection 객체 생성

3. Statement 객체 생성
Statement 객체는 작성된 SQL 쿼리문을 실행하기 위한 객체로써,
객체 생성 후정적인 SQL 쿼리 문자열을 입력으로 가진다.

4. Query 실행
생성된 Statement 객체를 이용해서 입력한 SQL 쿼리를 실행한다.

5. ResultSet 객체로부터 데이터 조회
실행된 SQL 쿼리문에 대한 결과 데이터 셋

6. ResultSet 객체 Cloes, Statement 객체 Close, Connection 객체 Close
JDBC API를 통해 사용된 객체들(Connection, Statement, ResultSet)은 사용 순서의 역순으로 Close한다.

 

Connection Pool 

JDBC API를 사용해서 DB와 연결을 위한 Connection 객체를 생성하는 작업은 비용이 많이 든다.
즉, 애플리케이션 로딩 시 Connection 객체를 미리 생성하고,
애플리케이션이 DB 연결이 필요할 경우, 미리 생성해둔 Connection 객체를 사용하며 성능을 향상할 수 있다

Connection Pool 
DB Connection을 미리 만들어서 보관하고, 애플리케이션이 필요할 때 Connection 객체를 제공해주는 역할

 

2. Spring Data JDBC 란 ?

Spring Data JDBC는 JPA처럼 ORM 기술을 사용하지만, JPA의 기술적 복잡도를 낮춘 기술.
기본적인 ORM의 개념과 Spring에서 Data에 접근하는 일관된 접근 방식을 접하기 위한 기술.

3. JPA 란 (Java Persistence API or Jakarta Persistence)?

Java진영에서 사용하는 ORM 기술의 표준 사양.
Java의 인터페이스로 정의되어 있기 때문에 JPA라는 표준 사양을 구현한 구현체는 따로 있다는 것을 의미
즉, Java 애플리케이션에서 관계형 데이터베이스를 사용하기 위해 정해 높은 표준 스펙.

데이터 엑세스 계층에서의 JPA 위치

데이터 저장, 조회 등의 작업의 순서.
1. JPA
2. JPA의 구현체 Hibernate ORM
3. Hibernate ORM은 내부적으로 JDBC API를 이용해 DB에 접근

영속성 컨텍스트 (Persistence Context)

ORM은 객체와 DB테이블의 매핑을 통해 엔티티 클래스 객체 안에 포함된 정보를 테이블에 저장하는 기술.
즉, JPA에서는 테이블과 매핑되는 엔티티 객체 정보를 영속성 컨텍스트라는 곳에 보관하여 유지한다.

 

4. Spring Data JPA란 ?

JPA를 구현한 구현체의 API(일반적으로 Hibernate ORM)기술을 보다 쉽게 사용할 수 있게 해주는 모듈
JPA를 한 단계 추상화시킨 Repository라는 인터페이스를 제공한다. (Spring Data JPA의 핵심)
Repository 인터페이스에 정해진 규칙대로 메서드를 입력하면,
Spring이 자동으로 해당 메서드 이름에 적합한 쿼리를 날리는 구현체를 만들어 Bean으로 등록한다.

JPQL ?

JPA는 다양한 쿼리 방법을 지원한다.

  • JPQL
  • JPA Criteria
  • QueryDSL
  • 네이티브 SQL
  • JDBC API 직접 사용, MyBatis, SpringJDBC Template

SQL은 DB 테이블을 대상으로 조회하는 반면
JPQL은 Spring Data JPA에서 사용되는 객체 지향 쿼리로써
DB 테이블을 대상으로 조회하지 않고, 엔티티 클래스(객체)를 대상으로 조회한다.

[JPQL 사용 순서]
1.
JPA가 내부적으로 JPQL을 분석.
2. 그에 맞는
적절한 SQL을 만든 후 DB를 조회
3. 조회한 결과를 엔티티 객체로 매핑한 뒤 반환한다.

 

[정리]

1. SQL 중심 기술
DB의 데이터를 다루기 위해 애플리케이션 내부에 직접적으로 쿼리문을 작성하여 다루는 기술.

2. ORM 중심 기술
DB의 데이터를 쿼리문이 아닌 Java 객체로 다루는 기법.
객체와 DB 테이블의 매핑을 통해 엔티티 클래스 객체 안에 포함된 정보를 DB 테이블에 저장하는 기술.
내부적으로 이 Java 객체를 SQL 쿼리문으로 자동 변환 후 DB 테이블에 접근한다.


3. JDBC / SQL 중심 기술
Java 기반의 애플리케이션 코드 레벨에서 사용되는 데이터를 DB에 저장하거나, 
DB에 저장된 데이터를 Java 기반의 애플리케이션 코드 레벨에서 사용하도록 해주는 기술.

4. Spring Data JDBC / ORM 중심 기술
JPA 기술와 동일하게 ORM 종류이며, Spring에서 JPA를 보다 쉽게 사용하기 위해 만든 기술.

5. JPA / ORM 중심 기술
Java에서 사용하는 대표적인 ORM 기술로, 관계형 데이터베이스를 사용하기 위해 정해놓은 기술.

*Hibernate ORM*
JPA 인터페이스를 구현한 구현체.

6. Spring Data JPA / ORM 중심 기술
Spring에서 JPA를 구현한 구현체의 API (Hibernate ORM)을 보다 쉽게 사용할 수 있게 해주는 모듈.
ex) JPA와 다른 점 : ddl-auto, 양방향 맵핑, Repository 메서드 이름만으로 동작가능, 테이블 간 매핑 자동화

*JPQL*
JPA에서 제공하는 객체 지향 쿼리.
DB의 테이블을 대상 X, 엔티티 클래스의 객체를 대상 O 객체를 조회.

[JPQL 동작 방식]
1. JPA가 내부적으로 JPQL을 분석하고, 적절한 SQL을 만들어 DB 조회.
2. 조회한 결과를 엔티티 객체로 매핑한 뒤 반환.


'백엔드 기술 > Spring' 카테고리의 다른 글

Spring MVC - 트랜잭션  (0) 2023.06.12
DTO  (0) 2023.04.23
Spring MVC에서 제공하는 CSR, SSR 방식  (0) 2023.04.21
Spring MVC 프레임워크 요청 처리 과정  (0) 2023.04.21
Spring (POJO) VS Spring Boot  (0) 2023.04.21