티스토리 뷰

728x90
반응형

목차

     

     

     

     

    ORM(Object Relational Mapping)

     

    ORM은 SQL Mapper와 함께 영속성 프레임워크에 속한 테크닉이다.

     

    기존의 JDBC는 DB 연결과 SQL 사용, 결괏값 매핑 등

     

    모든 과정을 개발자가 직접, 반복해서 입력해주어야 했기 때문에 생산성이 떨어졌는데,

     

    객체와 DB Table을 손쉽게 매핑시켜주며 등장한 것이 ORM과 SQL Mapper라고 할 수 있다.

     

    JDBC의 번거로움을 해결해주기 위해 등장한 두 기술은 시간순으로 보면 아래와 같이 발전했다.

     

    객체와 SQL 필드를 매핑해 데이터를 객체화, SQL과 DB에 의존적이고 패러다임 불일치가 일어나는 SQL Mapper를 대신해

     

    ORM은 이름 그대로 객체(Object)와 DB Table을 자동으로 매핑데이터를 객체화하는 손쉬운 방법을 택했다.

     

    영속성 프레임워크, 패러다임 불일치 및 SQL Mapper와 ORM에 대한 자세한 비교는 아래 글을 확인하자.

     

    2022.08.26 - [개발/Spring] - [Spring]JDBC(Java DataBase Connectivity)

    2022.08.26 - [개발/Spring] - [Spring]SQL Mapper vs. ORM

     

    [Spring]SQL Mapper vs. ORM

    지난 글에선 웹 앱의 계층 구조와 JDBC Workflow에 대해 알아봤다. 2022.08.26 - [개발/Spring] - [Spring]JDBC(Java DataBase Connectivity) [Spring]JDBC(Java DataBase Connectivity) 지난 글까지 웹 앱의 서비..

    gnidinger.tistory.com

     

    Hibernate, JPA

     

    이렇게 등장한 기술인 ORM을 지원하는 프레임워크는 여러개가 존재한다.

     

    유명한 것들로만 추려보면 대략 위 그림과 같은데,

     

    가볍고 빠른 성능 덕분에 압도적인 비율로 Hibernate를 사용하고 있다고 한다.

     

    JPA(Java Persistent API)

     

    JPA는 한 마디로 말하면 자바 ORM에 대한 API(Application Programming Interface) 명세이다.

     

    이름과 명세라는 명칭에서 확인할 수 있듯이 인터페이스의 모음이며, 실제로 동작하는 코드가 아닌 가이드라인에 가깝다.

     

    구체적으로 JPA는 위와 같은 세 개의 영역으로 구성되며, 각 영역의 설명은 대략 아래와 같다.

     

    • API - JPA를 이루고 있는 API 그 자체. Java9 이후로는 jakarta.persistence로 바뀌었다.
    • JPQL - 플랫폼에 독립적인 객체지향 쿼리 언어
    • O/R Metadata - Java 클래스를 DB 스키마에 매핑해주는 xml파일

    JPA는 추상적인 인터페이스의 집합이기 때문에, 실제로 사용하기 위해선 구현을 해주어야 한다.

     

    이때 JPA를 구현한 구현체 중 하나가 위에서 알아본 Hibernate가 된다.

     

    즉, Hibernate는 JPA를 구현한 ORM 프레임워크이며, 그중 가장 많이 사용된다.

     

    Hibernate를 조금 뜯어보면 구현관계를 더 정확하게 볼 수 있는데,

     

    JPA의 핵심적인 인터페이스를 상속받아 구현하고 있는 것을 쉽게 확인할 수 있다.

     

    Spring Data JPA

     

    위 트윗처럼, 자바는 추상화의 반복이다.

     

    JPA의 구현이 Hibernate라는 건, 뒤집어 말하면 Hibernate의 추상화가 JPA라는 얘기도 된다.

     

    Spring Data JPA는 여기에서 한 걸음 더 나간다.

     

    바로 JPA를 추상화 하는 것이다.

     

    Spring Data JPA란 한 마디로 하자면 JPA를 사용하기 편하게 추상화시킨 모듈이다.

     

    동시에 스프링을 기반으로 한 데이터 액세스 프로젝트 Spring Data의 구성원이기도 하다.

     

    추상화 했다는 건 예를 들어 Spring Data JPA의 SimpleJpaRepository 클래스를 열어보면 알 수 있는데,

     

    내부적으로 JPA의 핵심인 EntityManager를 사용하고 있다.

    package org.springframework.data.jpa.repository.support;
    
    ...
    
    public class SimpleJpaRepository<T, ID> implements JpaRepositoryImplementation<T, ID> {
    
    	private final EntityManager em;
        
        ...
    }

    따라서 실제로 애플리케이션이 DB에 접근하는 순서는 아래와 같이 된다.

     

    Spring Data JPA에서 제공하는 Repository 인터페이스를 사용하면 CRUD, Paging, Sorting과 더불어

     

    SQL 쿼리 메서드를 작성하지 않고도 원하는 값을 편하게 조회할 수 있게 된다.

     

    요약

     

    • ORM - 객체(Object)와 DB Table을 자동으로 매핑 데이터를 객체화
    • JPA - 자바 ORM에 대한 API, 사용설명서
    • Hibernate - JPA를 구현한 ORM 프레임워크
    • Spring Data JPA - JPA를 쓰기 편하도록 추상화시킨 모듈
    반응형
    댓글
    공지사항
    최근에 올라온 글
    최근에 달린 댓글
    Total
    Today
    Yesterday
    링크
    «   2024/11   »
    1 2
    3 4 5 6 7 8 9
    10 11 12 13 14 15 16
    17 18 19 20 21 22 23
    24 25 26 27 28 29 30
    글 보관함