본문 바로가기
컴공/스프링 부트 (Spring boot)

스프링 부트(Spring Boot) 데이터베이스: JPA, Hibernate, Spring data JPA 이해하기

by 만슨 2023. 12. 5.

 

투표앱을 만들면서 클라이언트에서 보내온 데이터를 저장하고 저장하고 있던 데이터를 다시 반환해주는 과정에서 데이터베이스에 값들을 저장하고 반환해주고 했다. 그만큼 데이터베이스를 잘 다뤄야 한다는것을 뼈저리게 느끼고 있다.

그래서 이번 시간에는 데이터베이스를 이용할 때에 흔히 보이고 사용되는 기술들에 대해서 한 번 알아보고자 한다. 

 

1. JPA (Java Persistence API)

 

1.1 JPA란?

JPA는 자바의 ORM (Object-Relational Mapping) 기술을 사용하기 위한 인터페이스를 모아둔 것 으로, 자바 객체와 데이터베이스 테이블 간의 매핑을 편리하게 처리할 수 있도록 하는 인터페이스.

ORM (Object-Relational Mapping) 기술이란?
-객체 지향 프로그래밍 언어의 객체와 관계형 데이터베이스의 테이블 간의 매핑을 자동으로 처리해주어 간편하게 상호작용을 하게 해주는 기술

예를들어 SELECT * FROM Poll; 쿼리문을을  ORM을 사용하면 Poll 테이블과 매핑된 객체가 poll라고 할 때, poll.findAll()이라는 메서드 호출로 데이터 조회가 가능하다!

 

JPA는 관계형 데이터베이스에서 데이터를 객체지향적으로 다룰 수 있게 해주어 개발자가 객체 중심으로 개발할 수 있게 도와주는 것으로 JPA는 단순 명세이기 떄문에 구현이 없다!

 

1.2 JPA 특징 및 기능

 

  • 객체와 관계형 데이터베이스 간의 매핑을 위한 표준 인터페이스를 제공한다.
  • 주로 인터페이스와 어노테이션을 정의하고, 실제 구현체는 개발자가 선택하게 끔 한다.
  • JPA에서는 데이터베이스와의 상호작용을 처리하기 위한 Repository 인터페이스를 사용. 

 

 

2. Hibernate

 

2.1 Hibernate란?

Hibernate는 JPA의 구현체 중 하나로, JPA의 표준 명세를 실제로 구현한 라이브러리.

Hibernate는 ORM 프레임워크이며, 실제로 데이터베이스와의 상호작용을 편리하게 할 수 있도록 도와준다.

Hibernate는 SQL을 사용하지 않고 메소드를 사용해 데이터를 조작한다

-> 단지 개발자가 직접 SQL을 작성하지 않을 뿐 Hibernate가 지원하는 메소드 내부에서 JDBC API가 동작하고 있다

 

 

JPA Interface를 상속받은 구현체 이다.

 

2.2 Hibernate 주요 개념

JPA와 Hibernate 관계

SessionFactory (세션 팩토리) : Hibernate에서는 데이터베이스 연결을 위한 세션 팩토리를 제공. 세션 팩토리를 통해 세션을 생성하고 데이터베이스 트랜잭션을 관리할 수 있다.

 

Session (세션)  Hibernate에서는 세션을 통해 데이터베이스와의 트랜잭션을 관리하고 객체를 데이터베이스에 저장하거나 조회가능.

 

JPA의  EntityManagerFactory , EntityManager , EntityTransaction 을  Hibernate에서는 각각 SessionFactory , Session , Transaction 으로 상속받고 각각 Impl로 구현한다.

 

 

 

3. Spring Data JPA

 

3.1 Spring Data JPA란?

Spring Data JPA는스프링에서 제공하는 JPA 기반의 데이터 액세스를 편리하게 사용할 수 있도록 도와주는, JPA를 사용한 데이터베이스 접근을 보다 간편하게 만들어주는 기술이다. 주로 Repository 인터페이스를 통해 JPA의 기능을 사용할 수 있도록 지원 해준다.

 

즉 Hibernate와 JPA를 좀 더 편리하게 사용할 수 있도록 스프링에서 추가적인 지원을 제공하는 역할 

 

3.2 Spring Data JPA 주요 개념

Repository 인터페이스 : Spring Data JPA에서는 데이터베이스와 상호작용을 위해 Repository 인터페이스를 제공해준다. 이 인터페이스를 상속받고 필요한 메서드를 정의함으로써 데이터베이스 조작을 할 수 있다.

 

Query Methods : Spring Data JPA에서는 Repository 인터페이스에 메서드의 이름 규칙에 따라 쿼리 메서드를 자동 생성해준다. 이를 통해 개발자는 쿼리를 직접 작성하지 않아도 된다.

 

Repository 예

 

 

 

정리해보면 JPA는 자바 진영에서 제공하는 ORM 표준 인터페이스, Hibernate는 JPA의 구현체로 구체적인 ORM 라이브러리, Spring Data JPA는 스프링에서 제공하는 JPA 기반의 데이터 액세스를 편리하게 사용할 수 있도록 도와주는 기술이다 

 

 

 

 

참고 : https://goddaehee.tistory.com/209 [갓대희의 작은공간:티스토리]

          https://dev-coco.tistory.com/74 [슬기로운 개발생활:티스토리]

 

사진출처 : [JPA] JPA와 Hibernate 그리고 Spring Data JPA (tistory.com)