가자공부하러!

Hibernate(1) - ORM? Hibernate? 본문

공부/Java

Hibernate(1) - ORM? Hibernate?

오피스엑소더스 2019. 11. 6. 16:48

참고 : https://docs.jboss.org/hibernate/stable/orm/userguide/html_single/Hibernate_User_Guide.html

참고 : https://www.slideshare.net/visualkhh/hibernate-start

참고 : https://www.youtube.com/watch?v=Y0tUaidXRqo

참고 : https://bcho.tistory.com/906
참고 : https://onecellboy.tistory.com/349

 

 

1. ORM? Hibernate?


1. ORM?

  > Object Relation Mapping

    - 애플리케이션의 클래스와 DB 테이블 사이의 매핑 정보를 기술한 메타데이터를 기반으로, 자바 애플리케이션 객체를 DB테이블에 자동으로 영속화 해주는 기술

  > RDB 테이블을 객체지향적으로 사용하기 위한 기술

    - 상속, 다형성, 레퍼런스, 오브젝트 등

    - 객체-관계 간 모델 불일치를 해결할 수 있다.

    - 자바 객체를 RDBMS의 하나의 ROW로 매핑해준다.

  > 객체와 RDB 두 기둥 위에 있는 기술

    - 객체지향형 설계와 RDB에 대한 이해가 깊어야 잘 활용할 수 있다.

  > 사용이유 : 도메인 모델 기반의 프로그래밍을 하고싶기 때문

 

2. JPA?

  > JavaSE, JavaEE를 위한 영속성(persistence) 관리와 ORM을 위한 표준 기술

  > ORM 표준 기술

  > Hibernate, OpenJPA, TopLink, TopLink Essentials 등 구현체들의 표준 인터페이스

   - 까보면 온통 인터페이스 뿐

  > EJB밀다가 개빈킹이라는 사람이 못쓰겠다! 하고 Hibernate 만들고 Java진영에서 개빈킹님 모셔다 만들었음

  > JPA를 왜 쓰는가?

   - 생산성 : 쉽고 빠른 CRUD

   - 유지보수 : DB컬럼변동이 발생하면 Entity의 필드만 바꿔주면 됨

   - 상속관계를 이해하고 알아서 쿼리를 만들어 처리해줌

   - 연관관계, 객체 그래프 탐색 : get할 때 그 시점에 쿼리를 수행해서 값을 가져와줌

   - 신뢰할 수 있는 엔티티, 계층

   - 동일한 트랜잭션에서 조회한 엔티티의 동일성을 보장

   - 성능 최적화 :

     - 캐싱(매우 짧은 시간동안의 트랜잭션 내 캐싱)

     - 버퍼링(JDBC BATCH와 유사한 기능을 transaction.begin(), commit()으로 수행)

   - 지연 로딩과 즉시 로딩 - JPA옵션으로 지정할 수 있음

     - 지연 로딩 : 객체가 실제로 사용되는 시점에 로딩(쿼리 수행)

     - 즉시 로딩 : 객체를 가져오는 순간 JOIN SQL로 연관된 객체까지 미리 조회

  > 구동 방식

     - persistence.xml에서 설정정보를 읽고 Persistence클래스에서 시작해서 EntityManagerFactory클래스 생성

     - Factory에서 필요할 때 마다 EntityManager객체를 찍어냄

 

 

3. Hibernate?

  > Boss에서 개발한 ORM 프레임워크

  > 장점

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

    - 데이터베이스가 변경되어도 SQL 스크립트를 수정할 필요가 없다.

 

 

Comments