-
JPA(Java Persistence API)의 시작SPRING/JPA 2021. 10. 10. 20:21반응형
JPA란?
JPA는 자바 ORM 기술에 대한 API 표준이다. ORM이란 'Object Relational Mapping'의 약자로 객체와 관계형 데이터베이스를 매핑해주는 것을 말합니다.
그렇다면 왜? ORM 기술이 나왔는지 알아보겠습니다.
상품 데이터를 관리하는 Item 클래스가 있다고 가정하고,
상품 데이터를 관계형 데이터베이스에서 관리하기 위해 우리는 SQL문을 사용합니다.
문제 1) SQL 중심 개발의 문제
개발자가 CRUD문을 작성해서 객체를 관계형 데이터베이스에 넣어주고 가져오는 작업을 합니다.( 자바 객체를 SQL을 통해 데이터베이스에 관리하게 하고, 데이터베이스에 저장된 데이터를 자바 애플리케이션에서 사용하려면 SQL을 통해 다시 자바 객체로 변환) - '개발자가 직접 SQL을 매핑하는 역할을 반복한다'
문제 2) 객체와 관계형 데이터베이스의 패러다임 불일치
자바는 객체 지향 패러다임으로 만들어졌고, 관계형 데이터베이스는 데이터를 정규화해서 보관하는 것을 목표로 합니다.
객체를 데이터베이스에 넣기 위해서는 SQL문을 통해 변환해서 저장해야 하고, 데이터베이스에서 객체를 다시 꺼내오기 위해서는 SQL문을 작성해야 합니다.
객체를 단순히 데이터 전달 목적으로 사용할 뿐 객체지향적으로 프로그래밍할 수 없습니다.
그 이유는 객체지향과 관계형 데이터베이스 간의 패러다임이 불일치하기 때문입니다.
이를 해결하기 위해서 나온 기술이 ORM입니다.
(객체는 객체지향적으로, 관계형 데이터베이스는 관계형 데이터베이스대로 설계가 가능해집니다.)
ORM은 중간에서 2개를 매핑하는 역할을 합니다.
JPA는 위에서 설명한 ORM 기술의 표준 명세로 자바에서 제공하는 API입니다.
JAP는 인터페이스, 이를 구현한 대표적인 구체로 Hibernate, EclipseLink, DataNucleus... 등이 있습니다.
이 중 가장 대표적인 오픈소스가 Hibernate(하이버네이트)입니다.
JPA 사용 시 장점
- 특정 데이터베이스에 종속되지 않음
예를 들면 현재 애플리케이션 개발을 위해 오라클을 사용하고 있었으나, MariaDB로 변경한다면 데이터베이스마다 문법이 조금 다르기 때문에 수정이 필요합니다.
이러한 SQL 표준을 지키지 않는 특정 벤더별 기능을 Dialect(방언)이라고 부릅니다.
JPA는 Dialect(방언)이라는 추상화된 방언 클래스를 제공하고 각 벤더에 맞는 구현체를 제공합니다.
(하이버네이트는 약 40가지 이상의 데이터베이스 방언을 지원한다.)
- 객체지향적 프로그래밍
- 생산성 향상
JPA 사용 시 단점
- 복잡한 쿼리
복잡한 쿼리를 사용할 경우 JPA에서는 Native SQL을 통해 기존의 SQL문을 사용할 수 있지만 그러면 특정 데이터베이스에 종속된다는 단점이 생깁니다.
- 성능 저하 위험
객체 간의 매핑 설계를 잘못했을 때 성능 저하가 발생할 수 있다.
- 학습곡선이 높은 편이다(어렵다..)
참고 : https://www.inflearn.com/course/ORM-JPA-Basic (김영한님의 기본 JPA) ,
반응형'SPRING > JPA' 카테고리의 다른 글
@EntityGraph 사용법 (7) 2021.12.06 페치조인(fetch Join )이란 (6) 2021.12.03 Spring Data JPA(쿼리 메소드) (0) 2021.10.11 JPA(Java Persistence API)동작 방식 (0) 2021.10.10