<목차>
1. Entity 엔티티
2. Entity Manager 엔티티 매니저
3. Persistence Context 영속성 컨텍스트
[Entity]
Entity(엔티티)는 ORM 의 핵심 개념으로, DB 테이블과 매핑되는 JAVA 클래스 이다.
객체 지향적인 방식으로 DB를 다룰 수 있게 해주며, 객체지향 프로그래밍의 장점을 사용할 수 있게 한다.
- Entity 의 특징
- Entity는 DB 테이블과 매핑되며, Entity Class의 각 Field는 DB 테이블의 Column에 해당한다.
- 하나의 Entity Instance는 DB 테이블의 레코드(Row)에 해당한다.
- Entity는 DB에서 고유하게 식별할 수 있는 식별자를 가지며, DB 테이블의 PK(Primary Key)에 해당한다.
- 특정 DB에 종속되지 않고, 다양한 DB에서 동일한 방식으로 사용할 수 있다.
- Entity는 Persistence Context를 통해 DB와 상호작용하며, Entity Manager를 사용하여 Entity를 Persistence Context 에 추가/조회/갱신/삭제 할 수 있다.
- Entity 생명주기
- Entity 생명주기는 Persistence Context 가 관리하며, Entity Manager 를 통해 Persistence Context에 접근하여 Entity 생명주기를 제어한다.
- 비영속 (Transient)
- Persistence Context 와 관계 없는 상태로, 새로 생성된 Entity Instance 가 해당한다.
- 영속 (Managed)
- Persistence Context 에 의해 관리되는 상태로, Entity 의 변경 사항이 자동으로 감지되고 트랜잭션이 커밋될 때, DB에 반영된다.
- 준영속 (Detached)
- Persistence Context 에 의해 더 이상 관리되지 않는 상태
- 삭제 (Removed)
- DB에서 레코드를 삭제하기 위해 Persistence Context 에 삭제 요청을 한 상태.
스프링 부트에서 실제 Entity 를 생성하고 관리하는 내용은 추후 다루도록 하겠다.
[Entity Manager]
위 Entity 의 특징에 대한 설명에, "Entity Manager를 사용하여 Entity를 Persistence Context 에 추가/조회/갱신/삭제 할 수 있다." 는 내용이 있다.
그렇다면 Entity Manager와 Persistence Context는 무엇인가??
Entity Manager (엔티티 매니저)는 엔티티를 관리하는 객체로, Entity 와 DB 간의 상호작용을 처리한다.
Entity Manager는 Persistence Context를 통해 Entity 객체의 생명주기를 관리하며, 애플리케이션에서 DB 접근을 추상화한다.
- Entity Manager의 기능
- CRUD 작업
- C : Entity를 Persistence Context에 추가하고 DB에 저장한다.
- R : DB에서 Entity 를 조회한다.
- U : Persistence Context 에서 관리하는 Entity 의 변경사항을 DB에 반영한다.
- D : Persistence Context와 DB에서 Entity 를 삭제한다.
- Entity 생명주기 관리
- Entity 를 비영속 상태에서 영속 상태로 전환하거나, 영속 상태에서 준영속 상태로 전환한다.
- Execute Query
- JPQL (Java Persistence Query Language) 또는 네이티브 SQL을 실행하여 DB와 상호작용 한다.
- 트랜잭션 관리
- 캐시 관리
- Entity Manager는 Persistence Context를 통해 Entity 객체를 캐싱하고, DB접근을 최소화 한다.
- 동일한 트랜잭션 내에서는 동일한 Entity Instance를 반환하여 데이터의 일관성을 유지한다.
- CRUD 작업
이러한 Entity Manager는 JPA 기반 애플리케이션에서 DB와의 상호작용을 추상화하고, Entity의 생명주기를 관리하는 핵심 역할을 한다.
이를 통해 개발자는 DB작업을 객체지향적으로 처리할 수 있어지며, 트랜잭션 관리와 캐싱을 통해 애플리케이션의 성능과 데이터 일관성을 향상시킬 수 있도록 해준다.
[Persistence Context]
포스팅 내내 계속해서 언급되고 있는 Persistence Context (영속성 컨텍스트) 에 대해 알아보자.
Persistence Context(영속성 컨텍스트) 는 애플리케이션과 DB사이에서 Entity와 DB Record 사이의 상호작용을 처리하는데 중요한 역할을 한다.
이 Persistence Context 는 Entity Manager에 의해 관리되며, Entity 객체를 캐싱하고, 수정 사항을 추적하고, DB 와 동기화하는 역할을 수행한다.
- Persistence Context 의 특징
- 1차 캐시
- Persistence Context 는 Entity 객체를 1차 캐시에 저장한다.
이는 DB 접근을 최소화하고 성능을 향상시키며 동일한 트랜잭션 내에서 객체의 일관성을 보장한다. - 다만, Persistence Context 에 많은 Entity 객체가 저장될 경우, 메모리 사용 증가에 대한 이슈가 발생할 수 있다.
- Persistence Context 는 Entity 객체를 1차 캐시에 저장한다.
- 세션 단위의 생명주기를 가진다.
- DB에 접근하기 위한 세션이 생성되면, Persistence Context 가 만들어지고, 세션이 종료되면 Persistence Context 또한 없어진다. (By. Entity Manager)
- Entity 의 생명주기를 관리한다.
- Entity 객체의 변화를 자동으로 감지하며, 트랜잭션이 commit 될 때, 변경된 Entity 의 상태가 DB에 반영된다.
- 1차 캐시
엔티티 매니저는 영속성 컨텍스트를 관리하며, 이를 통해 엔티티 객체의 생명주기를 관리하고, 데이터베이스 작업을 수행합니다. 이 두 개념의 긴밀한 연계를 통해 JPA는 객체 지향적인 데이터 접근과 관리를 제공한다.
[참고 도서]

<스프링 부트 핵심 가이드>
저자 : 장정우
출판사 : 위키북스
'Spring & Spring boot' 카테고리의 다른 글
[Spring Boot] JPA - 4. CRUD Example (0) | 2024.08.04 |
---|---|
[Spring Boot] JPA - 3. Entity & Repository (0) | 2024.07.26 |
[Spring Boot] JPA - 1. ORM 과 JPA (0) | 2024.07.25 |
[Spring Boot] Rest Controller - 6. HttpEntity (1) | 2024.07.24 |
[Spring Boot] Rest Controller - 5. DELETE (1) | 2024.07.24 |