[TIL] JPA와 Hibernate, 그리고 Session Factory

ssook·2023년 9월 14일
0

TIL

목록 보기
6/17
post-thumbnail

📍 JPA (Jakarta Persistence API)

JPA는 자바 플랫폼에서 관계형 데이터베이스를 다루기 위한 자바 API.
JPA는 객체 관계 매핑(ORM)을 제공하며, 데이터베이스의 테이블과 자바 객체 간의 매핑을 쉽게 하게 만들어 줌.
JPA를 사용하면 개발자는 SQL 쿼리를 직접 작성하지 않고도 데이터베이스와 상호 작용할 수 있음.
JPA는 Java EE(이전에는 Java EE라고 불렸지만 Jakarta EE로 이름이 변경됨) 및 Java SE 응용 프로그램에서 사용할 수 있으며, 여러 구현체 중에서 가장 유명한 것 중 하나가 Hibernate임.

JPA에 대해 조금 더 상세하게 쓴 내 포스팅


📍 Hibernate

Hibernate는 JPA 스펙의 구현체 중 하나로,
JPA를 사용하여 데이터베이스와 상호 작용할 수 있는 라이브러리임.
Hibernate는 자바 객체와 데이터베이스 레코드 간의 매핑 및 데이터베이스 관련 작업을 단순화하고, 개발자가 데이터베이스에 대한 저수준 작업을 처리하지 않도록 도와줌. Hibernate는 데이터베이스와 상호 작용할 때 객체 지향 프로그래밍의 개념을 유지하면서 SQL 쿼리 생성 및 실행, 트랜잭션 관리 등을 자동화함.

JPA 스펙의 구현체이기 때문에, 아래와 같은 방식으로 작동함.

  • JPA 스펙 준수: Hibernate는 JPA 스펙에 따라 개발되어 있으며, JPA 스펙에 정의된 인터페이스와 클래스를 구현함. 이것은 Hibernate를 JPA와 호환 가능하게 만듦. 따라서 Hibernate를 사용하면 JPA 스펙을 따르는 방식으로 데이터베이스와 상호 작용할 수 있음.

  • JPA 애노테이션 사용: Hibernate는 JPA 애노테이션을 사용하여 자바 클래스와 데이터베이스 스키마 간의 매핑을 정의함. 예를 들어,

@Entity, @Table, @Column

등의 JPA 애노테이션을 사용하여 객체와 데이터베이스 테이블 간의 매핑을 지정할 수 있음.

  • EntityManager 인터페이스: Hibernate는 JPA의 핵심 인터페이스 중 하나인 EntityManager를 구현하여 데이터베이스 트랜잭션 관리, 엔티티의 CRUD(Create, Read, Update, Delete) 작업 등을 처리함. 개발자는 EntityManager를 사용하여 엔티티를 영구 저장소(예: 데이터베이스)에 저장하거나 검색할 수 있음.

  • JPQL (Java Persistence Query Language): Hibernate는 JPA의 쿼리 언어인 JPQL을 지원함. JPQL은 객체 지향적인 방식으로 데이터베이스 쿼리를 작성할 수 있게 해주며, Hibernate는 JPQL 쿼리를 SQL 쿼리로 변환하여 실행함.

  • 트랜잭션 관리: Hibernate는 JPA의 트랜잭션 관리를 따름. 스프링과 함께 사용할 때 스프링의 트랜잭션 관리와 통합하여 사용할 수 있음.


📍 Spring Session Factory

🌸 Spring Session Factory

Spring Framework에서 Session Factory는 Hibernate와 같은 ORM(Object-Relational Mapping) 프레임워크와 통합하여 데이터베이스와의 상호 작용을 관리하는 데 사용됨.
Spring 애플리케이션에서는 Spring Session Factory를 설정하고 이를 통해 데이터베이스 작업을 처리할 수 있음. Spring은 이러한 기능을 제공하므로 Hibernate와의 통합이 편리하게 이루어짐.

Spring Session Factory 설정은 다음과 같이 구성됨:

  1. DataSource: Spring 애플리케이션에서 사용할 데이터베이스 연결을 정의. DataSource는 데이터베이스 연결 정보를 포함하고 데이터베이스 풀링을 관리함.

  2. Hibernate Properties: Hibernate의 설정을 정의함. 데이터베이스 유형, 연결 정보, 데이터베이스 Dialect 등을 설정함.

  3. Entity Manager Factory: Hibernate Session Factory를 생성하는 데 사용함. Hibernate와 Spring의 통합을 위해 사용됨.

  4. Transaction Manager: Spring의 트랜잭션 관리를 지원하기 위해 사용함. 데이터베이스 작업을 트랜잭션으로 묶어 안전하게 처리함.

🌸 Hibernate Session Factory

Hibernate의 Session Factory는 Hibernate의 핵심 구성 요소 중 하나로, Hibernate를 사용하여 데이터베이스와 상호 작용할 때 사용함. Hibernate Session Factory는 다음과 같은 역할을 함:

1. 세션 생성: Hibernate의 Session 객체를 생성함.
각 세션은 데이터베이스 연결과 관련된 작업을 수행함.
개발자는 세션을 사용하여 객체를 데이터베이스에 저장하고 검색하며, 세션은 이러한 작업을 추상화하고 관리함.

2. 캐싱 관리: 세션 팩토리는 쿼리 결과나 객체 상태를 캐시하는 데 사용됨. 이렇게 함으로써 성능 향상 가능.

3. 트랜잭션 관리: 세션 팩토리는 트랜잭션 관리를 지원하며, 데이터베이스 작업을 트랜잭션으로 묶어 롤백 또는 커밋할 수 있게 만듦.

🌸 Session Factory의 개념

Session Factory는 ORM 프레임워크에서 매우 중요한 개념으로,
이는 애플리케이션의 생명주기 동안 한 번만 생성되며, 데이터베이스와의 세션(Session)을 생성하고 관리하는 역할을 수행함.
세션(Session)은 개별적인 데이터베이스 작업을 수행하고, 데이터베이스와의 연결을 관리하는 데 사용됨.
Session Factory는 이러한 세션을 생성하고 효율적으로 관리하여 애플리케이션의 성능을 최적화함.


Session Factory는 Hibernate와 연동하여 데이터베이스와의 상호 작용을 담당하는 중요한 구성 요소 중 하나임.
Spring Session Factory는 Hibernate의 Session Factory를 래핑하고 스프링 애플리케이션과 통합하기 위해 사용됨.
Spring 애플리케이션에서 데이터베이스 작업을 수행할 때 Spring Session Factory를 사용하면 Hibernate의 기능과 스프링의 트랜잭션 관리 및 의존성 주입 기능을 효과적으로 결합할 수 있음.

Spring Session Factory를 설정하려면
1. 스프링의 설정 파일(XML 또는 Java Config)에서 Hibernate의 Session Factory 빈을 정의하고, 데이터베이스 연결 정보, 하이버네이트 설정 등을 구성함.
이렇게 설정된
2. Spring Session Factory를 사용하여 데이터베이스 작업을 수행할 수 있으며, 스프링의 트랜잭션 관리와 함께 데이터베이스 작업을 안전하게 처리할 수 있음.

profile
개발자에서, IT Business 담당자로. BrSE 업무를 수행하고 있습니다.

0개의 댓글

관련 채용 정보