본문으로 바로가기

[SpringBoot] JPA와 Spring Data JPA

category Web/SpringBoot 2020. 2. 14. 01:44
더보기

<스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 이동욱> 책을 활용해

공부한 내용을 정리할 예정입니다.

1. JPA(Java Persistence API)란?

현재 자바 표준 ORM 기술로 인터페이스의 모음이다.
(즉, 실제로 동작하는 것이 아니다.)
JPA 인터페이스를 구현한 대표적인 오픈소스가 Hibernate라고 할 수 있다.

 

1) ORM(Object-Realtional Mapping)이란?

데이터베이스와 객체 지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법이다.

객체지향언어에서 사용할 수 있는 "가상"객체 데이터베이스를 구축하는 방법이다.

객체 모델과 관계형 모델 간에 불일치가 존재하는데
ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동 생성하여 불일치를 해결한다.

객체는 객체대로 관계형 데이터베이스는 관계형 데이터베이스대로 설계하고
ORM 프레임워크가 중간에서 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해준다.
객체를 통해 간접적으로 데이터베이스 데이터를 다룬다.

 

2) JPA를 사용하는 이유

객체지향 프로그래밍 언어와 데이터베이스 사이의 패러다임 불일치는 피할 수 없다.

  • DB -> 어떻게 데이터를 저장할지에 초점,
  • 객체지향 언어 -> 기능과 속성을 한 곳에서 관리

CRUD(Create, Read, Update, Delete)를 수행하기 위해선 코드가 복잡해지고 SQL을 피할 수 없다.

데이터 모델링에만 집중하게 되는 SQL종속적 개발에서 벗어날 수 있도록

JPA가 중간에서 패러다임 일치를 도와주며 객체지향적으로 프로그래밍을 하게 된다.

 

2. Spring Data JPA란?

JPA는 인터페이스로서 자바 표준 명세서이다.

JPA 사용을 위해 구현체가 필요한데 대표적으로 Hibernate, Eclipse Link 등이 있다.

하지만 Spring에서 JPA를 사용할 때는 이 구현체들을 더 쉽게 사용할 수 있게 추상화시킨

Spring Data JPA 모듈을 이용한다.

 

1) Spring Data JPA 등장 이유

  • 구현체 교체의 용이성

    Hibernate 외에 다른 구현체로 쉽게 교체하기 위함이다.
    Hibernate가 수명을 다해 새로운 JPA 구현체가 대세로 떠오를 때, Spring Data JPA를 쓰고 있다면
    아주 쉽게 교체가 가능할 것이다.

    Spring Data JPA 내부에서 구현체 매핑을 지원해주기 때문이다.
  • 저장소 교체의 용이성

    서비스 초기에 관계형 데이터베이스를 사용했지만 점점 트래픽이 많아져 MongoDB로 교체가 필요하다면,
    Spring Data JPA에서 Spring Data MongoDB로 의존성만 교체하면 된다.

    Spring Data의 하위 프로젝트들은 기본적인 CRUD의 인터페이스가 같기 때문이다.