본문 바로가기

Spring

hibernate란?

우선 hibernate를 공부하기 전에 ORM과 JPA에 대한 개념을 간단하게 알아야 한다고 생각했다. 

그래서 오늘은 Persistence framework 그리고 JAVA를 사용할 때 필요한 JPA, 그에 관련된 hibernate순으로 간단하게 개념만 공부를 해봤습니다. (사실 hibernate라는 주제이지만 두루두루 다룹니다..ㅎㅎ)

 

persistence (영속성)

-영구적으로 메모리를 저장한다

-데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성을 의미
-파일 시스템, 관계형 테이터베이스 혹은 객체 데이터베이스 등을 활용하여 구현

 

Persistence framework

-JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업으로 db 연동되는 시스템 개발 가능 -> 안정적인 구동 보장

 SQL mapper vs ORM

 

1) SQL mapper

-SQL 문장으로 DB를 다룬다

-SQL을 명시 해줘야 한다

Ex)Mybatis, JdbcTempletes 등

-직접적으로 sql을 사용하기 때문에 불필요한 코드를 줄일 수 있다. 

 

 

1-1)ORM(Object-Relational Mapping)(JPA)

-객체를 통해 간접적으로 데이터를 다룬다 

-객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것

-ORM을 이용하면 SQL Query가 아닌 직관적인 코드(메서드)로 데이터를 조작가능

-persistence API (JPA, hibernate 등)

 

EX)

python -Django ORM

라라벨(오픈 php웹 프레임워크) => eloquent ORM

Node.js => sequlize or type ORM

 

JDBC(Java Database Connectivity)/database의 종류에 상관이 없음

-DBMS를 편하게 다룰 수 있도록 일종의 규격을 만든 것이 JDBC

-자바 프로그램이 데이터 베이스와 연결되어 데이터를 주고 받을 수 있게 해주는 프로그래밍 인터페이스

-JDBC는 모든 데이터 베이스에 접근할 수 있도록 JAVA에서 제공하는 API

-JAVA의 모든 Persistence Framework는 내부적으로 JDBC API를 이용

-JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공

 

JPA(Java Persistence API)

-JPA를 사용해야 하는 이유 : sql 코드의 반복, 객체지향과 관계지향 데이터베이스의 패러다임 불일치

-JAVA ORM 기술에 대한 API 표준 명세로, Java에서 제공하는 API

-JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어를 제공

문제)

검색을 할때도 엔티티 대상으로 검색  - >  모든 DB데이터를 객체로 변환해서 검색하는 것은 불가능

 - > 필요한 데이터만 불러오려면 결국 SQL이 필요 - >JPQL

 

 

-JPA 구성요소 3가지 

1) javax.persistance 패키지로 정의된 API 그 자체

2) JPQL(Java Persistence Query Language)

  • JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어를 제공(SQL문법과 유사/SELECT,FROM,WHERE,등등)
  • JPQL은 엔티티 객체를 대상으로 쿼리 사용
select_문 :: = 
    select_절
    from_절
    [where_절]
    [groupby_절]
    [having_절]
    [orderby_절]

+SQL은 데이터베이스 테이블을 대상으로 쿼리 작성 / JPQL은 엔티티 객체를 대상으로 쿼리 작성

3) 객체/관계 메타데이터

+JPQL사용법

jang8584.tistory.com/282

 

JPA의 대표적인 구현체 

-ORM framework

-Hibernate, EclipseLink, DataNucleus, OpenJPA, TopLink Essentials

 

Hibernate

-JPA는 DB와 자바 객체를 매핑하기 위한 인터페이스(API)를 제공하고 JPA 구현체(하이버네이트)는 이 인터페이스를 구현한 것

-Hibernate가 지원하는 메서드 내부에서는 JDBC API가 동작

->HQL(Hibernate Query Language)

-HQL(Hibernate Query Language)이라 불리는 매우 강력한 쿼리 언어를 포함

-완전히 객체 지향적이며, 상속 , 다형성 , 관계등의 객체 지향의 강점을 가지고 있음 

-쿼리 결과로 객체를 반환하며 프로그래머에 의해 직접 생성,접근 가능

-SQL에서 지원하지 않는 페이지네이션이나 동적 프로파일링과 같은 향상된 기능을 제공

-여러 테이블을 조인할때 명시적인 join을 요구하지 않음

 

[장점]

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

-테이블 생성, 변경, 관리가 쉬움

-빠른 개발이 가능

 

[단점]

-메서드 호출만으로 쿼리를 수행하므로 성능이 떨어질 수 있음

-러닝커브가 존재한다

->어렵다(눈에 보이지 않은 많은 내용이 있기 때문에 )

->데이터 손실 가능성이 있음 (persistence context)

->성능상 문제가 있을 가능성이 있음 

 

 

References

-gmlwjd9405.github.io/2018/12/25/difference-jdbc-jpa-mybatis.html

-millky.com/@origoni/post/8#tutorial

-ecsimsw.tistory.com/entry/JPA-%EC%98%81%EC%86%8D%EC%84%B1-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8-1%EC%B0%A8-%EC%BA%90%EC%8B%9C-%EC%93%B0%EA%B8%B0-%EC%A7%80%EC%97%B0

-shs2810.tistory.com/18

-heewon26.tistory.com/133

'Spring' 카테고리의 다른 글

@Autowired  (0) 2021.05.17
페이징처리  (0) 2021.05.10
Spring VS Node.js  (0) 2021.04.25