00.Hibernate
다회독을 진행하면서 한 번도 정리를 한 적이 없는데,
정리를 목적으로 작성
들어가면서
사용 이유
- jdbcTemplate, SQLMapper를 직접 다룰 일을 줄일 수 있다.
- Query를 직접, 반복해서 작성하는 비생산적인 일을 줄일 수 있다.
- 더 java 스러운 객체 모델링을 진행할 수 있다.
- DB vendor에 종속되지 않고 기존 구현 그대로 옮길 수 있다.
패러다임 불일치
- 애초에 RDB와 객체 지향은 패러다임이 맞지 않다.
- 관계형 데이터베이스는 데이터 중심으로 구조화되어 있고, 보다 집합적인 관점에서 풀이해나간다.
- 객체지향은 추상화, 상속, 다형성 등의 개념으로 풀이해 나간다.
- 애초에 서로 바라보는 목적지가 다르다.
JPA
- “서로의 종착지가 다르다”라는 간극을 원래는 개발자들이 메꾸고 있었다.
- 그래서 java 진영의 입장에 맞게 맞춘 것이 jpa다.
JPA, Hibernate
- JPA는 Java Persistence API의 약자로 자바 어플리케이션에서 관계형 DB를 사용하는 방식을 정의한 인터페이스다.
- JPA는 명세이기 때문에
javax.persistence로 이뤄진, interface, enum, exception, annotation 들로 이뤄져 있다. - Hibernate는 JPA의 구현체다. 즉, JPA를 사용하는데 꼭
Hibernate를 사용할 필요는 없다. - 그러나 보통 Hibernate를 많이 채택하고, 다른 라이브러리보다 더 성숙한 라이브러리이기 때문에 채택을 하는 것이다.
SpringData JPA는 JPA를 spring에서 쓰기 쉽게 해놓은 모듈이다.
Hibernate dependencies
hibernate-core
- 이름: hibernate-core
- 설명: Hibernate ORM의 핵심 라이브러리입니다. 이 라이브러리는 객체-관계 매핑을 처리하고, 데이터베이스와의 연결을 관리하는 기능을 제공합니다. 이 라이브러리가 없으면 Hibernate ORM을 사용할 수 없습니다.
hibernate-entitymanager
- 이름: hibernate-entitymanager
- 설명: JPA(Java Persistence API)와의 통합을 위한 Hibernate의 JPA 구현체입니다. hibernate-core와 함께 사용되며, EntityManager를 포함한 JPA 관련 기능들을 제공합니다
hibernate-annotation
- 이름: hibernate-annotations
- 설명: Hibernate에서 사용되는 주석 기반의 ORM 매핑을 위한 라이브러리입니다. 이 라이브러리는 Java 애노테이션을 통해 엔티티 매핑을 지원하며, 예전 Hibernate 3.x 버전에서 사용되었습니다. 현재는 hibernate-core에 포함되어 있습니다.
hibernate-validator
- 이름: hibernate-validator
- 설명: Hibernate Validator는 JSR-303(Java Bean Validation) 스펙을 구현한 라이브러리입니다. 객체의 유효성을 검증하기 위해 제약 조건을 적용할 수 있도록 도와줍니다. 예를 들어, 엔티티 클래스에서 필드 값의 유효성을 체크하는 데 사용됩니다.
hibernate-hikari
- 이름: hibernate-hikari
- 설명: Hibernate에서 HikariCP 연결 풀을 사용할 수 있도록 하는 라이브러리입니다. HikariCP는 성능이 뛰어난 데이터베이스 연결 풀 라이브러리로, 대규모 애플리케이션에서 성능을 최적화하는 데 유용합니다.
hibernate-envers
- 이름: hibernate-envers
- 설명: Hibernate Envers는 Hibernate의 엔티티에 대한 변경 이력을 관리하는 기능을 제공합니다. 이를 통해 엔티티 객체의 변경 이력을 추적하고, 과거 상태를 조회하는 기능을 구현할 수 있습니다.
hibernate-search
- 이름: hibernate-search
- 설명: Hibernate Search는 Hibernate ORM과 통합된 검색 기능을 제공합니다. 이 라이브러리는 Lucene과 같은 검색 엔진을 사용하여 엔티티에 대한 고급 검색 기능을 제공합니다.
hibernate-commons-annotations
- 이름: hibernate-commons-annotations
- 설명: Hibernate에서 공통적으로 사용하는 어노테이션들을 정의하는 라이브러리입니다. Hibernate가 사용되는 여러 모듈에서 공통적으로 필요한 어노테이션들을 포함합니다.
hibernate-async
- 이름: hibernate-async
- 설명: Hibernate ORM에서 비동기 쿼리 실행을 지원하는 라이브러리입니다. 이 라이브러리를 사용하면, 비동기 방식으로 데이터베이스 작업을 수행할 수 있어 성능을 최적화할 수 있습니다. 예를 들어, 비동기 방식으로 쿼리를 실행하고 결과를 Future나 CompletableFuture로 반환할 수 있습니다.
hibernate-reactive
- 이름: hibernate-reactive
- 설명: Hibernate Reactive는 비동기/반응형 프로그래밍을 위한 Hibernate의 확장입니다. Java의 CompletionStage 및 Reactive Streams API를 사용하여 비동기 방식으로 데이터베이스와 상호 작용할 수 있도록 지원합니다. 이를 통해 반응형 애플리케이션을 구축할 수 있습니다.
hibernate-jcache
- 이름: hibernate-jcache
- 설명: Hibernate JCache는 Hibernate 2차 캐시를 JCache API (JSR-107)를 사용하여 구현할 수 있게 해주는 라이브러리입니다. 이를 통해 JCache를 활용한 효율적인 캐싱 전략을 적용할 수 있습니다.
hibernate-spring
- 이름: hibernate-spring
- 설명: Spring 프레임워크와 Hibernate의 통합을 위한 라이브러리입니다. Spring의 트랜잭션 관리 기능과 Hibernate를 함께 사용하여, 더 나은 ORM 관리 및 트랜잭션 처리를 제공합니다.
hibernate-dialect
- 이름: hibernate-dialect
- 설명: Hibernate는 다양한 데이터베이스와 호환되도록 여러 데이터베이스 방언(Dialect)을 제공합니다. 이 라이브러리는 Hibernate에서 지원하는 다양한 데이터베이스 방언을 포함하고 있습니다. 예를 들어, MySQL, PostgreSQL, Oracle 등의 방언을 설정할 때 사용됩니다.
hibernate-spatial
- 이름: hibernate-spatial
- 설명: Hibernate Spatial은 공간 데이터(지리적 위치 및 지도 정보)를 저장하고 관리하기 위한 Hibernate 확장 모듈입니다. 이 모듈은 PostGIS, MySQL의 공간 확장 등 다양한 공간 데이터베이스와 통합될 수 있습니다.
ORM : Object Relational Mapping