Spring Data JPA

럼포 ㅣ 2024. 12. 17. 09:47

영속성이란?

사전적 의미: 영원히 계속되는 성질이나 능력을 뜻함
물리적인 저장소(하드 디스크, 테이프 등) 에 저장하는 행위를 영속화라고 표현한다. 프로그램에서 생성하고 변경한 데이터들을 물리적인 저장소에 저장시켜 놓고 프로그램이 종료되어도 데이터들을 남아있게 하고, 추후 프로그램에서 이 데이터들을 다시 불러와 사용할 수 있게 하는 과정이다.

 

JPA(Java Persistance API, Jakarta Persistance)는 관계형 데이터를 다루는 방법을 명시해 놓은 자바 인터페이스 이다. 자바 진영의 ORM 기술의 표준으로, 인터페이스 모음이다. javax.persistance 패키지에 속해 있으며, 구현체(Hibernate, EclipseLink, OpenJPA)가 필요하다.

Spring Data JPA는 JPA를 쉽게 사용할 수 있도록 추상화한 Spring Data의 하위 모듈이며, JPA의 구현체(Hibernate)를 기반으로 동작한다. Repository 인터페이스를 통해 반복적인 코드를 제거하고 데이터 접근을 간소화하는 기능을 제공한다. 

 

Spring Data JPA 핵심 인터페이스

  • Repository: 데이터 접근 계층의 가장 기본적인 추상화
  • CrudRepository: 기본적인 CRUD 기능을 제공하는 인터페이스
  • PagingAndSortingRepository: 페이징 및 정렬 기능을 추가로 제공
  • JpaRepository: JPA를 사용할 때 더 많은 기능을 제공하는 인터페이스

Spring Data JPA 동작 과정

  1. JpaRepository와 같은 인터페이스를 정의하면 Spring Data JPA가 자동으로 구현체를 생성
  2. 이 구현체는 JPA의 구현체(예: Hibernate)를 사용하여 데이터베이스와 상호작용
  3. Spring Data JPA는 **JPA의 EntityManager**를 내부적으로 사용하여 SQL을 생성하고 실행

Spring Data JPA 동작 과정

  1. JpaRepository와 같은 인터페이스를 정의하면 Spring Data JPA가 자동으로 구현체를 생성
  2. 이 구현체는 JPA의 구현체(예: Hibernate)를 사용하여 데이터베이스와 상호작용
  3. Spring Data JPA는 JPA의 EntityManager를 내부적으로 사용하여 SQL을 생성하고 실행

Persistance Framework

자바 어플리케이션에서 관계형 데이터베이스의 사용을 돕는 프레임워크

Persistance Famework는 SQL Mapper과 ORM으로 나눠진다.

  • SQL Mapper : sql을 자바 코드와 분리하며 개발자가 작성한 sql의 수행 결과르 객체로 매핑한다. Mybatis 등이 있다.
  • ORM : 객체와 관계형 데이터베이스 사이에서 mapping을 담당하며 sql을 생성하여 패러다임의 불일치를 해결한다.

 

 

JAVA에서는 SQL을 통해 RDBMS(관계형 데이터베이스 관리 시스템)에 데이터를 저장하는 행위를 영속화라 표현하기도 한다.


객체지향 어플리케이션에서는 객체를 특정 저장소에 저장하는 행위를 영속화라고 부른다.
서버의 JAVA 어플리케이션과 DBMS(데이터베이스 서버)는 별도의 시스템이기 때문에 DBMS와 통신할 수 있는 방법이 필요하다. Spring에서는 JDBC(Java DataBase Connectivity)이라는 인터페이스를 사용한다.

DBMS는 만드는 기업에 따라 여러가지 제품이 있다. sqlite, oracle, mysql, maria 등등.. 이 dbms들은 다들 구현이 다르기 때문에 이 dbms들과 통신하기 위해서 제조사들은 jdbc interface를 상속받아 자사 제품에 맞도록 정의한다. 만약 데이터베이스를 다른 데이터베이스로 변경하고 싶을 때는 해당 제품에 맞는 드라이버로 바꾸어 주면 된다.

 

JAVA 의 객체를 RDBMS에 테이블로 변환하여 영속화 할 때 이것을 변환하는 과정이 필요한데, 일반적으로 OR mapping 또는 sql mapping 을 사용한다.


JAVA에서는 다양한 방법으로 객체를 RDBMS로 영속화 할 수 있다고 한다. 솔루션(Toplink 또는 Hibernate)를 이용하거나 Enterprise JavaBeans의 EntityBean을 사용하거나.. 기회가 된다면 추후 알아보도록 하자.

 

 

 

Spring Data JPA는 Query Methods 기능을 통해 메소드 이름으로 쿼리를 실행할 수 있는 방법을 제공한다. 순수 JPA에서 Entity Manager를 통해 필요한 쿼리를 생성해야 하는 부분을 메소드 이름으로 대체할 수 있다. Spring Data JPA는 메소드 이름을 분석해 JPQL 쿼리를 실행한다. 메소드 이름을 이용한 쿼리 실행은 조회(SELECT)에 해당하며 @Query 를 이용하면 다양한 쿼리를 정의할 수 있다. 

public interface UserRepository extends Repository<User, Long> {

  List<User> findByEmailAddressAndLastname(String emailAddress, String lastname);
}

/*
해당 코드는 
select u from User u where u.emailAddress = ?1 and u.lastname = ?2
JPQL 쿼리로 번역된다.
*/