하이버 네이트 Hibernate

1,139 단어·3 분·원문(.md)

Hibernate란? #

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

JPA는 관계형 DB 객체의 패러다임 불일치 문제를 해결할 수 있다는 점과 영속성 컨텍스트(엔티티를 영구 저장하는 환경) 제공이 큰 특징이다.

JPA #

자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스다. 라이브러라가 아닌 인터페이스이므로 특정 기능을 하진 않는다.

JDBC #

자바 프로그래밍 언어와 다양한 데이터베이스 SQL 또는 테이블 형태의 데이터 사이에 독립적인 연결을 지원하는 표준이다. 즉, DB 작업을 위한 표준이라고 볼 수 있다.

DBMS 회사들이 JDBC 인터페이스를 구현하여 제공한다. 이를 JDBC 드라이버 라고 하는데, 결국 JDBC 드라이버란 DBMS 회사들이 자신들의 데이터베이스 시스템에 접근할 수 있도록 표준 JDBC 인터페이스에 명시된 메소드들을 구현한 것이라 볼 수 있다.

따라서 JDBC API를 사용할 경우 하나의 자바 응용 프로그램만으로 JDBC 드라이버를 제공하는 어떤 종류의 관계형 DBMS에 접근이 가능하고, 사용자들은 특정 회사의 데이터베이스의 정확한 사용 방법을 몰라도 JDBC API만 알면 데이터 베이스 조작이 가능하다.


Hibernate 장점 #

  • 생산성
    • 하이버네이트는 SQL을 직접 사용하지 않고, 메서드 호출만으로 쿼리가 수행됩니다. 즉 SQL 반복작업을 하지 않음으로 생산성이 높아집니다.
    • SQL을 몰라도 되는 것은 아니다. 내부 동작을 알아야 하기 때문
  • 유지보수
    • 테이블 컬럼이 변경되었을 때, 테이블과 관련된 DAO의 파라미터, 결과, SQL 등을 대신 수행합니다. 이로 인해서 유지보수 측면에서 높아집니다.
  • 특정 벤더에 종속적이지 않다.
    • JPA는 추상화된 데이터 접근 계층을 제공하기 때문에 특정 벤더에 종속적이지 않다.
    • 설정 파일에서 JPA에게 어떤 DB를 사용하고 있는지를 알려주기만 하면 얼마든지 DB를 바꿀 수 있다.
  • 패러다임 불일치 해결
    • 상속, 연관관계, 객체 그래프 탐색, 비교 등 객체와 관계형 데이터베이스와의 패러다임 불일치를 해결할 수 있다.
  • 객체의 비즈니스 책임 위임
    • 객체를 불러올 때, 연관된 객체 또한 함께 불러오기 때문에, SQL에 의존적이지 않은 개발을 할 수 있다.
    • 즉, SQL 중심이 아닌 객체 중심의 개발이 가능하다.

Hibernate 단점 #

  • 성능
    • 메서드 호출만으로 쿼리를 수행하는 것은 직접 SQL 쿼리를 작성하는 것 보다는 성능상 좋지는 않다.
  • 세밀함
    • 메서드 호출만으로 DB 데이터를 조작하기에는 한계가 있다. 이를 보완하기 위해 JPQL, QueryDsl등을 지원한다.
    • Native Query를 지원하기 때문에 SQL 자체 쿼리도 작성할 수 있다.
  • 러닝 커브
    • 공부해야 할 것들이 많다.

Spring Data JPA #

Spring Data JPA는 JPA를 쓰기 편하게 만들어 놓은 모듈이다. JPA를 한 단계 추상화 시킨 Repository라는 인터페이스를 제공해 이루어진다.

Repository 인터페이스에 정해진 규칙대로 메서드를 입력하면, Spring이 알아서 해당 메소드 이름에 적합한 쿼리를 날리는 구현체를 만들어 Bean으로 등록해준다.

Back-End/jpa/hibernate.md