Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
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
Tags
more
Archives
Today
Total
관리 메뉴

햄발

Blog 프로젝트 만들기(JPA) - 엔티티 매니저 본문

Spring boot

Blog 프로젝트 만들기(JPA) - 엔티티 매니저

햄발자 2024. 10. 1. 10:07

 

학습목표

 

JPA 와 하이버네이트에 대한 기본개념을 확인했다면 , 다음으로 엔티티 매니저와 영속성 컨텍스트에 대한 개념을 알아보자  !

 

 

학습 키워드 정리 

 

엔티티(Entity)

데이터베이스 테이블과 맵핑되는 자바 클래스 입니다.

 

엔티티 매니저(Entity Manager)

엔티티의 생명주기를 관리하며, CRUD 작업을 수행합니다.

 

엔티티 매니저 팩토리(Entity Manager Factory)

엔티티 매니저를 생성하는 팩토리로, 스프링부트 애플리케이션에서 한번만 생성됩니다.

 

 

코드상에서의 엔티티 선언 형태

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private String email;

    // 기본 생성자
    public User() {}

    // 생성자
    public User(String name, String email) {
        this.name = name;
        this.email = email;
    }
    
}

 

 

엔티티(Entity)

 

데이터베이스의 테이블과 맵핑되는 자바 객체이므로 일반 객체와 다르진 않지만 , 테이블과 직접 연결된다는 특징이 있어서 일반 객체와 구분하여 부릅니다.

 

즉, 엔티티는 자바 객체이면서도 데이터베이스의 쿼리문을 실행하여 데이터를 저장, 조회 , 수정, 삭제 하는 역할을 합니다.

 

이는 엔티티가 단순한 데이터 모델을 넘어, 데이터베이스와의 상호작용에서  중요한 역할을 한다는 점에서 중요합니다.

  • 엔티티는 JPA 에서 데이터베이스 테이블에 맵핑되는 자바 클래스입니다. 즉, 엔티티는 데이터베이스의 레코드와 직접적으로 연결되어있으며, 이 클래스의 인스턴스는 데이터베이스 테이블의 행(row)에 해당합니다.
  • 엔티티 클래스는 @Entity 어노테이션을 사용하여 정의할수있으며, 각 클래스 필드는 데이터베이스 테이블 열(column) 에 맵핑됩니다.
  • 예를들어, User 클래스의 데이터베이스의 users 테이블에 맵핑될 수 있으며, id, name,email 필드는 각각  id, name , email 열에 대응됩니다.

 


엔티티 매니저(Entity Manager)

  • 엔티티 매니저는 JPA 의 핵심 인터페이스로 , 엔티티의 생명주기(lifecycle) 을 관리하는 역할을 합니다
  • 엔티티 매니저를 통해 데이터베이스에 대한 CRUD 작업을 수행할 수 있습니다.
  • 엔티티 매니저는  persist, find, remove, merge 등의 메서드를 제공하여 엔티티 객체를 데이터베이스에 저장하거나 조회, 삭제할 수 있습니다.
  • 엔티티 매니저는 일반적으로 개발자가 직접 인스턴스화 하지않고 , 스프링부트와 같은 프레임워크에서 DI(Dependency Injection) 방식으로 주입받아 사용합니다.

 

@Autowired
private EntityManager entityManager;

public User findUser(Long id) {
    return entityManager.find(User.class, id);
}

public void saveUser(User user) {
    entityManager.persist(user);
}

 

 

 

동작원리

 

엔티티 매니저는 특정 영속성 컨텍스트(Persistence Context) 와 연결되어있으며, 이 컨텍스트 내에서 엔티티 객체를 관리합니다.

 

영속성 컨텍스트는 엔티티 객체의 상태를 추적하고, 필요에 따라 데이터베이스와 동기화합니다.

 

 


 

엔티티 매니저 팩토리 (Entity Manager Factory)

  • 엔티티매니저 팩토리는 엔티티 매니저를 생성하는 책임을 가진 객체입니다.
  • 스프링부트 애플리케이션에서 엔티티 매니저를 필요로 할때 , 엔티티 매니저 팩토리가 이를 생성하여 제공하게됩니다.
  • 엔티티 매니저 팩토리는 애플리케이션에서 한번만 생성되며, 이를통해  여러 엔티티 매니저 인스턴스를 생성할 수 있습니다. 이 팩토리는 데이터 베이스와의 연결정보를 가지고있으며, 영속성 유닛( Persistence Unit) 이라고 불리는 설정 단위를 기반으로 엔티티 매니저를 관리합니다.

동작원리

 

스프링부트는 애플리케이션이 시작될때 엔티티 매니저 팩토리를 자동으로 구성하고, 필요한 영속성 유닛을 설정합니다. 
이 과정에서 데이터베이스 연결정보, 캐싱설정, 트랜잭션 관리 등 다양한 설정이 적용됩니다.