Spring & Spring boot

[Spring Boot] JPA - 2. Entity

jh4dev 2024. 7. 25. 16:52
<목차>

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에서 동일한 방식으로 사용할 수 있다.
    • EntityPersistence Context를 통해 DB와 상호작용하며, Entity Manager를 사용하여 EntityPersistence 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를 반환하여 데이터의 일관성을 유지한다.

이러한 Entity Manager는 JPA 기반 애플리케이션에서 DB와의 상호작용을 추상화하고, Entity의 생명주기를 관리하는 핵심 역할을 한다. 

이를 통해 개발자는 DB작업을 객체지향적으로 처리할 수 있어지며, 트랜잭션 관리와 캐싱을 통해 애플리케이션의 성능과 데이터 일관성을 향상시킬 수 있도록 해준다.


 

[Persistence Context]

포스팅 내내 계속해서 언급되고 있는 Persistence Context (영속성 컨텍스트) 에 대해 알아보자.

 

Persistence Context(영속성 컨텍스트) 는 애플리케이션과 DB사이에서 Entity와 DB Record 사이의 상호작용을 처리하는데 중요한 역할을 한다.

Persistence ContextEntity Manager에 의해 관리되며, Entity 객체를 캐싱하고, 수정 사항을 추적하고, DB 와 동기화하는 역할을 수행한다.

 

  • Persistence Context 의 특징
    • 1차 캐시
      • Persistence Context 는 Entity 객체를 1차 캐시에 저장한다.
        이는 DB 접근을 최소화하고 성능을 향상시키며 동일한 트랜잭션 내에서 객체의 일관성을 보장한다.
      • 다만, Persistence Context 에 많은 Entity 객체가 저장될 경우, 메모리 사용 증가에 대한 이슈가 발생할 수 있다.
    • 세션 단위의 생명주기를 가진다.
      • DB에 접근하기 위한 세션이 생성되면, Persistence Context 가 만들어지고, 세션이 종료되면 Persistence Context 또한 없어진다. (By. Entity Manager)
    • Entity 의 생명주기를 관리한다.
    • Entity 객체의 변화를 자동으로 감지하며, 트랜잭션이 commit 될 때, 변경된 Entity 의 상태가 DB에 반영된다.

엔티티 매니저는 영속성 컨텍스트를 관리하며, 이를 통해 엔티티 객체의 생명주기를 관리하고, 데이터베이스 작업을 수행합니다. 이 두 개념의 긴밀한 연계를 통해 JPA는 객체 지향적인 데이터 접근과 관리를 제공한다.

 

 


[참고 도서]

 

<스프링 부트 핵심 가이드>
저자 : 장정우

출판사 : 위키북스