백앤드 개발일지/스프링부트
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