SPRING JPA

Ga0·2023년 6월 15일
0

SPRING

목록 보기
12/14

ORM(Object-Relational Mapping)

  • 우리가 일반 적으로 알고 있는 애플리케이션 Class와 관계형 데이터베이스의 테이블을 매핑(연결)한다는 뜻이며, 기술적으로는 어플리케이션의 객체를 관계형 데이터베이스의 테이블에 자동으로 영속화 해주는 것이라고 보면된다.

여기서, 영속화(persist)란 무엇일까?

  • 사전에 의하면, 영속화의 뜻은 "지속되다." 이다.
  • 즉, JPA에서의 영속화란 "영속성 컨텍스트에 관리되는 상태로 만드는 것"을 의미한다.

영속성 컨텍스트

  • JPA를 이해하는데 가장 중요한 용어로써 엔티티를 영구 저장하는 환경이라는 뜻을 가지고 있다.
    DB에 저장을 한다는 것이 아니라 영속성 컨텍스트를 통해서 엔티티를 영속화 한다는 뜻인데, 말이 어렵다.
  • 간단히 설명하자면 아래와 같다.
  • 엔티티는 객체이다. 이 객체(엔티티)를 DB에 저장한다. 즉, 객체 -> DB이다.

그러면, 결과적으로 DB에 저장되니까 뭐가 다르냐인데... JAVA를 이해하면 아~ 할 수 있다.

JVM 외부에 객체를 영원히 관리하고 싶기 때문.

  • JAVA라는 것은 JVM이라는 세상에서 존재한다. 즉, JVM 밖에서는 지속될 수 없다는 뜻인데, 그말은 JVM이 사라지면 java 객체도 사라지는 것!!!
  • 그런데 JPA는 java 객체를 JVM 밖에서도 유지하고 싶다! 그래서 JVM에 있던 객체를 JVM 밖에서도 지속하고 싶다는 생각으로 영속화라는 개념이 나타났다.

그렇다면, 그냥 DB에 직접적으로 저장하는 것도 영속화 아닌가요? 지속적으로 남아있으니까!!!

  • 이에 대한 해답은 흐름에서 찾을 수 있었다!
  • 기본적으로 DB에 직접적으로 접근하는 것은 객체 지향적 사고가 아닌 데이터 베이스 위주의 데이터베이스 mapper 객체의 관점이라는 것!
  • JPA는 위에서 설명했다시피 어플리케이션의 객체를 관계형 데이터베이스의 테이블에 자동으로 영속화하는 것으로 다시말해 객체 지향적 사고의 관점이라는 것!
  • 쉽게 말하면 DB에 직접적인 것은 DB -> 객체 이지만, JPA는 객체 -> DB 이다.

JPA(Java Persistence API)

  • ORM 기준 표준으로 사용되는 인터페이스 모음
  • JPA를 구현한 대표적인 오픈소스로는 Hibernate가 있다. (JPA는 인터페이스이기 때문에 Hibernate, OpenJPA 등이 이를 구현함)
  • 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스

Native Query(순수 쿼리)

  • JPA는 Native SQL(NativeQuery)이란 기능을 제공해주는데 관계 매핑이 어렵거나 성능에 대한 이슈가 우려되는 경우 SQL을 직접 작성하여 사용하는 것을 의미한다.

❗️JPA의 장점

  1. 객체 중심으로 개발할 수 있다.
    -> 생산성이 향상 유지보수가 쉬워진다.
  2. 패러다임의 불일치도 해결.
    ex. JAVA에서는 부모클래스와 자식클래스의 관계인 상속관계가 존재한다. 데이터베이스에서는 이러한 객체의 상속관계를 지원하지 않는데, JPA는 이를 지원한다.

DB도 상속관계 나타낼 수 있는데?? 하고 의문 점을 가질 수 있다.

  • DB에서의 상속관계의 형식과 JPA의 상속관계의 형식은 다르다!!
  • 위의 사진과 같이 객체의 연관관계(JPA)와 테이블 연관관계(DB)가 다름을 볼 수 있다.

0개의 댓글