본문 바로가기
JPA

초보자도 이해할 수 있는 JPA, Hibernate, Spring Data JPA의 차이점

by 반오십 코린이 2023. 8. 30.
728x90

JPA란?

 

자바 어플리케이션에서 RDB(관계형 데이터베이스를) 어떻게 사용하는지에 대한 가이드라인!

무슨 특정 기능을 하는 친구가 아니라 말그대로 구현이 안 되어 있는 인터페이스만 있는 상태!

ex) 가솔린 자동차 설계도

 


JPA를 왜 쓰는 거에요?

 

객체 지향적 코딩과 관계형 데이터베이스의 패러다임을 맞춰 주기 위해 사용.

객체 지향적 코딩을 우선시 하면, 데이터베이스를 다루기 위한 sql문으로의 전환이 쉽지 않다.

그렇다고 객체 지향적 코딩을 포기하면 유지 보수의 어려움 등의 단점이 있기에 딜레마에 빠진다.

 

이를 해결하기위해 ORM 기술이 탄생.

JPA를 사용하면 내부에서 JDBC를 통해 데이터베이스와의 매핑을 도와줌


Hibernate란?

 

JPA가 인터페이스라면, Hibernate는 그 인터페이스를 응용(실천,구현)한 형태! - 구현체

통상적으로 많이 쓰는 구현체이다.

 

ex) 가솔린 자동차 설계도를 통해 세단 생산


그럼 JPA를 쓴다는 것은 Hibernate를 쓴다는 건가요?

 

반은 맞고 반은 틀리다. JPA ORM 기술을 사용한다고 하면 디테일하게 들어가면

JPA 기술의 구현체를 ex)Hibernate를 사용한다와 같은 의미이다.

(JPA의 구현체가 Hibernate 말고도 eclipse link와 같은 구현체도 있다는 점 인지.)


그렇다면 Spring Data JPA란?

 

JPA를 보다 쉽게 사용할 수 있게 도와주는 기술이다.

내가 구현한 인터페이스(Repository)에서 JPARepository를 extends하면 

레포지토리에 구현 클래스 없이 인터페이스 만으로도 개발 완료 가능.


결과적으로 JPA랑 Spring Data JPA의 차이점이 뭔가요?

 

JPA를 사용한다고 하면 JPA의 구현체인 Hibernate 등을 통해 ORM 기술을 사용하는 것이다.

(Entity Manager 호출해서 영속성 컨텍스트를 직접 다루는 과정)

 

반면, Spring Data JPA는 Hibernate를 통해 구현됐다는 점은 동일하지만 entity manager를 직접 호출하고

다루지 않아도 된다는 특징이 있다.

 

또한 JpaRepository라는 인터페이스를 상속하기만 해도 상속받은 인터페이스에서 기본 기능을 사용할 수 있다.

ex) CRUD, 페이징, 정렬 등

 

즉, 반복되는 코드 작성 등의 번거로운 과정을 없애 사용자로 하여금 편리 제공.


Spring Data JPA 사용을 권장하는 이유는 무엇인가요?

 

1. 구현체 교체의 용이성

Spring Data JPA 내부에서 구현체 Mapping을 지원한다. 그렇기에 현재 Hibernate를 사용할지라도 다른 업그레이드 버전이 나오거나 했을 때 구현체를 옮기는 것에 유리.

 

2. 저장소 교체의 용이성

Spring Data JPA의 하위 프로젝트는 동일한 CRUD 인터페이스를 지니고 있다. 그렇기에 다른 저장소로 교체를 원한다면 ex) Spring Data JPA의 하위 프로젝트인 Spring Data MongoDB로 의존성 교체만 해주면 된다.

 


주저리

 

올해 초에 인프런에서 김영한 강사님의 수업을 들으며 JPA 기반 웹 프로젝트를 진행했다.

JPA 관련 프로젝트를 더 경험해보고 싶어 "스프링부트와 AWS로 혼자 구현하는 웹 서비스" 라는 책을 정독하며

이에 대한 내용을 찾아보던 중, Spring Data JPA라는 기술 발견.

기존 프로젝트에선 Entity Manager를 통해 엔티티의 영속성을 관리해가며 JPA 기술을 활용했는데 인터페이스

상속을 통해 간단하게 CRUD 등의 기능을 사용가능하다는 점을 보아

프로젝트에 Spring Data JPA를 도입해보고 싶어 해당 기술을 왜 이용하는가? 에 대한 이유를 찾아보았다.

 

매번 느끼지만 하나의 기술 스택을 사용하기 전에 Why?에 대해 알고 가는 것이 중요하다고 생각한다.

내가 쓰는 기술이 어떤 장점 및 단점이 있는 지를 알아야 선택지가 넓어지기에 효율적인 개발을 위해선 필수..!

 

 

 

728x90