ORM이란?
- JPA는 ORM 기술입니다.
- ORM(Object Relational Mapping)이란, 객체(Object)와 데이터베이스의 데이터를 연결해주는(매핑) 기술이다.
- 장점
- SQL문이 아닌 Method를 통해 DB를 조작할 수 있어, 개발자는 객체 모델을 이용하여 비지니스 로직을 구성하는데만 집중 할 수 있다.
- 객체 지향인 코드 작성이 가능하다
- 재사용, 유지보수, 리팩토링의 용이성 : ORM을 통해 작성한 객체를 재활용할 수 있다는 측면에서 재사용 및 유지보수의 편리성이 증가함
- 단점
- 프로젝트의 규모가 크고 복잡하여 설계가 잘못된 경우, 속도 저하 및 일관성을 무너뜨리는 문제점이 생길 수 있음
- 복잡하고 무거운 Query는 속도를 위해 별도의 튜닝이 필요하기 때문에 결국 SQL문을 써야할 수도 있음
JPA이란?
- JPA는 Java Persistence API의 줄임말이며 JPA는 자바 진영에서 ORM((Object-Relational Mapping))기술 표준으로 사용되는 인터페이스의 모음입니다.
- Java 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용하는 인터페이스 모음
- 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
- 인터페이스 이기 때문에 Hibernate, OpenJPA 등이 JPA를 구현함
JPA를 사용하는 이유
- JPA는 반복적인 CRUD SQL을 처리해준다.
- JPA는 매핑된 관계를 이해서 SQL을 생성하고 실행하는데, 개발자는 어떤 SQL이 실행될지 생만하면 되기 때문이며 예측도 쉽게 가능하다.
- SQL이아닌 객체 중심으로 개발할 수 있다.
- 생산성이 좋아지고 유지보수도 쉬워진다.
Hibernate란?
- Hibernate는 JPA를 구현한 구현체입니다.
- 개발된지 10년이 넘었으며 대중적으로 많이 이용되는 JPA 구현체 중 하나입니다.
- JPA의 핵심들인 EntityManagerFactory, EntityManager, EntityTransaction 등을 상속받아 구현한다.
- JPA를 구현하는 다른 구현체들로는 EclipseLink나 DataNucleus 등이 있다.
- 만약 JPA를 구현하는 구현체들이 마음에 들지 않는다면 개발자가 직접 JPA 구현체를 만들어 사용할 수도 있다.
- Hibernate는 내부적으로 JDBC를 이용해 관계형 데이터베이스와 커넥션을 맺고 상호작용한다.
Spring Data JPA
- JPA를 사용하기 편하도록 만들어놓은 모듈이다.
- Spring Data JPA를 사용하면 사용자는 더욱 간단하게 데이터 접근이 가능해진다.
- Spring Data JPA는 JPA를 한 단계 더 추상화시킨 Repository 인터페이스를 제공한다.
- 이러한 Spring Data JPA는 Hibernate와 같은 JPA구현체를 사용해서 JPA를 사용하게 된다.
요약
- JPA는 자바 진영의 ORM 기술에 대한 API 표준 명세이며 Hibernate는 JPA의 구현체이고, 내부적으로 JDBC를 이용한다.
- Spring Data JPA는 JPA를 사용하기 쉽게 스프링에서 제공하는 모듈로 내부적으로 JPA 구현체를 이용한다.