JPA

하이버네이트(Hidernate) 설명 및 설정법

Beekei 2021. 12. 28. 17:25
반응형

Hibernate란?

하이버네이트는 자바 언어를 위한 ORM 프레임워크이고 JPA의 구현체로, JPA 인터페이스를 구현하고 내부적으로 JDBC API를 사용한다.

하이버네이트는 자바객체를 통해 데이터베이스가 Oracle, MySql, MSSQL 등 에 상관없이 다룰수 있도록 하는 추상화를 목표로 한다.

Mybatis에 익숙한 사람들이라면, Mybatis 구조가 들어가는 자리에 Hiberante가 들어오는 구조라고 이해하면 된다.

이를 통해 개발자는 SQL를 직접 사용하지 않고 메서드 호출만으로 쿼리가 수행된다, 즉 SQL을 작성하는 시간을 줄여 생산성이 높아진다. 

 

하지만 직접 SQL을 작성하는것보다는 성능상 좋지 않고 세밀하게 데이터를 조작하기 힘들다.

이를 보안하기 위해 JPQL과 NativeQuery를 지원하고 Querydsl을 함께 사용할 수 있다.

 

설정법

설정은 스프링 부트, gradle 기준으로 작성하였다.

 

build.gradle

dependencies {
	...
    // JPA
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    // JDBC
	implementation 'org.springframework.boot:spring-boot-starter-jdbc'
    // MySQL
	runtimeOnly 'mysql:mysql-connector-java'
    ...
}

application.yml

server:
  port: 8080

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/devbeekei?characterEncoding=UTF-8&serverTimezone=Asia/Seoul
    username: root
    password: password

  jpa:
    show-sql: true 
    hibernate:
      dialect: org.hibernate.dialect.MySQL5InnoDBDialect 
      ddl-auto: validate 
    properties:
      hibernate:
        enable_lazy_load_no_trans: false
        format_sql: true
        use_sql_comments: true
        
        
logging:
  level:
    org:
      hibernate:
        type:
          descriptor:
            sql: trace
  • jpa.hibernate.dialect
    데이터베이스 방언 설정
  • jpa.hibernate.ddl-auto
    스키마 자동생성 설정

    - none
    - update : 테이블의 내용이 변경된 경우 자동으로 스키마 update
    - create : 애플리케이션 구동 시 스키마 create
    - create-drop : 애플리케이션 구동 시 스키마 create, 종료 시 drop
    - validate : 매핑 유효성 검증만 실행
  • jpa.properties.hibernate.enable_lazy_load_no_trans
    영속성 컨텍스트가 종료되어도, 새로운 데이터베이스 커넥션을 획득해서 지연로딩이 가능하도록 설정
    (성능상 false 권장)
  • jpa.properties.hibernate.format_sql
    Query 출력 시 Query를 가독성 좋게 줄바꿈(jpa.show-sql이 true일때)
  • jpa.properties.hibernate.use_sql_comments
    Query 출력 시 설명 주석 추가(jpa.show-sql이 true일때)
  • logging.level.org.hibernate.type.descriptor.sql
    Query 출력 시 데이터 값도 출력

반응형