JPA(Java Persistence API), ORM(Object Reational Mapping) 이란 ?
JPA를 공부를 하게 된다면 JPA, ORM, 영속성 컨텍스트 등 많은 용어가 나오게 된다.
JPA, ORM 이란 무엇이고, 관련된 내용에 대해서 알아보자.
ORM 이란?
- ORM(Object Reational Mapping)은 객체 - 관계 매핑을 뜻한다.
- 객체와 관계형 데이터베이스(RDB)를 매핑해주는것이다.
- 객체 모델과 관계형 모델에는 불일치(*패러다임 불일치), 즉 차이점이 존재하게 된다.
- (Ex. 상속관계{객체는 상속개념이 있지만, RDB는 상속개념이 존재 하지 않는다.})
- ORM은 이러한 차이의 간극을 줄여준다.
- 즉, OOP(객체)와 RDB(관계형 데이터베이스)를 중간에서 매핑(혹은 연결)을 해주는 것이다.
- 좀더 쉽게 접근하자면, Object(객체) <-- 매핑 --> RDB
- 객체를 통해 RDB에 접근, 사용하는것이다.
- 객체 모델과 관계형 모델에는 불일치(*패러다임 불일치), 즉 차이점이 존재하게 된다.
- ORM은 대부분의 프로그래밍 언어에 존재한다.(해당 글에서는 Java 기반으로 설명하겠다.)
- ORM의 장단점
- ORM 의 장단점을 간단하게 알아보자.
- 장점
- 기존의 SQL Query를 작성하지 않고, 데이터를 조작할 수 있다.
- 프로그래밍 코드 사용으로 직관적이고, 비지니스 로직에 집중 할 수 있다.
- 재사용성 및 유지보수의 편의성 증대.
- 단점
- 초기 설계가 더욱 중요해진다.
- 어플리케이션이 복잡해질수록 어려워진다.
- Query 속도 저하, 어플리케이션의 성능저하 문제가 발생할 수 있다.
* 패러다임 불일치란
- 객체지향에는 상속, 추상화, 다형성 등 고유한 특성이 있다, 하지만 DB는 이러한 특성이 존재 하지 않는다.
즉 각자의 기능과 표현방법이 다르다고 할 수 있다. 이러한 내용을 객체, 관계형 데이터베이스의 패러다임 불일치 라고 한다.
Hibernate(하이버네이트)
- 위에서 설명했던 패러다임 불일치 문제를 해결한 ORM 프레임 워크이다.
- Java를 위한 ORM 프레임워크이고, JPA의 구현체이다.
-> 내부적으로 JPA 인터페이스를 구현하고 JDBC API 를 사용한다.
- CRUD에 대한 기본적인 메서드가 구현되어있어 굉장히 빠른 속도로 개발을 진행 할 수 있다. (SQL Query를 작성하지 않음.)
- 단점: MyBatis와 같이 SQL을 직접 조작하는것 보다는 성능이 좋지 않다. 또한 디테일한 데이터 조작이 힘들다.
-> 이런점을 보완한것이 JPQL, NativeQuery를 지원하고 QueryDSL을 사용하여 보완할 수 있다.
JPA(Java Persistence API)란?
- JPA는 Java 진영의 대표 ORM 표준 기술이다.
- 구현체가 아닌, 인터페이스의 모음 이다. 즉 실제로 동작하지 않는다.
- JPA를 사용하기 위해서는 ORM 구현 라이브러리가 필요한데 위에 설명했던 Hibernate(하이버네이트), Eclipse Link, Open JPA 같은 것들이 존재한다.
- JPA 특징
- 데이터를 객체지향적으로 관리 하기 때문에, 개발자는 비지니스 로직에만 집중하면 된다.
- Java Collection 다루듯 DB 데이터를 다룰수 있다.
- SQL Query를 작성하지 않아도 된다. (유지보수성 증가)
- 성능이슈 문제를 해결하기 위한, JPA 기법을 사용하면 성능향상에 도움이 된다. (지연로딩, 즉시로딩 ...)
- JPQL을 사용하여 객체로 쿼리를 작성할 수 있다.
* JPQL 예시
// Query
String sql = "Select m From Member m where m.name like '%kim%'";
// Read
List<Member> list = em.createQuery(sql, Member.class).getResultList();
* JPQL 쿼리 변환 (SQL)
select
m.id as id,
m.name as name,
m.age as age,
m.phone as phone
from
Member m
where
m.name = "%kim%";
- JPA 동작 방식.
- JPA를 공부하고 있다면 위와 같은 동작 과정에 대한 그림을 보았을 것이다.
- JPA는 어플리케이션 <-> JDBC 사이에서 동작하게 된다.
- 또한 JPA 내부적으로 JDBC API 를 사용하기 때문에, JPA 를 사용한다 = JDBC API를 사용한다 는 것과 같다.
- JPA -> JDBC -> (SQL) -> DB 순서로 접근하게 되는것이다.
- JPA 장점
- SQL 중심 개발에서 -> 객체 중심 개발이 가능하다.
- 생산성, 유지보수성 증가.
- 객체 <-> RDB 간 패러다임 불일치 해결.
- 즉 불필요한 SQL쿼리 작성 및 중복 SQL 파일들이 필요 없어지며, 객체 수정 -> SQL 수정이 필요 없어진다.
기본적인 CRUD가 제공되는 만큼 개발시간 단축, 메서드로 간단한 접근하여 편의성이 증가한다. (객체지향적으로 관리)
또한 나중에 다루게 될 영속성 컨텍스트의 1차캐시 개념으로, 같은 조건 조회를 수행하게 될 시 DB에 쿼리가 1번만 가게 된다.
(해당 내용은 다음글에서 다루게 된다.)
'spring & boot > JPA' 카테고리의 다른 글
[JPA] Java로 JPA 설정시 주의할점(.yml 설정 무시) (0) | 2024.08.12 |
---|---|
[JPA]JpaRepository 원리 및 내부 분석(EntityManager 자동주입, 상속관계) (0) | 2023.08.30 |
[JPA] JPA N+1 문제와, 해결방법 정리 (0) | 2023.02.21 |
[JPA] 영속성 컨텍스트(Persistence Context), Entity Manager (0) | 2023.02.02 |
댓글