[Spring] JPA & ORM 개념

한호성·2022년 7월 27일
0

글의 목적

Java Spring Framework를 통해 DB에 접근할 때, Spring Data JPA 를 사용한다. 이 떄, 사용되는 JPA가 무엇인지 알아보자

용어 정리

ORM ( Object-Relational Mapping )

orm 이란 객체(Obejct) 와 관계형 데이터 (Relational data)를 매핑하기 위한 기술명이다.

이러한 매핑이 필요한 이유는 객체 지향 언어와 관계형 데이터 베이스에서 데이터를 표현 하는 방식이 다르기 때문이다. 이러한 차이점을 해결하고, 객체지향적 데이터를 다루는데 있어서 도움을 준다.

예를들면

ORM을 이용하면 SQL Query가 아닌 직관적인 코드(메서드)로서 데이터를 조작할 수 있습니다.

SELECT * FROM user;라는 query를 실행해야하지만, ORM을 사용하면 User 테이블과 매핑된 객체를 user라 할 때, user.findAll() 라는 메서드 호출로 데이터를 조회 가능합니다.

위에서 말한 RDBMS의 데이터를 표현하는 방식과 객체 지향프로그래밍에서 데이터를 표현하는 방식의 차이를 패러다임의 불일치라고 한다.

JPA (Java Persistence API)

jpa 이란 자바 진영에서 만든 ORM API이다.

JPA는 캐싱,지연로딩,쓰기 지연 등을 통한 성능을 향상시켜주고, 변경감지,동일성 보장등을 통해 개발 편의성을 향상시켜 준다.

*Cf) API(Aplication Programming Interface)용어의 개념을 잘 생각하면서 API 용어를 사용하자

Spring Data JPA

우리가 spring-boot Framework에서 사용하는 Spring Data JPA = JPA라고 생각하면 안된다.
**JPA API는 RDMBS**를 자바에서 사용할 수 있도록 정의한 **인터페이스**이다. 
_(JPA는 특정 기능을 하는 라이브러리가 아니다.)_

그렇다면 이러한 JPA를 구현한 구현체(라이브러리)는 어떤 종류들이 있을까 ? 
대표적으로 Hibernate이 있고 이외에 DataNucleus, EclipseLink 

관계를 정리해보면 JPA 와 Hibernate의 관계는  자바에서 Interface 와 해당한 Interface를 
구현한 class의 관계라고 생각할 수 있다.

다시 본론으로 들어와서 Spring Data JPA는 Spring 에서 제공하는 모듈 중 하나로, JPA를 한 단계 추상화 시킨 Repository라는 인터페이스를 제공한다
JPA와 마찬가지로 인터페이스이기 때문에 Hibernate 같은 구현체가 필요하다
Spring Data JPA는 JPA를 구현한 라이브러리이다.

해외 자바사이트에서는 Spring Data JPA를 다음과 같이 정의하고 있다.
(https://dzone.com/articles/what-is-the-difference-between-hibernate-and-sprin-1)

It is a library/framework that adds an extra layer of abstraction on the top of our JPA provider (like Hibernate).
Hibernate is a JPA implementation, while Spring Data JPA is a JPA Data Access Abstraction.
Remember, Spring Data JPA always requires the JPA provider such as Hibernate or Eclipse Link.

게시글을 읽어봤을 때, 다음과 같이 정리할 수 있겠다.

  1. JPA Provider 위에 한층의 추상화를 추가한 라이브러리 or 프레임워크라고 한다.
    즉 Data 접근하는 것을 편하게 도와주는 기능을 하고, JPA의 구현체가 아니라고 한다.

  2. 데이터 레이어(database와 같은)에 접근하기 위해 필요한 뻔한 코드들의 사용을 줄여주도록 한다.

  3. Spring Data JPA를 사용하기 위해서는 JPA 구현체인 (Hibernate or Eclipse Link)가 필요하다!!

요약 정리 사진

다음 그림을 보고 전체적인 흐름을 이해하자.

  • 내 프로젝트 External Library를 보면 , hibernate & spring.data.jpa 코드들이 들어있는 것을 확인할 수 있었다.

추가 공부를 진행한 후, Spring data Jpa가 어떻게 작동하는지에 대해서 추가로 게시글을 올려보자.

Reference

https://dzone.com/articles/what-is-the-difference-between-hibernate-and-sprin-1
https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/
https://sas-study.tistory.com/364

profile
개발자 지망생입니다.

0개의 댓글