본문 바로가기

Spring/Spring 공부

Hibernate 간단하게

Hibernate는 Java에서 JPA의 가장 널리 사용되는 구현체로, 관계형 데이터베이스와 객체지향 프로그래밍 간의 매핑을 지원하는 ORM(Object Relational Mapping) 프레임워크입니다. JPA는 인터페이스이기 때문에 실제 구현체가 필요하며, Hibernate는 JPA가 요구하는 기능을 포함하여 추가적인 기능을 제공하는 강력한 ORM 프레임워크입니다.

 

Hibernate의 주요 개념과 기능

 

  • ORM(Object Relational Mapping)
    • Hibernate는 객체지향 프로그래밍의 클래스와 데이터베이스의 테이블을 매핑해주는 기능을 제공합니다. 객체와 테이블을 매핑하면 개발자는 SQL 쿼리를 작성하지 않아도, 자바 코드로 데이터베이스 작업을 수행할 수 있습니다.
    • 예를 들어, 자바 객체의 필드를 데이터베이스의 컬럼과 매핑하고, 객체 간의 관계를 테이블 간의 관계로 나타냅니다.
  • Session과 SessionFactory
    • Hibernate에서는 데이터베이스와 상호작용하는 모든 작업이 Session 객체를 통해 이루어집니다. SessionFactory는 Session 객체를 생성하는 데 사용됩니다. Session은 특정 트랜잭션 컨텍스트에서 데이터베이스와의 연결을 관리합니다.
    • 일반적으로 애플리케이션이 시작될 때 한 번 SessionFactory를 생성하고, 데이터베이스 작업이 필요할 때마다 Session을 얻어 사용합니다.
  • 캐시(Caching)
    • Hibernate는 1차 캐시와 2차 캐시를 제공합니다. 1차 캐시는 Session 단위로 관리되어 동일한 Session 내에서는 같은 엔티티를 조회할 때 데이터베이스에 반복적으로 접근하지 않습니다. 2차 캐시는 SessionFactory 단위로 애플리케이션 전역에서 공유되며, 조회 성능을 크게 개선할 수 있습니다.
  • 지연 로딩(Lazy Loading)과 즉시 로딩(Eager Loading)
    • 지연 로딩은 연관된 엔티티를 실제로 필요할 때 조회하는 방식입니다. 반대로 즉시 로딩은 연관된 엔티티를 즉시 조회하는 방식입니다. Hibernate는 기본적으로 지연 로딩을 지원하며, 필요에 따라 즉시 로딩으로 변경할 수 있습니다.
    • 예를 들어, @OneToMany(fetch = FetchType.LAZY)와 같이 fetch 속성을 설정하여 로딩 방식을 지정할 수 있습니다.
  • 쿼리 언어 (HQL: Hibernate Query Language)
    • Hibernate는 HQL이라는 쿼리 언어를 제공합니다. HQL은 JPQL과 유사하며 SQL과 비슷한 문법을 사용하지만, 데이터베이스의 테이블이 아닌 자바 객체를 대상으로 쿼리를 작성할 수 있습니다.
String hql = "FROM User WHERE name = :name";
Query query = session.createQuery(hql);
query.setParameter("name", "John");
List<User> users = query.list();

 

  • 트랜잭션 관리
    • Hibernate는 트랜잭션을 통해 데이터의 일관성을 보장합니다. beginTransaction(), commit(), rollback() 메서드를 통해 트랜잭션을 관리할 수 있습니다. 보통 Spring과 함께 사용할 때는 @Transactional 어노테이션을 통해 트랜잭션 관리를 위임합니다.

장점

  • 생산성 향상: 객체와 관계형 데이터베이스 간의 매핑을 자동으로 관리하여 SQL 코드를 줄여주고, 개발자가 비즈니스 로직에 집중할 수 있도록 합니다.
  • 데이터베이스 독립성: Hibernate는 SQL을 추상화하여 데이터베이스에 종속되지 않으므로, 서로 다른 데이터베이스 간의 전환이 용이합니다.
  • 풍부한 기능: Hibernate는 다양한 캐시 전략, 고급 쿼리 기능, 복잡한 관계 매핑, 트랜잭션 관리 기능 등을 지원해 복잡한 애플리케이션을 효율적으로 개발할 수 있게 해줍니다.

Hibernate와 Spring Boot JPA의 관계

Spring Boot JPA는 Hibernate를 기본 구현체로 사용하여 JPA 기능을 제공하며, 개발자가 데이터베이스 연동 작업을 더욱 간편하게 할 수 있도록 돕습니다. Spring Boot JPA를 사용하면 Hibernate의 기능을 그대로 활용하면서, JPA의 표준 인터페이스로 코드를 작성할 수 있습니다.

'Spring > Spring 공부' 카테고리의 다른 글

@Qualifier  (0) 2025.03.18
POJO 클래스  (0) 2024.10.30
Lombok 정의와 어노테이션 기능 정리  (2) 2024.10.30
Swagger , http://localhost:8080/swagger-ui/ 404오류  (2) 2024.10.23
Jacoco  (1) 2024.10.23