ORM, JPA, Hibernate란?

ORM (Object Relational Mapping) 무엇인가?

RDB 테이블을 객체지향적으로 사용하기 위한 기술입니다. RDB 은 객체지향적 (상속, 다형성, 레퍼런스, 오브젝트 등)으로 접근하기 쉽지 않습니다.

때문에 ORM을 사용해 오브젝트와 RDB 사이에 객체지향적으로 다루기 위한 기술입니다.


 


JPA (Java Persistence API) 무엇인가?

ORM 전문가가 참여한 EJB 3.0 스펙 작업에서 기존 EJB ORM이던 Entity Bean JPA라고 바꾸고 JavaSE, JavaEE를 위한 영속성(persistence) 관리와 ORM을 위한 표준 기술입니다. JPA ORM 표준 기술로 Hibernate, OpenJPA, EclipseLink, TopLink Essentials과 같은 구현체가 있고 이에 표준 인터페이스가 바로 JPA입니다.


 


HIBERNATE 무엇인가?

Boss에서 개발한 ORM(Object Relational Mapping) 프레임워크 입니다.


장점

Hibernate는 특정 클래스에 매핑되어야 하는 데이터베이스의 테이블에 대한 관계 정의가 되어 있는 XML 파일의 메타데이터로 객체관계 매핑을 간단하게 수행시킵니다.

Hibernate를 사용하면 데이터베이스가 변경되더라도 SQL 스크립트를 수정하는등의 작업을 할 필요가 없습니다.

애플리케이션에서 사용되는 데이터베이스를 변경시키고자 한다면 설정파일의 dialect 프로퍼티를 수정함으로서 쉽게 처리할 수 있습니다.

Hibernate MySQL, Oracle, Sybase, Derby, PostgreSQL를 포함한 많은 데이터베이스를 지원하며 POJO기반의 모델과도 원활하게 동작합니다.


 


 


JPA를 쓰는가?

1. 기존 SQL 중심적인 개발시 불편하다

-       쿼리가 변경되면 이에따른 프로그램 소스 DTO객체의 변경도 불가피하게 일어난다

-       데이터를 가져와 객체지향적으로 관계를 Mapping하는 일이 매번 일어난다.

!!SQL의존적인 개발이 이루어진다.


 


2. 객체-관계 간 모델 불일치

관계형 데이터베이스에는 로우와 컬럼의 2차원 형태로 데이터가 저장된다. 데이터 관계는 외래키foreign key 형태로 표현된다. 문제는 도메인 객체를 관계형 데이터 베이스로 저장할 때 발생한다. 애플리케이션의 객체는 로우와 컬럼 형태가 아니다. 도메인 객체는 객체의 상태를 속성(변수)으로 가지고 있다. 그래서 도메인 객체 그대로 관계형 데이터베이스에 저장할 수가 없다. 이러한 불일치를 객체-관계 간 임피던스 불일치object-relational impedance mismatch라고 합니다.


 


3. 상속 불일치

상속은 객체 세계에서는 지원하지만, 관계형 스키마에서는 지원하지 않는다. 상속은 모든 객체지향 언어, 특히 자바에서 바늘과 실처럼 뗄 수 없는 특징입니다. 안타깝게도 관계형 스키마에는 상속 개념이 없습니다. 회사에서 임원과 직원의 예를 들어보면. 임원 개인도 회사의 직원이죠. 이 관계를 데이터베이스에서 표현하는 것은 테이블 간 관계 수정이 필요해서 쉽지 않습니다. 상속 없이 현실 세계의 문제 상황을 표현하는 것은 매우 복잡한 일입니다. 그런데 데이터베이스는 상속 관계와 같은 형태를 알지 못하지요. 이것을 해결할 간단한 방법은없지만, 문제를 풀 수 있는 몇 가지 접근법이 있습니다. 이 접근법은 다양한 클래스-테이블class-to-table 전략을 사용합니다.


4. 관계와 연관 관계의 불일치

1. SQL 중심적인 개발의 문제점

 - field 하나추가시  쿼리도 바꿔야하고  VO도 바꿔야되고 ...

 - SQL에 의존적인 개발을 피하기 어렵다.

 - 객체답게 모델링 할수록 매핑 작업만 늘어난다


 


장점

-       객체지향적으로 데이터를 관리할 수 있기 때문에 비즈니스 로직에 집중 할 수 있으며,

객체지향 개발이 가능합니다.

-       테이블 생성, 변경, 관리가 쉽다. (JPA를 잘 이해하고 있는 경우) 로직을 쿼리에 집중하기 보다는

객체자체에 집중 할 수 있습니다.

-       빠른 개발이 가능합니다.


 


단점

-       어렵다. 장점을 더 극대화 하기 위해서 알아야 할게 많습니다.

-       잘 이해하고 사용하지 않으면 독이될수도 있습니다.

-       성능상 문제가 있을 수 있다.(이 문제 또한 잘 이해해야 해결이 가능합니다.



 


 


JPA, HIBERNATE  Architecture










 

 


 


 


 


 

 



 



 


 






 

출처

https://docs.jboss.org/hibernate/orm/current/userguide/html_single/Hibernate_User_Guide.html

http://www.baeldung.com/hibernate-save-persist-update-merge-saveorupdate

http://hibernate.org/search/documentation/getting-started/

http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html

https://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/session-configuration.html

http://docs.jboss.org/hibernate/orm/

http://www.slideshare.net/zipkyh/spring-datajpa?next_slideshow=1

http://www.javajigi.net/pages/viewpage.action?pageId=5924

http://javacan.tistory.com