투표앱을 만들면서 클라이언트에서 보내온 데이터를 저장하고 저장하고 있던 데이터를 다시 반환해주는 과정에서 데이터베이스에 값들을 저장하고 반환해주고 했다. 그만큼 데이터베이스를 잘 다뤄야 한다는것을 뼈저리게 느끼고 있다.
그래서 이번 시간에는 데이터베이스를 이용할 때에 흔히 보이고 사용되는 기술들에 대해서 한 번 알아보고자 한다.
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 주요 개념
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 인터페이스에 메서드의 이름 규칙에 따라 쿼리 메서드를 자동 생성해준다. 이를 통해 개발자는 쿼리를 직접 작성하지 않아도 된다.
정리해보면 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)