본문 바로가기
spring & boot/JPA

[JPA] JPA, ORM 이란 무엇인가?

by lucas_owner 2023. 1. 31.

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 의 장단점을 간단하게 알아보자. 

 

  • 장점
  1. 기존의 SQL Query를 작성하지 않고, 데이터를 조작할 수 있다. 
  2. 프로그래밍 코드 사용으로 직관적이고, 비지니스 로직에 집중 할 수 있다.
  3. 재사용성 및 유지보수의 편의성 증대.
  • 단점
  1. 초기 설계가 더욱 중요해진다. 
  2. 어플리케이션이 복잡해질수록 어려워진다. 
  3. 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  특징

  1. 데이터를 객체지향적으로 관리 하기 때문에, 개발자는 비지니스 로직에만 집중하면 된다. 
  2. Java Collection 다루듯 DB 데이터를 다룰수 있다. 
  3. SQL Query를 작성하지 않아도 된다. (유지보수성 증가)
  4. 성능이슈 문제를 해결하기 위한, JPA 기법을 사용하면 성능향상에 도움이 된다. (지연로딩, 즉시로딩  ...) 
  5. 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 장점 

  1. SQL 중심 개발에서 -> 객체 중심 개발이 가능하다. 
  2. 생산성, 유지보수성 증가.
  3. 객체 <-> RDB 간 패러다임 불일치 해결.

- 즉 불필요한 SQL쿼리 작성 및 중복 SQL 파일들이 필요 없어지며, 객체 수정 -> SQL 수정이 필요 없어진다. 

기본적인 CRUD가 제공되는 만큼 개발시간 단축, 메서드로 간단한 접근하여 편의성이 증가한다. (객체지향적으로 관리)

또한 나중에 다루게 될 영속성 컨텍스트의 1차캐시 개념으로, 같은 조건 조회를 수행하게 될 시 DB에 쿼리가 1번만 가게 된다.

(해당 내용은 다음글에서 다루게 된다.)

반응형

댓글