맨위로가기

하이버네이트

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

하이버네이트는 자바 환경을 위한 객체-관계 매핑(ORM) 솔루션으로, 2001년 Gavin King과 동료들에 의해 EJB2 엔티티 빈즈를 대체할 목적으로 개발되었다. 자바 클래스를 데이터베이스 테이블에 매핑하며, XML 파일 구성 또는 자바 애노테이션을 사용하여 구현한다. 하이버네이트는 HQL(Hibernate Query Language)을 지원하여 SQL과 유사한 쿼리를 작성할 수 있으며, 더티 체킹 기능을 통해 불필요한 SQL 갱신을 방지한다. 주요 구성 요소로는 Hibernate ORM, Hibernate Annotations, Hibernate EntityManager 등이 있으며, 독립형 자바 애플리케이션 및 자바 EE 애플리케이션에서 활용될 수 있다.

더 읽어볼만한 페이지

  • 지속성 프레임워크 - 마이바티스
    마이바티스는 자바 객체를 SQL 구문에 매핑하는 ORM 프레임워크이며, JDBC보다 단순한 코딩과 SQL 문 실행을 지원하고, XML 파일이나 어노테이션에 SQL 문을 저장하여 관리하며, 스프링 프레임워크와의 통합, 선언적 데이터 캐싱, 코드 생성기 등의 기능을 제공한다.
  • 객체 관계 매핑 - 마이바티스
    마이바티스는 자바 객체를 SQL 구문에 매핑하는 ORM 프레임워크이며, JDBC보다 단순한 코딩과 SQL 문 실행을 지원하고, XML 파일이나 어노테이션에 SQL 문을 저장하여 관리하며, 스프링 프레임워크와의 통합, 선언적 데이터 캐싱, 코드 생성기 등의 기능을 제공한다.
  • 객체 관계 매핑 - 엔티티 프레임워크
    엔티티 프레임워크는 .NET 환경에서 O/R 매핑을 통해 데이터베이스 작업을 간편하게 처리하도록 마이크로소프트에서 개발한 기술로, 개발자가 엔티티를 통해 데이터를 조작하여 코드 양을 줄이고 애플리케이션 개발 및 유지보수를 간소화하며, 다양한 데이터베이스 시스템과의 호환성을 제공한다.
  • 레드햇 소프트웨어 - 매니지IQ
    매니지IQ는 IT 부서의 효율적인 운영을 지원하는 소프트웨어로, 셀프 서비스, 규정 준수, 최적화 기능을 제공하며, 다양한 플랫폼을 지원하고 AI, 머신러닝 기술을 활용하여 클라우드 관리 기능을 개선하고 있지만, 기능 부족, 시스템 성능, 보안 취약점 등의 비판도 존재한다.
  • 레드햇 소프트웨어 - 시그윈
    Cygwin은 윈도우에서 유닉스 시스템과 유사한 환경을 제공하는 소프트웨어로, POSIX API 구현 및 다양한 개발 도구를 통해 유닉스 기반 소프트웨어의 개발, 빌드, 실행을 지원한다.
하이버네이트 - [IT 관련 정보]에 관한 문서
기본 정보
종류객체 관계 매핑 도구
개발자레드햇
최초 출시일2001년 5월 23일
최신 안정화 버전6.6.3.Final
최신 안정화 버전 출시일2024년 11월 21일
프로그래밍 언어자바
운영 체제크로스 플랫폼 (자바 가상 머신)
플랫폼자바 가상 머신
라이선스GNU Lesser General Public License
웹사이트Hibernate ORM 공식 웹사이트

2. 역사

하이버네이트는 2001년 Gavin King과 시러스 테크놀로지스 출신 동료들이 EJB2 스타일의 엔티티 빈즈 이용을 대체할 목적으로 개발을 시작했다.[4] 초기 목표는 EJB2보다 향상된 지속성 기능 제공, 복잡성 단순화, 누락된 기능 보완이었다.[4]

2003년 초, 하이버네이트 개발팀은 하이버네이트 2를 출시하여 많은 개선 사항을 제공했다.[4] JBoss Inc.(현재는 Red Hat의 일부)는 이후 하이버네이트의 주요 개발자를 고용하여 개발을 지원했다.[4]

2005년, 하이버네이트 3.0이 출시되었다.[4] 새로운 인터셉터/콜백 아키텍처, 사용자 정의 필터, JDK 5.0 애노테이션(자바의 메타데이터) 기능 등이 포함되었다.[4] 하이버네이트 3 (버전 3.5.0 이상)은 Java Persistence API 2.0 사양의 인증된 구현이었다.[4]

2011년 12월, Hibernate Core 4.0.0 Final이 출시되었다.[5] 다중 테넌시 지원, ServiceRegistry 도입, 세션 열기 개선, 향상된 통합, 국제화 지원, 로깅 메시지 코드 등이 포함되었다.[5]

이후 Hibernate ORM 4.1.9 Final(2012년 12월),[6] Hibernate ORM 4.2 Final(2013년 3월),[7] Hibernate ORM 4.3.0 Final(2013년 12월, Java Persistence API 2.1 포함),[8] Hibernate ORM 5.0.2 Final(2015년 9월, 부트스트래핑, hibernate-java8, hibernate-spatial, Karaf 지원 개선), Hibernate ORM 5.3 Final(2018년 10월, Java Persistence API 2.2 상속 캐싱 기능 추가),[9] Hibernate ORM 5.4.0.Final(2018년 12월) 그리고 2022년 10월, Hibernate ORM 6.1.4 Final등 지속적인 버전 업데이트를 통해 기능 개선 및 안정화가 이루어졌다.[10]

3. 매핑

자바 클래스를 데이터베이스 테이블에 매핑하는 것은 XML 파일 구성이나 자바 애노테이션을 사용하여 구현된다. XML 파일을 사용할 때 하이버네이트는 영속성 클래스에 대한 골격 소스 코드프로그램 합성할 수 있다. 이는 애노테이션을 사용할 때 보조적인 역할을 한다. 하이버네이트는 XML 파일 또는 자바 애노테이션을 사용하여 데이터베이스 스키마를 유지 관리할 수 있다.

클래스 간의 일대다 관계 및 다대다 관계를 구성하는 기능이 제공된다. 하이버네이트는 객체 간의 관계를 관리하는 것 외에도 객체가 클래스 데이터 유형의 다른 인스턴스와 일대다 관계를 갖는 반사 관계도 관리할 수 있다.

하이버네이트는 사용자 정의 값 유형의 매핑을 지원하여 다음과 같은 기능을 제공한다.


  • 열을 속성에 매핑할 때 기본 SQL 유형을 재정의한다.
  • 자바 열거형을 일반 속성처럼 열에 매핑한다.
  • 단일 속성을 여러 열에 매핑한다.


객체 지향 프로그래밍 응용 프로그램의 객체는 객체 지향 프로그래밍 원칙을 따르는 반면, 백엔드의 객체는 데이터베이스 정규화 원칙을 따르므로 서로 다른 표현 요구 사항이 발생한다. 이 문제는 "객체-관계형 임피던스 불일치"라고 하며, 매핑은 객체-관계형 임피던스 불일치 문제를 해결하는 방법이다.

매핑은 ORM 도구에 어떤 자바 클래스 객체를 어떤 데이터베이스 테이블에 저장해야 하는지 알려준다.

하이버네이트의 전문 용어에서 ''엔티티(entity)''는 하이버네이트의 영속성 메커니즘에서 다른 객체와 독립적으로 조작될 수 있는 독립형 객체이다. 반면에, ''컴포넌트(component)''는 엔티티에 종속되며 해당 엔티티에 대해서만 조작될 수 있다. 예를 들어, Album 객체는 엔티티를 나타낼 수 있다. 하지만 Album 객체와 관련된 Tracks 객체는 Tracks가 Album 객체를 통해서만 데이터베이스에서 저장되거나 검색될 수 있다고 가정하면 Album 엔티티의 ''컴포넌트''를 나타낸다. J2EE와 달리, 하이버네이트는 데이터베이스를 전환할 수 있다.

Java 객체와 SQL 변환을 수행하려면 Java 클래스와 SQL 테이블 간의 "매핑 데이터"가 필요하다. 하이버네이트는 이를 위해 몇 가지 방법을 제공한다.

  • '''XML 메타데이터:''' 가장 일반적인 방법이다. 각 클래스(및 해당 속성 그룹)는 지정된 DTD 스키마에 해당하는 XML 문서에서 XML 요소로 표현된다.
  • '''어노테이션을 이용한 메타데이터:''' JSR 175를 준수하여 영속성 클래스의 소스 코드에 주석으로 기술한다. 하이버네이트가 이를 해석하여 설정 파일에 해당 클래스에 대한 정보를 추가한다(또는 실행 시 `Configuration` 인스턴스에 추가한다). 어노테이션 기능은 별도의 모듈로 구성되어 있다.
  • '''XDoclet 메타데이터:''' JSR 175 및 Java 5.0이 출시되기 전에 어노테이션과 유사한 기능을 구현한 것이다. XDoclet 속성은 영속성 클래스의 소스 파일에 기술되며, Apache Ant의 독립적인 작업을 통해 구문 분석되어 XML 메타데이터를 생성한다.
  • '''메타데이터의 프로그램 조작:''' 하이버네이트는 `SessionFactory` 인스턴스를 생성하기 전에 매핑 세부 정보를 조작하는 API(`Configuration` 인스턴스 사용)도 제공한다.

4. Hibernate Query Language (HQL)

HQL(Hibernate Query Language)은 SQL에서 영감을 받은 언어로, 하이버네이트의 데이터 객체에 대한 SQL과 유사한 쿼리를 작성하는 데 사용된다. ''Criteria Query''는 HQL의 객체 지향 대안으로 제공된다. Criteria Query는 객체를 수정하고 객체에 대한 제한을 제공하는 데 사용된다.

HQL은 SQL의 객체 지향 버전이다. 데이터베이스 종속적인 쿼리를 생성하지 않으므로 데이터베이스별 쿼리를 작성할 필요가 없다. 이 기능이 없으면 데이터베이스를 변경할 때 개별 SQL 쿼리도 변경해야 하므로 유지 관리 문제가 발생한다.

5. Persistence (영속성)

하이버네이트는 일반적인 자바 객체(POJO, Plain Old Java Object)에 투명한 지속성을 제공한다. 영속 클래스에 대한 유일한 엄격한 요구 사항은 무인자 생성자이지만 반드시 '''public'''일 필요는 없다. 일부 애플리케이션에서 적절한 동작을 위해서는 `equals(Object obj)` 및 `hashCode()` 메서드에 특별한 주의를 기울여야 한다.[2] 하이버네이트는 식별자 속성을 제공하는 것을 권장하며, 이는 향후 릴리스에서 필수 요구 사항으로 계획되어 있다.[3]

데이터 객체의 컬렉션은 일반적으로 `Set` 및 `List` 인터페이스의 구현과 같은 자바 컬렉션 클래스에 저장된다. 자바 제네릭은 지원된다. 하이버네이트는 관련된 컬렉션을 지연 로딩하도록 구성할 수 있다. 지연 로딩은 하이버네이트 3부터 기본값이다.

관련 객체는 한 객체에서 다른 객체로의 작업을 ''전파 제약''하도록 구성할 수 있다. 예를 들어, 상위 `Album` 클래스 객체는 `save` 및 `delete` 작업을 하위 `Track` 클래스 객체로 캐스케이딩하도록 구성할 수 있다. Java 객체와 SQL 변환을 수행하려면 Java 클래스와 SQL 테이블 간의 "매핑 데이터"가 필요하다. 하이버네이트는 이를 위한 여러 가지 방법을 제공한다.


  • XML 메타데이터: 가장 일반적인 방법으로, 각 클래스(및 해당 속성 그룹)는 지정된 DTD 스키마에 해당하는 XML 문서에서 XML 요소로 표현된다.
  • 어노테이션을 이용한 메타데이터: JSR 175를 준수하여 영속성 클래스의 소스 코드에 주석으로 기술한다. 하이버네이트가 이를 해석하여 설정 파일에 해당 클래스에 대한 정보를 추가한다. 어노테이션 기능은 별도의 모듈로 구성되어 있다.
  • XDoclet 메타데이터: JSR 175 및 Java 5.0이 출시되기 전에 어노테이션과 유사한 기능을 구현한 것이다. XDoclet 속성은 영속성 클래스의 소스 파일에 기술되며, Apache Ant의 독립적인 작업을 통해 구문 분석되어 XML 메타데이터를 생성한다.
  • 메타데이터의 프로그램 조작: 하이버네이트는 `SessionFactory` 인스턴스를 생성하기 전에 매핑 세부 정보를 조작하는 API(`Configuration` 인스턴스 사용)도 제공한다.

6. 더티 체킹 (Dirty Checking)

하이버네이트는 불필요한 SQL 갱신을 방지하기 위해 더티 체킹(Dirty Checking) 기능을 제공한다. 이 기능은 영속적 객체의 변경된 필드나 컬렉션만을 갱신할 수 있도록 해준다. 컬렉션에 포함되지 않은 부분의 갱신 필요 여부를 확인하기 위해, 하이버네이트는 해당 필드를 `Object.equals()` 메서드로 비교한다. 한편, 컬렉션 필드(java.util.Listjava.util.Set 등)는 동일성(참조) 비교를 수행한다.

7. API

하이버네이트 API는 자바 패키지 org.hibernate를 통해 제공된다.[12]

; org.hibernate.SessionFactory 인터페이스

: 새로운 하이버네이트 세션을 생성하는 불변 객체이며 스레드 안전한 객체에 대한 참조이다. 하이버네이트 기반 애플리케이션은 일반적으로 이 인터페이스를 구현한 클래스의 인스턴스를 하나만 사용한다(싱글톤 패턴 활용).[12]

; org.hibernate.Session 인터페이스

: 하이버네이트 세션을 나타내며, 데이터베이스 엔티티에 대해 수행되는 조작의 주요 지점이다. 객체의 영속성 상태(트랜지언트, 영속, 분리) 관리, 데이터베이스에서 영속 객체 가져오기 및 트랜잭션 경계 관리가 포함된다. 세션은 데이터베이스의 논리적 트랜잭션과 동일하게 유지되도록 설계되었으며, 스레드 안전하지 않으므로 여러 클라이언트에서 사용하도록 설계되지 않았다.[12]

8. 구성 요소 (Components)

하이버네이트 소프트웨어는 다음과 같은 구성 요소를 포함한다.[13]


  • Hibernate ORM (Hibernate Core): 자바 환경을 위한 객체-관계 매핑 솔루션을 위한 기본 소프트웨어이다.[15] 주요 기능은 `Session` 지원, 트랜잭션 관리, 객체 캐싱, HQL이다.
  • Hibernate Annotations: JSR 317 자바 영속성 API(JPA 2)에 따라 데이터 변환을 관리하는 메타데이터를 제공한다.[17] JSR 175의 어노테이션 지원 (JSR 220 JPA 어노테이션 표준 준수)하며, XML을 이용한 메타데이터 매핑의 대체 수단을 제공한다. (버전 3.6부터 Hibernate Core/ORM에 병합됨[16])
  • Hibernate EntityManager: JSR 317 자바 영속성 API(JPA 2) 영속성 솔루션을 구현하는 래퍼이다.[19] Core 모듈의 래퍼이며, JSR 220 JPA Entity Manager 표준을 지원한다. (버전 5.2부터 Hibernate Core/ORM에 병합됨[18])
  • Hibernate Envers: 영속 클래스의 감사 및 버전 관리를 제공한다.[20]
  • Hibernate OGM (Object/Grid Mapper): NoSQL 저장소에 데이터를 저장하기 위한 확장이다.[21]
  • Hibernate Shards: 여러 관계형 데이터베이스를 위한 수평 분할을 제공한다.[22] Hibernate Core의 4.x 릴리스와 호환되지 않지만, 일부 Shards 기능은 4.0 릴리스에서 Core에 통합되었다.
  • Hibernate Search: 아파치 루씬의 전체 텍스트 라이브러리 기능을 Hibernate 및 JPA 모델에 통합한다.[23] Hibernate로 관리되는 영속성 실체에 대해, Lucene을 사용한 검색을 수행하기 위한 추상화 계층을 제공한다.
  • Hibernate Tools: JBoss 개발자 스튜디오에 포함된 이클립스 플러그인 및 앤트 작업의 집합으로 구현된 도구 모음이다.[24] Apache Ant의 태스크 그룹이나 이클립스 플러그인 등, Hibernate를 사용한 개발에 도움이 된다.
  • Hibernate Validator: JSR 303 빈 검증의 참조 구현이다.[25] 일반적인 데이터베이스의 제약 (수치의 범위, 문자열 형식, null 체크 등)을 어노테이션을 사용하여 검증 가능하게 한다.
  • Hibernate Metamodel Generator: JSR 269 플러그 가능한 주석 처리 API를 사용하여 JSR 317 자바 영속성 API(JPA 2) 정적 메타모델 클래스를 생성하는 주석 프로세서이다.[26]
  • NHibernate: .NET 프레임워크를 위한 객체-관계 매핑 솔루션이다.[27]


하이버네이트는 모듈화되어 있으며, 각각 독립적인 팀이 개발하고 있다.

9. 활용

하이버네이트는 독립형 자바 애플리케이션과 서블릿, EJB 세션 빈, JBI 서비스 컴포넌트를 사용하는 자바 EE 애플리케이션 모두에서 사용할 수 있다. 또한 다른 프로그래밍 언어의 기능으로 포함될 수도 있다. 예를 들어, 어도비는 하이버네이트를 콜드퓨전 버전 9(J2EE 애플리케이션 서버에서 실행)에 통합하여 CFML에 새로운 기능과 구문을 추상화 계층으로 추가했다.

참조

[1] 웹사이트 Hibernate - 6.6 series https://hibernate.or[...] 2024-12-11
[2] 웹사이트 Equals and HashCode https://community.jb[...] JBoss Community 2013-12-16
[3] 웹사이트 Hibernate User Guide: 2.5.5. Provide identifier attribute http://docs.jboss.or[...] JBoss Community
[4] 웹사이트 Hibernate 3.5.0-Final release http://in.relation.t[...] In Relation To... 2010-04-01
[5] 웹사이트 Releases - Hibernate ORM http://hibernate.org[...]
[6] 웹사이트 In Relation To... Hibernate ORM 4.1.9.Final Released http://in.relation.t[...] 2012-12-13
[7] 웹사이트 GC: Hibernate-core-4.2.0.Final.jar - GrepCode Java Project Source http://grepcode.com/[...] 2014-11-27
[8] 웹사이트 GC: Hibernate-core-4.3.0.Final.jar - GrepCode Java Project Source http://grepcode.com/[...] 2014-11-27
[9] 웹사이트 Releases - Hibernate ORM http://hibernate.org[...]
[10] 웹사이트 Hibernate ORM 6.1.4.Final released https://in.relation.[...] 2022-10-05
[11] 웹사이트 Hibernate JavaDocs https://docs.jboss.o[...]
[12] 웹사이트 Session (Hibernate JavaDocs) https://docs.jboss.o[...]
[13] 웹사이트 Hibernate: Relational Persistence for Java and .NET http://www.hibernate[...] JBoss Community
[14] 웹사이트 Hibernate ORM 4.1.0 Release http://in.relation.t[...] JBoss Community 2012-02-09
[15] 웹사이트 HIBERNATE - Relational Persistence for Idiomatic Java http://docs.jboss.or[...] JBoss Community
[16] 웹사이트 No more hibernate-annotations module http://in.relation.t[...] JBoss Community 2012-04-05
[17] 웹사이트 Hibernate Annotations http://docs.jboss.or[...] JBoss Community
[18] 웹사이트 hibernate-entitymanager merged into hibernate-core https://github.com/h[...] JBoss Community
[19] 웹사이트 Hibernate EntityManager http://docs.jboss.or[...] JBoss Community
[20] 웹사이트 Hibernate Envers – Easy Entity Auditing http://docs.jboss.or[...] JBoss Community
[21] 웹사이트 Hibernate OGM http://hibernate.org[...] JBoss Community
[22] 웹사이트 Hibernate Shards http://www.hibernate[...] JBoss Community
[23] 웹사이트 Hibernate Search http://www.hibernate[...] JBoss Community
[24] 웹사이트 Hibernate Tools for Eclipse and Ant http://www.hibernate[...] JBoss Community
[25] 웹사이트 Hibernate Validator http://www.hibernate[...] JBoss Community
[26] 웹사이트 Hibernate Metamodel Generator http://www.hibernate[...] JBoss Community
[27] 웹사이트 NHibernate http://nhforge.org/ NHibernate Forge 2011-04-26
[28] 웹사이트 Hibernate ORM 5.4.2.Final released http://in.relation.t[...] 2019-04-07
[29] 웹인용 Hibernate - 6.6 series https://hibernate.or[...] 2024-12-11



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com