ORM( Object-relational mapping, 객체 관계 매핑 )
객체는 객체대로, 관계형 DB는 관계형 DB대로 설계하고, ORM 프레임워크가 중간에서 매핑
객체와 RDB의 차이도 중간에서 해결

객체와 RDB테이블을 올바르게 설계하고 매핑 해야함
ORM없이 객체를 RDB에 저장하려면, 개발자는 많은 코드와 SQL을 작성해야 한다.
대중적인 언어에는 대부분 ORM 기술이 존재
JPA, 스프링 데이터 JPA, Querydsl 등이 ORM 기술

JPA ( Java Persistence API )
자바 진영의 ORM 표준 기술
SQL 중심의 개발에서 객체 중심으로 개발 > 개발 생산성 향상, 성능 향상
JPA는 단순히 명세이기 때문에 구현이 없다.
JPA의 핵심이 되는 EntityManager는 javax.persistence.EntityManager 라는 파일에 interface로 정의되어 있다
package javax.persistence;
import ...
public interface EntityManager {
public void persist(Object entity);
public <T> T merge(T entity);
public void remove(Object entity);
public <T> T find(Class<T> entityClass, Object primaryKey);
// More interface methods...
}

Hibernate
위에서 언급한 javax.persistence.EntityManager와 같은 인터페이스를 직접 구현한 라이브러리이다.
Hibernate는 JPA라는 명세를 구현한 것이다.
( Hibernate의 작동 방식이 마음에 들지 않으면 DataNucleus, EclipseLink 등 다른 JPA 구현체를 사용해도 되고, 개인이 직접 JPA를 구현해서 사용할 수도 있다 )
JPA와 Hibernate는 마치 자바의 interface와 해당 interface를 구현한 class와 같은 관계이다.

JPA의 핵심인 EntityManagerFactory, EntityManager, EntityTransaction을
Hibernate에서는 각각 SessionFactory, Session, Transaction으로 상속받고 각각 Impl로 구현하고 있음을 확인할 수 있다.

Spring Data JPA
JPA를 쓰기 편하게 만들어놓은 모듈( Spring Data JPA는 Spring에서 제공하는 모듈 중 하나 )
JPA를 한 단계 추상화시킨 Repository라는 인터페이스가 바로 Spring Data JPA의 핵심이다.
사용자가 Repository 인터페이스에 정해진 규칙대로 메소드를 입력하면, Spring이 알아서 해당 메소드 이름에 적합한 쿼리를 날리는 구현체를 만들어서 Bean으로 등록해준다.
'Spring > DB연동' 카테고리의 다른 글
| JPA의 핵심 클래스들 (1) | 2024.05.09 |
|---|---|
| Resource , PathMatchingResourcePatternResolver (0) | 2024.04.25 |
| SqlSessionFactoryBean , MapperScan , DataSource (0) | 2024.04.25 |
| MyBatis, SqlSession , SqlSessionFactory, DB와 상호작용 (0) | 2024.04.25 |
| [JPA] 쿼리수행 메소드, 그리고 JpaRepository (1) | 2022.10.18 |