백앤드 개발일지/스프링부트

JPA, Hibernate, Spring Data JPA

giron 2021. 6. 27. 12:53
728x90

화창한 오후..시험도 끝나고 오랜만에 블로그도 정리할겸 확인해보는데 정작 JPA대한 정리가 없었다!!..그래서 오늘은 JPA에 대해서 공부해왔던 내용을 정리해보려고 한다

 

JPA(Java Persistence Api)

  • JPA가 나온 배경을 보자면, 기존의 MyBatis와 같은 SQL매퍼를 이용한 데이터베이스의 작성은 객체지향과는 거리가 멀다.
  • 그래서 객체 모델링보다는 테이블 모델링에 집중하는 모습을 해결하기 위해서 JPA라는 자바 표준 ORM기술이 나오게 되었다.(* ORM객체를 매핑하는 것이고, MyBatis와 같은 SQL Mapper쿼리를 매핑하는 것)
  • 관계형 DB는 어떻게 데이터를 저장할지에 초점이 맞춰진 기술이고, 객체지향 프로그래밍은 메시지를 기반으로 기능과 속성을 관리하는 기술이다. ---> 이처럼 서로 패러다임이 다른데, 객체를 DB에 저장하려고 하니 문제가 발생(패러다임 불일치)
  • 이러한 문제를 해결해주는게 JPA

Hibernate

  • 자바 환경에서의 객체-관계 모델 매핑 솔루션
  • 즉, ORM툴로서 JPA를 참조하여 구현하는 기능을 제공하는 프레임워크

Spring Data JPA

  • 스프링에서 JPA 구현체들을 더 쉽게 사용하고자 추상화 시킨 Spring Data JPA라는 모듈을 이용하여 JPA 기술 사용
  • 즉, 데이터를 접근하는 계층에서 발생하는 단순한 반복적인 코드를 줄이기 위해서 사용 ex) save(), findAll()

Hibernate와 Spring Data JPA 관계

  • JPA<- Hibernate<- Spring Data JPA
  • Hibernate는 JPA 구현체 <-> Spring Data JPA는 구현체가 아닌 데이터 접근의 추상화
  • Hibernate와 Spring Data JPA는 대체로 비슷하지만 크게 2가지가 다르다(구현체 교체의 용이성, 저장소 교체의 용이성)[Spring Data JPA를 사용하는 이유]
  • Spring Data JPA는 항상 하이버네이트와 같은 구현체들과 함께 사용되는데 이떄, Hibernate에서 다른 구현체로 교체될때 Spring Data JPA는 내부에서 구현체 매핑을 지원해주므로 손쉽게 교체가 가능하다(구현체 교체의 용이성)
  • DB를 교체할때 Spring Data의 하위 프로젝트들은 save(), findOne()등 기본적인 CRUD의 인터페이스가 같기 때문에 저장소가 교체되어도 기본적인 기능은 변경할 것이 없다(저장소 교체의 용이성)

 

728x90