Spring

[Spring] ORM, JPA, Hibernate, Spring Data JPA의 개념

📝 작성 : 2020.07.08  ⏱ 수정 : 
728x90

Persistence(영속성)

프로세스가 생성했지만 별개로 유지되는 상태의 특징 즉, 프로그램이 종료되더라도 데이터가 사라지지 않는 특성을 뜻합니다.

Persistence Layer

  • Layered Architecture의 구성요소 중 하나입니다.
  • 영구 데이터를 객체화 하며, 영구 저장소에 데이터를 저장, 수정, 삭제하는 계층입니다. 즉, DB, File에 데이터를 CRUD하는 계층입니다.
  • JDBC를 이용하여 직접 구현할 수 있지만 간단하게 Persistence Framework를 이용하여 개발을 합니다. (JDO, Hiberante, Mybatis 등)

Layered Architecture

Persistence Framework

  • 데이터의 CRUD를 다루는 클래스 및 설정 파일등의 집합입니다.
  • JDBC 프로그래밍의 복잡함, 번거로움 없이 간단하게 DB와 연동되는 시스템을 개발할 수 있으며 안정적인 구동도 보장합니다.
  • SQL문장으로 직접 데이터를 다루는 SQL Mapper(Mybatis, JdbcTempletes 등)와 객체를 통해 간접적으로 데이터를 다루는 ORM으로 나눌 수 있습니다.

ORM(Object-Relation Mapping)

  • 객체 관계 매핑이라고 번역할 수 있습니다. 즉, 객체와 관계형 데이터베이스를 연결 해주는 것입니다.
  • SQL Query가 아닌 메서드를 동태 데이터를 조작할 수 있습니다.
  • 객체간의 관계를 바탕으로 SQL을 자동으로 생성합니다.

ORM의 장단점

장점
  1. 객체를 통해 간접적으로 데이터베이스를 다룸으로써 개발자가 비즈니스 로직에 좀 더 집중할 수 있도록 도와줍니다.
    • SQL Query가 아닌 직관적인 코드(메서드)를 통해 데이터를 조작합으로써 개발자가 객체모델로 프로그래밍하는데 집중 할 수 있도록 도와줍니다.
    • 선언문, 할당, 종료 같은 부수적인 코드가 아예 없거나 급격하게 줄어듭니다.
    • 각종 객체에 대한 코드를 별도로 작성함으로써 코드의 가독성을 높여줍니다.
    • SQL의 절차적, 순차적 접근이 아닌 객체 지향적인 접은으로 생산성을 높여줍니다.
  2. 재사용 및 유지보수가 용이합니다.
    • ORM은 독립적으로 작성되어 있고 객체들을 재활용 할 수 있습니다.
  3. DBMS에 대한 종속성이 줄어듭니다.
    • 객체간의 관계를 바탕으로 SQL을 자동 생성하기 때문에 RDBMS의 데이터 구조와 Java의 객체지향 모델간의 간격을 좁힐 수 있습니다.
    • 업체별 SQL 차이점을 고려하여 작성하지 않아도 됩니다.
단점
  1. 어렵습니다.
    • 사용하기는 편하지만 설계는 매우 신중하게 해야합니다. 잘못 구현할 경우 성능이 엄청나게 저하됩니다.
    • 프로젝트가 복잡 할 수록 난이도가 올라갑니다.
  2. 프로시저가 많은 경우 ORM의 장점을 활용하기 어렵습니다.

JDBC(Java Database Connectivity)

DB에 접근할수 있도록 Java에서 제공하는 API입니다. 모든 Persistence Framework는 내부적으로 JDBC API를 이용합니다.

JPA(Java Persistence API)

JPA란 관계형 데이터베이스에서 Java 객체를 저장, 조회 및 관리를 하기 위한 Java ORM 표준 인터페이스입니다.


JPA는 세 가지 요소로 구성되어있습니다.

  1. javax.persistence 패키지로 정의 된 API
  2. JPQL(Java Persistance Query Language)
  3. 객체/관계 메타데이터
    이를 구현한 기술로는 Hibernate, OpenJPA, EclipseLink 등이 있습니다. 대표적으로 Hibernate가 많이 사용됩니다.

Hibernate

JPA 구현체 중 하나입니다. 앞서 설명했듯 직접적으로 SQL을 사용하지 않아도 내부적으로 JDBC API를 사용하고 있습니다.


JPA의 핵심인 EntityManagerFactory, EntityManager, EntityTransaction을 각각 SessionFactory, Session, Transaction으로 상속받고 각각 Impl로 구현하였습니다.

Hibernate 공식문서

Spring Data JPA

Spring Data JPA는 Spring에서 제공하는 모듈 중 하나로, JPA를 더 쉽고 편하게 사용할 수 있도록 도와줍니다. JPA를 한단계 추상화 시킨 Repository 인터페이스를 제공합니다.

반응형

'Spring' 카테고리의 다른 글

[Spring] IoC  (0) 2020.07.10
[Spring] AOP 구현 - Annotation  (0) 2020.07.09
[Spring] AOP 구현 (XML)  (0) 2020.07.06
[Spring] AOP의 개념  (0) 2020.07.06
[Spring] @Autowired @Resource @Inject @Qualifier  (0) 2020.07.05