Search

240704_1244_[Spring] ORM, JPA, Hibernate, JDBC 총정리

1. ORM(Object Relational Mapping)

RDB (관계형 데이터베이스)

데이터가 행과 열이 있는 테이블로 구성되는 집합 이론 모델.
강력하고 효율적인 데이터 저장 및 검색 기능 제공.
객체 지향 개념을 모델링하는 데는 적합하지 않음 (상속, 다형성, 레퍼런스, 오브젝트 등).

ORM

테이블을 객체지향적으로 사용하기 위한 기술.
객체와 DB 테이블이 매핑됨.
객체를 조작함으로써 DB를 조작할 수 있게 됨.
쿼리문 작성 대신 객체 메서드 호출로 DB 작업 수행.
예: SELECT * FROM useruser.findAll().
생산성 향상.

ORM 프레임워크 종류

JAVA: JPA, Hibernate, EclipseLink, DataNucleus, Ebean 등.

2. JDBC (Java Database Connectivity)

데이터베이스에 연결 및 작업을 위한 자바 표준 인터페이스.
DBMS 종류에 상관없이 하나의 JDBC API를 이용해 데이터베이스 작업 처리.
DB 종류마다 각각의 SQL을 사용하는 불편함을 해결.
메소드와 전역변수를 하나의 문법으로 통일.

JDBC 아키텍쳐

Service와 Data Access, DB 연관 관계를 관리.

3. JPA (Java Persistence API)

Hibernate 기반의 새로운 자바 ORM 기술 표준.
자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스.
영속성 컨텍스트인 EntityManager를 통해 Entity를 관리.
Entity와 관련된 테이블에 대한 SQL 쿼리문을 생성하고 관리.
필요시 JDBC API를 통해 DB에 쿼리 전송.

Persistence Context

Entity를 저장하는 비휘발성 환경.
DB와의 통신 횟수 및 방식을 효율적으로 관리.
1차 캐시, 쓰기 지연, Dirty Checking 등 기능 제공.
EntityManagerFactory: WAS 시작 시 생성, 종료 시 소멸.
EntityManager: Entity 생명주기 관리.

JPA의 구현체

JPA는 인터페이스, Hibernate는 구현체.
JPA는 JDBC API를 사용하여 DB와 통신.
Entity에 대한 CRUD는 JPA가 자동 생성.

4. Spring Data JPA

JPA를 더 쉽게 사용하기 위한 상위 프레임워크.
인터페이스 및 주석 세트를 제공하여 데이터 액세스 계층을 쉽게 구축.
Repository 인터페이스를 통해 쿼리를 날릴 수 있음.
@Query, QueryDSL로 SQL 문 실행 가능.

핵심

메서드 이름 규칙 기반으로 JPA 쿼리 자동 생성.

5. Hibernate

자바 언어를 위한 ORM 프레임워크.
JPA의 구현체로, 내부적으로 JDBC API 사용.
JPA와 Hibernate 관계: 인터페이스와 그 구현체.
Hibernate는 JPA의 구현체로서 JPA 요청 정보를 JDBC 표준화 작업 후 전달.

Hibernate의 작동 방식

JPA의 EntityManagerFactory, EntityManager, EntityTransaction을 상속받아 구현.
JPA 사용 위해 Hibernate 필수 아님 (다른 JPA 구현체 사용 가능).

핵심

JPA의 구현체로서 JPA에서 넘겨받은 정보를 표준화해 JDBC에 전달.

결론

ORM은 객체 지향적으로 DB를 사용하기 위한 기술이며, JPA와 Hibernate는 이를 구현하기 위한 주요 도구
JDBC는 DB와의 통신을 위한 표준 인터페이스로, JPA와 Hibernate는 JDBC를 내부적으로 사용하여 DB와 상호작용함
Spring Data JPA는 JPA를 더 쉽게 사용하도록 돕는 프레임워크

안녕하세요

한국전자기술연구원 김영광입니다.
관련 기술 문의와 R&D 공동 연구 사업 관련 문의는 “glory@keti.re.kr”로 연락 부탁드립니다.

Hello

I'm Yeonggwang Kim from the Korea Electronics Research Institute.
For technical and business inquiries, please contact me at “glory@keti.re.kr”