Blog

[Spring][JPA]51 JPA란? MyBatis(SQL Mapper)부터 시작 핵심요약

Category
Author
Tags
PinOnMain
1 more property
선 요약, 후 서술
JPA는 자바 진영의 ORM 기술에 대한 API 표준 명세이며
Hibernate는 JPA의 구현체이고, 내부적으로 JDBC를 이용한다.
Spring Data JPA는 JPA를 사용하기 쉽게 스프링에서 제공하는 모듈로 내부적으로 JPA 구현체를 이용한다.
JPA이전의 배경, SQL Mapper란?
SQL Mapper는 개발자가 직접 SQL문을 작성해 데이터베이스 데이터를 다루는 Persistence Framework이다. 객체와 테이블 간의 관계를 직접 매핑하는 것이 아닌, SQL문을 실행해 쿼리 수행 결과를 어떤 객체에 매핑할지 바인딩 하는 방법이다.
따라서 DBMS에 종속적인 방법이라고 할 수 있다. 대표적으로 MyBatis가 있다. 여기 단계까지도 JDBC Template를 개선해서 사용했지만, 결국 SQL문을 직접 작성해야된다는 단점이 있다.
장점
JDBC를 사용할 때 발생하는 불편함을 줄일 수 있다.
SQL이 비즈니스 로직과 분리되어 유지보수가 용이하다.
세부적인 SQL 변경시 편리하다
기존에 SQL문법을 그대로 적용할 수 있어 새로운 기술을 학습하지 않아도 된다.
단점
DBMS 별로 SQL 문법이 다르다.
개발자가 직접 SQL문을 작성해야 한다.
DBMS 변경시 SQL문을 재사용하기 어렵다.
객체와 테이블간 패러다임 불일치가 발생한다.
ORM 기술이란?
ORM 기술은 객체(Object)와 DB테이블을 매핑하여 데이터를 객체화하는 기술이다. ORM은 SQL문의 수행 결과를 매핑하는 것이 아닌 DB 테이블의 데이터 그 자체와 객체를 매핑한다.
개발자가 직접 SQL을 작성하지 않아도 자동으로 SQL문을 만들어내기 때문에 DBMS에 종속적이지 않다. 대표적으로 JPA가 존재한다.
장점
개발자가 SQL문을 직접 작성하지 않아도 된다.
SQL문이 아닌 클래스의 메서드를 통해 데이터베이스를 조작할 수 있다.
DBMS에 종속적이지 않다.
단점
직접 SQL을 작성하는 것보다 성능이 떨어질 수 있다.
사용하기 위해서는 ORM 기술을 학습해야 하는 러닝커브가 존재한다.
메서드 호출로 DB 데이터를 조작하기 때문에 세밀함이 떨어진다. (이를 위해 JPQL 등을 이용할 수 있다)
N+1 문제가 발생할 수 있다. (이에 대해서는 추후 자세히 학습이 필요하다.)
JPA(Java Persistent API)란?
JPA는 자바 ORM(Object Relational Mapping) 기술에 대한 API 표준 명세를 뜻한다.
JPA는 라이브러리가 아닌 ORM을 사용하기 위한 인터페이스의 모음이다.
이러한 JPA는 인터페이스의 모음, 단순한 명세이기 때문에 구현이 없다. 자바 애플리케이션에서 관계형 데이터베이스를 어떻게 사용할지 정의하는 하나의 방법일 뿐이다.
따라서 이러한 JPA의 구현체 있어야 JPA를 사용할 수 있다.
Hibernate란?
Hibernate는 JPA를 구현한 구현체이다. 개발된 지 10년이 넘었으며 대중적으로 많이 이용되는 JPA 구현체 중 하나이다.
JPA의 핵심들인 EntityManagerFactory, EntityManager, EntityTransaction 등을 상속받아 구현한다.
JPA를 구현하는 다른 구현체들로는 EclipseLink나 DataNucleus 등이 있다.
만약 JPA를 구현하는 구현체들이 마음에 들지 않는다면 개발자가 직접 JPA 구현체를 만들어 사용할 수도 있다.
Hibernate는 내부적으로 JDBC를 이용해 관계형 데이터베이스와 커넥션을 맺고 상호작용한다.
Spring Data JPA란?
Spring Data JPA는 JPA를 사용하기 편하도록 만들어놓은 모듈이다.
Spring Data JPA는 JPA를 한 단계 더 추상화시킨 Repository 인터페이스를 제공한다.
이러한 Spring Data JPA는 Hibernate와 같은 JPA구현체를 사용해서 JPA를 사용하게 된다.
Spring Data JPA를 사용하면 사용자는 더욱 간단하게 데이터 접근이 가능해진다.
Spring Data JPA를 사용하는 방법이나, 더 자세한 내용은 다음에 다뤄보도록 하겠다.