본문 바로가기

IT 지식

ORM & JPA

ORM(Object Relational Mapping)

데이터베이스의 모델과 객체의 모델이 서로 달라서 이 둘을 서로 맞춰주기 위해 사용하는 것이다. 즉, 객체의 유무와 자료형이 서로 다른 DB와 객체를 연결해서 쓰기 위한 개념이다.

 

사진 : 둘이 자료형과 같은 부분이 달라지는데 이런 부분을 정의한다. 객체 다른 부분도 소스코드 넣어 서 설명하자 테이블쿼리랑

 

기존의 방식

테이블을 먼저 만들고 테이블을 기준으로 DTO(데이터그릇)를 만든 후에 이를 갖고 DB에 맞는 SQL문을 작성하여 개발하였다.

 

사진 : DB -> DTO -> DB에 종속된 SQL문 작성예시쓰기

 

장점

개발자가 쿼리를 작성하게 되어 세부적인 것을 변경하기 편하다 ( 튜닝 )

 

단점

1. DB종속적이라 DB가 변하면 SQL문도 맞춰서 다 변경되어야한다.

2. 자바의 객체 참조형 변수를 테이블로 표현 할 방법이 없다.

 

 

그래서 나온 것이 ORM!!

ORM 개념을 사용하면 객체를 먼저 만들고 객체를 기준으로 테이블을 생성하여 이를 갖고 DB에 맞는 SQL문을 자동으로 생성해준다. 즉, 처음에 DB 연결설정만 잘해주면 DB를 ORM개념으로 알아서 해주는 것이다.

 

사진 : 객체 -> 테이블

          함수호출 -> sql문 자동 호출

 

ORM개념을 사용해서 개발을 하게 되면 자바에서  쿼리를 전송하고 DB에 전달하면 DB에서 검색한 데이터를 자바의 데이터 형식으로 변경해서 가져온다.

 

사진 : 자바객체에서 쿼리 전송하고 DB에서 데이터 받아오는데 중간에서 자바 언어로 변경되는 모양새 가운데는 ORM 작성

 

 

이러한 반복적인 데이터변환, 쿼리 생성 작업들을 대신 해결해주는 API가 JPA 이다.

 

JPA는 영속성 컨텍스트를 사용해서 자바 객체와 DB의 불일치하는 데이터를 확인해서 자동으로 SQL문을 호출해준다.

 

사진 : 자바 영속성컨텍스트 DB 

          과일 과일 과일

           동물 동물 과일

        이렇게 되면 JPA가 영속성 컨텍스트와 dB가 다른 것을 확인하고 자동으로 sQL문을 호출한다.

 

 

DB가 변경되면 SQL문을 변경할 필요가 없는이유

JPA는 JPA인터페이스를 통해서 추상화 객체를생성하여 DB와 연결해 SQL문을 호출하기 때문에 DB가 변경되면 DB에 맞는 추상화객체를 자동으로 생성하여 연결해준다.

 

사진 : DB -> 추상화 객체 -> DB에 맞는 sql문

 

SQL문을 생성해달라는 함수( findAll(), delete(), save() ) 들을 호출하면 추상화 객체를 통해서 SQL문을 자동으로 생성한다.

 

ORM으로 개발하는 건 JPA라는 인터페이스를 통해서 Hibernate라는 구현체로 sql문을 자동으로 작성하여 처리하는것이다.

 

query dsl

하이버네이트 쿼리 언어이다. 쿼리를 코드로 작성하여 컴파일시 오류가 뜰수 있도록한다.