본문 바로가기
Spring

Java Persistence 계층의 구조 정리

by SiO2whocode 2023. 7. 13.
728x90

Java에서 데이터의 영속성(Persistence)를 위해 JDBC가 존재함. JDBC를 이용하여 실제 데이터베이스와 연결하고 상호작용함.

JDBC가 제공하는 드라이버를 이용하여 개발자는 실제 DBMS를 고려하여 개발하지 않아도 됨 (ex. Oracle, Mysql 등 모두 각자의 방식대로 관리하지 않아도 됨).

하지만 JDBC만 이용하면서 데이터베이스와 상호작용하는 것은 다소 불편함(추상화레벨이 낮아서 개발자가 관여해서 설정해주어야 하는 것이 많음 - 즉 손댈게 많음).

→ 그래서 이를 편리하게 하려고 Framework들 등장. 이러한 Framework의 종류에는 두가지가 있는데 하나는 SQL Mapper이고, 다른 하나는 ORM(Object Relational Mapping).

  • SQL Mapper는 개발자가 SQL을 직접 작성해서 사용해야하므로 사용하는 DBMS에 종속적임. 데이터베이스(의 테이블)과 객체를 매핑하는 방식이 아니라 SQL 쿼리 결과를 Java에서의 Object와 Mapping하는 식으로 작동함.
    • 대표적인 SQL Mapper로는 Mybatis, JdbcTemplete등이 있음
  • ORM(Object Relational Mapping)은 SQL을 작성할 필요없이 제공되는 메서드로 동작하는 방식. DBMS에 독립적임. 자바의 객체와 Table(데이터)을 매핑하는 방식으로 작동함.
    • JPA의 대표적인 구현체로 Hibernate가 있으며 가장 많이 사용됨. 이 역시 내부적으로는 JBDC(에서 제공하는 메서드)를 사용함. (당연함. 원래 JDBC가 하던거 편하게 하려고 만들어진 framework)Spring Data JPA는 스프링에서 제공하는 JPA 모듈이다. (JPA의 구현체를 한 번 더 추상화 한듯) 내부적으로는 JPA 구현체를 사용하며 어떤 JPA 구현체(ORM framework)를 사용할 것인지는 선택할 수 있다. Hibernate사용하는 경우가 많은듯.
    • Hibernate는 HQL(Hibernate Query Language)를 사용하며 SQL이 제공하지 않던 페이징이나 동적 프로파일링을 제공함.
    • JPA는 자바에서 제공하며, ORM에 대한 API 표준 명세임. 인터페이스이며 구현체가 아님. (ejb의 entity bean을 대체함)

그림 출처 : https://code-lab1.tistory.com/288

 

728x90