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의 장점
- 객체 중심으로 개발할 수 있다.
-> 생산성이 향상 유지보수가 쉬워진다.
- 패러다임의 불일치도 해결.
ex. JAVA에서는 부모클래스와 자식클래스의 관계인 상속관계가 존재한다. 데이터베이스에서는 이러한 객체의 상속관계를 지원하지 않는데, JPA는 이를 지원한다.
DB도 상속관계 나타낼 수 있는데?? 하고 의문 점을 가질 수 있다.
- DB에서의 상속관계의 형식과 JPA의 상속관계의 형식은 다르다!!
- 위의 사진과 같이 객체의 연관관계(JPA)와 테이블 연관관계(DB)가 다름을 볼 수 있다.