DB

Java - DB 연결2: ORM

KJihun 2023. 6. 26. 15:51
728x90

ORM이란 객체와 관계형DB(RDBMS)의 데이터를 자동 매핑(연결)해주는 도구이다.
Java에서는 JPA, Hibernate이 있다.

RDBMS는 테이블 형태로 데이터를 저장하고 java는 객체라는 개념으로 데이터를 표현한다.

- JPA(Java Persistence API)
JPA는 인터페이스와 어노테이션을 정의하고, 이를 사용하여 객체와 테이블 간의 매핑 규칙을 정의한다.
이를 구현한 프레임워크(예: Hibernate)와 연결하여 사용한다

 

- Hibernate: 자바 프로그래밍 언어를 기반으로 한 오픈 소스 ORM(Object-Relational Mapping) 프레임워크
    - JPA에서 구현한 인터페이스와 어노테이션을 사용하여 ORM을 구현
    - 객체 지향적인 방식으로 DB(데이터)를 다룰 수 있다. 
    - Entity Manager를 통해 개발자가 객체를 DB에 CRUD 할 수 있도록 지원한다.
    - RDBMS - 객체 간 매핑을 XML 또는 어노테이션(annotation)을 사용하여 정의할 수 있다. 

 

Entity Manager Factory: Entity Manager를 생성하는 팩토리 객체.
일반적으로 DB 하나에 하나만 생성된다. 
DB와의 연결을 설정하고 Entity Manager를 생성하는 역할을 담당한다.
Entity Manager Factory를 생성하기 위해서는 DB에 대한 정보를 전달해야 한다
정보전달을 위해서는 /resources/META-INF 위치에 persistence.xml파일을 만들어 정보를 넣어두면 된다.

Entity Manager: JPA에서는 엔티티를 조작하기 위해 Entity Manager를 사용한다.

엔티티의 영속성 관리를 담당하며, 엔티티의 CRUD(Create, Read, Update, Delete) 작업을 수행한다.

영속성 컨텍스트와의 상호작용을 담당하며, 영속성 컨텍스트를 통해 엔티티의 영속성 관리를 수행한다.
EntityManager를 사용하여 엔티티를 수정 시, 영속성 컨텍스트가 상태 변화를 추적하고, 트랜잭션 커밋 시 해당 변경사항을 DB에 반영한다.

 

영속성 컨텍스트:  엔티티(Entity) 객체를 쉽게 관리할 수 있게 만들어진 논리적인 영역

Entity 영속화(persist)를 통하여 변경 감지(detach), 삭제(remove)와 DB와의 동기화를 담당한다.
영속성 컨텍스트는 Entity Manager를 생성할 때마다 생성되며, Entity Manager와 생명주기를 공유한다.

 

 

 

영속성 컨텍스트 주요기능 : 1차캐시, 쓰기 전 저장소, 변경감지

1. 1차 캐시: 영속성 컨텍스트는 Entity를 DB 조회시 해당 Entity를 영속성 컨텍스트 내의 1차 캐시에 저장한다.

동일한 Entity 조회시, 1차 캐시에서 찾아보고 없을 경우에만 DB에 요청한다

1차 캐시를 통해 DB와의 불필요한 연결을 피하고 성능을 향상시킬 수 있다.

2. 쓰기 전 저장소: 변경된 Entity는 쓰기 전 저장소에 보관되어 트랜잭션 커밋 시에 한 번에 DB에 적용시킨다(Atomicity)

3. 변경 감지: Entity의 필드 값이 변경되면 영속성 컨텍스트는 해당 변경 사항을 인지하고,

커밋 시에 변경된 Entity만 DB에 반영한다

이를 통해 효율적인 업데이트 쿼리를 생성하고 성능을 향상시킨다.

'DB' 카테고리의 다른 글

Java - DB 연결1: JDBC  (0) 2023.06.26
Python mongoDB Join 사용 코드  (0) 2023.06.09