본문으로 건너뛰기

JPA / Spring Data JPA / Hibernate 란?

Spring Data JPA 란?

Spring Data JPA를 이해하기 위해서는, 과련된 기술을 이해할 필요가 있다.
관련 기술을 포함해서, 각각의 개요를 표로 만들었다.

기술명내용
JPAJava Persistence API의 약자
Java로 ORM을 이용하기 위한 사양
HibernateJPA(사양)의 구현체 중 하나
Spring에서 JPA를 이용할 경우, Hibernate가 JPA의 기본구현체로 선택됨
다른 JPA프로바이더 로써는 EclipseLink가 있다.
Spring Framework우리가 열공하고있는 그.. 프레임웍 ^^;
Spring DataSpring Framework중에서도 데이터 엑세스에 관한 프레임웍
Spring Data XXXX라는 프레임웍이 몇가지 있고, 그 중에서 SpringData는 비교적 최신 프레임웍
Spring Data JPASpring Data의 하위 프레임워크 중 하나
JPA의 구현체가 아님
JPA를 사용하기 쉽게 하기 위해 만들어진 추상클래스 및 인터페이스의 집합체

Java에서 ORM을 이용하고 싶다.

  • {{< color purple "JPA라는 사양을 따라야 할 필요가 있다." >}}
  • {{< color red "JPA를 사용하기 쉽도록 만든 Spring Data JPA를 이용한다." >}}

라는것이 됨.

JPA만으로도 ORM구현이 가능하나, Spring Data JPA을 사용하는 것이 더욱 편하다는 것이 포인트


JPA 는 무슨 사양?

JPA는 EntityEntityManager 두가지를 이용하여 데이터베이스 엑세스를 실현하는 사양이다.

Entity메모리 상의 Java오브젝트
1 Entity에 대해서 1테이블이 맵핑 된다
EntityManager는 DB와 Entity오브젝트를 동기화 한다
EntityManagerDB와 Entity를 동기화 한다
PersistentContext라는 영역에서 Entity를 관리한다
등록처리 = 새로운 Entity를 EntityManager경유로 PersistentContext에 등록
갱신처리 = DB랑 동기화가 된 Entity를 갱신한다.
취득처리 = EntityManager가 SQL을 발행 / 결과가 맵핑된 Entity를 취득한다.

JPA단일로는(Spring Data JPA를 안쓰는상태) entityManager클래스의 메서드가 직접 실행하도록 하는 코딩을 해야한다.
그러므로 id가 key인 Teacher테이블을 검색 할 경우 이렇게 된다.

String id = "1";
String query = "SELECT teacher FROM TeacherEntity teacher WHERE teacher.id = " + id;
TeacherEntity teacher = entityManager.createQuery(query).getSingleResult();

이런 방식의 코딩이 된다. 위의 코드에서처럼 ID검색 과 같은 자주 쓰이는 패턴들을 Spring Data JPA가 제공해주는 것이다.

↓↓↓ Spring Data JPA를 사용하면 이렇게 된다 ↓↓↓

String id = "1";
Optional<TeacherEntity> teacher = teacherRepository.findById(id);

이렇게 EntityManager를 직접 다루지 않고, Spring Data JPA가 제공해주는 findById라는 메서드를 이용함으로써 select가 가능하다