| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- 스프링 스프링부트 차이점 공통점
- C# Blazor
- jvm구성요소
- 스프링부트의 장단점
- 프론트엔드
- CS
- 스프링부트 장점
- nosql
- prosys opc-ua
- OPC-UA
- 컴퓨터과학
- 스프링부트 단점
- spring spring boot 차이점 공통점
- 스프링부트회원가입
- java란?
- 기술면접
- UaExpert다운로드
- Blazor WebAssembly
- Service Worker
- C#이론
- Prosys Opc-ua 다운로드
- opc-ua 다운로드
- OPC-UA Download
- cs기술면접
- C# CS
- UaExpert download
- Blazor Web App
- REST API
- java란 무엇인가
- 스프링부트로그인
- Today
- Total
담비의 개발블로그
[DB]EntityManager(엔티티매니저) 본문
엔티티매니저
주로 Java Persistence API (JPA)에서 사용되는 인터페이스로, 엔티티(Entity)와 데이터베이스 간의 상호작용을 관리하는 역할을 한다.
◆ 주요 기능
1. CRUD 작업: 엔티티를 데이터베이스에 저장(Create), 조회(Read), 수정(Update), 삭제(Delete)하는 작업을 관리한다.
- Persist(저장): 새로운 엔티티를 데이터베이스에 저장한다. 이 과정에서 엔티티는 비영속 상태에서 영속 상태로 전환된다.
- Find(조회): 데이터베이스에서 특정 엔티티를 조회한다. 만약 해당 엔티티가 이미 영속성 컨텍스트에 존재하면, 캐시된 엔티티를 반환한다.
- Merge(수정): 준영속 상태의 엔티티를 영속 상태로 다시 병합한다. 이 작업은 보통 수정된 엔티티를 데이터베이스에 반영할 때 사용된다.
- Remove(삭제): 엔티티를 삭제 상태로 전환하여, 데이터베이스에서 삭제한다.
2. 쿼리 실행: JPQL(Java Persistence Query Language)이나 네이티브 SQL 쿼리를 실행하여 데이터베이스에서 데이터를 조회할 수 있다.
3. 트랜잭션 관리: 트랜잭션을 관리하여 데이터의 일관성을 보장한다. 트랜잭션은 여러 데이터베이스 작업을 하나의 단위로 묶어, 모두 성공하거나 모두 실패하도록 보장하는 기법이다.
- begin: 트랜잭션을 시작한다.
- commit: 트랜잭션을 커밋하여, 데이터베이스에 모든 변경 사항을 반영한다.
- rollback: 트랜잭션을 롤백하여, 모든 변경 사항을 취소한다.
https://dambi1224.tistory.com/62
[Spring Boot]@Transactional에 대해 알아보자!
@Transactional이란? 데이터베이스 작업의 단위로, 일련의 작업이 모두 성공하거나 모두 실패하도록 보장하는 메커니즘이다. 데이터 무결성을 보장하고, 복잡한 데이터베이스 트랜잭션 관리 코드
dambi1224.tistory.com
4. 캐싱: 1차 캐시(엔티티매니저 수준에서 유지되는 캐시)를 통해 동일한 트랜잭션 내에서 동일한 엔티티에 대한 중복 쿼리를 방지한다.
https://dambi1224.tistory.com/63
[JPA]1차캐시/2차캐시
네트워크를 통해 DB에 접근하는 시간 비용은 애플리케이션 서버에서 내부 메모리에 접근하는 비용보다 훨씬 비싸다.따라서 조회한 데이터를 메모리에 캐시해서 DB접근횟수를 줄이는 것이 효율
dambi1224.tistory.com
5. 생명주기관리 : 엔티티의 생명주기를 관리한다. 엔티티는 비영속(new), 영속(managed), 준영속(detached), 삭제(removed) 등의 상태로 관리되며, 엔티티매니저는 이 상태들을 전환하는 역할을 한다.
- 비영속 상태: 엔티티가 아직 데이터베이스와 연결되지 않은 상태이다.
- 영속 상태: 엔티티가 데이터베이스와 연결되어, 엔티티매니저에 의해 관리되는 상태이다. 이 상태에서는 엔티티의 변경 사항이 자동으로 데이터베이스에 반영된다.
- 준영속 상태: 엔티티가 데이터베이스와 연결이 끊어진 상태로, 더 이상 엔티티매니저에 의해 관리되지 않는다.
- 삭제 상태: 엔티티가 데이터베이스에서 삭제될 예정인 상태이다.
6. 영속성 컨텍스트 관리 : 영속성 컨텍스트는 엔티티매니저가 관리하는 모든 엔티티 객체를 저장하는 메모리 상의 가상 공간이다. 영속성 컨텍스트를 통해 엔티티 객체들은 데이터베이스와의 동기화 상태를 유지하며, 이 상태에서 변경된 엔티티들은 자동으로 감지되어 데이터베이스에 반영한다.
https://dambi1224.tistory.com/77
엔티티 매니저 팩토리
데이터베이스를 하나만 사용하는 애플리케이션은 일반적으로 엔티티 매니저 팩토리를 하나만 생성한다. 엔티티 매니저 팩토리는 이름 그대로 엔티티 매니저를 만드는 공장인데, 공장을 만드는 비용은 상당히 크다. 따라서 한 개만 만들어서 애플리케이션 전체에 공유하도록 설계되어 있다. 반면에 공장에서 엔티티 매니저를 생성하는 비용은 거의 들지 않는다.
◆ 주요 기능
1. 엔티티매니저 생성
- 엔티티매니저팩토리의 주요 역할은 엔티티매니저를 생성하는 것이다. 애플리케이션에서 데이터베이스와 상호작용하기 위해서는 엔티티매니저가 필요하며, 이 엔티티매니저는 엔티티매니저팩토리를 통해 생성된다.
- createEntityManager() 메서드를 호출하여 엔티티매니저를 생성할 수 있다.
EntityManagerFactory emf = Persistence.createEntityManagerFactory("my-persistence-unit");
EntityManager em = emf.createEntityManager();
2. 영속성 유닛 설정 관리
- 엔티티매니저팩토리는 영속성 유닛(Persistence Unit)과 관련된 설정 정보를 관리한다. 영속성 유닛은 애플리케이션에서 JPA를 통해 관리하는 모든 엔티티 클래스와 데이터베이스 연결 정보 등을 포함하는 논리적인 단위이다.
- 영속성 유닛의 설정은 주로 persistence.xml 파일에 정의되며, 엔티티매니저팩토리는 이 설정을 바탕으로 엔티티매니저를 올바르게 초기화하고 구성한다.
3. 데이터베이스 연결 관리
- 엔티티매니저팩토리는 애플리케이션이 사용하는 데이터베이스 연결을 관리한다. 이를 통해 데이터베이스 연결 설정을 재사용하고, 필요에 따라 여러 엔티티매니저에 동일한 연결을 공유할 수 있다. 또한, 여러 데이터베이스 연결을 사용하는 경우, 각각의 영속성 유닛에 대해 별도의 엔티티매니저팩토리를 생성할 수 있다.
4. 캐싱과 성능 최적화
- 엔티티매니저팩토리는 2차 캐시를 관리하여, 데이터베이스 접근을 최적화할 수 있다. 2차 캐시는 애플리케이션의 전체 생명주기 동안 유지되며, 동일한 데이터를 여러 번 조회할 때 성능을 향상시킨다.이는 영속성 유닛 수준에서 관리되며, persistence.xml 파일을 통해 구성할 수 있다.
5. 리소스 관리
- 엔티티매니저팩토리는 애플리케이션 종료 시점에 모든 리소스를 적절하게 해제해야 한다. 이는 close() 메서드를 호출하여 이루어지며, 엔티티매니저팩토리가 관리하는 데이터베이스 연결, 캐시 등을 안전하게 종료한다.
emf.close();
◆ 엔티티매니저팩토리의 생명주기
1. 생성
엔티티매니저팩토리는 보통 애플리케이션 시작 시점에 생성된다. Persistence.createEntityManagerFactory(String persistenceUnitName) 메서드를 사용하여 생성하며, persistenceUnitName은 persistence.xml 파일에서 정의된 영속성 유닛의 이름을 나타낸다.
2. 재사용
애플리케이션의 전체 수명 동안 엔티티매니저팩토리는 계속해서 재사용된다. 여러 개의 엔티티매니저를 생성하는 데 사용되며, 각 엔티티매니저는 독립적인 데이터베이스 작업을 수행한다.
3. 종료
애플리케이션이 종료되거나 더 이상 엔티티매니저팩토리를 사용하지 않을 때, close() 메서드를 호출하여 모든 리소스를 해제해야 한다. 이를 통해 데이터베이스 연결이 안전하게 종료되고, 캐시 등 다른 리소스가 해제된다.
'DataBase' 카테고리의 다른 글
| PostgreSQL (0) | 2025.07.05 |
|---|---|
| [DB]JPA - QueryDSL란 (1) | 2024.09.05 |
| [DB]Persistence Context(영속성 컨텍스트) (0) | 2024.09.02 |
| [DataBase]Hibernate란? (0) | 2024.08.09 |
| [MariaDB]member테이블 관련 알아두면 좋을 내용 (0) | 2024.06.20 |