완벽한 장면 2023. 2. 5. 11:13

JPA 동작 방식

 

엔티티 (Entity)

: 엔티티란 데이터베이스의 테이블에 대응하는 클래스이다. @Entity가 붙은 클래스는 JPA에서 관리하며 엔티티라고 한다. 

데이터베이스에 item 테이블을 만들고 이에 대응 되는 item 클래스를 만들어서 @Entity 어노테이션을 붙이면 이 클래스가 엔티티가 되는 것.

클래스 자체나 생성한 인스턴스도 엔티티라고 부른다.

 

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

: 엔티티 매니저 인스턴스를 관리하는 주체

- 애플리케이션 실행 시 한 개만 만들어지며 사용자로부터 요청이 오면 엔티티 매니저 팩토리로부터 엔티티 매니저를 생성한다.

 

엔티티 매니저 (Entity Manager)

: 영속성 컨텍스트에 접근하여 엔티티에 대한 데이터베이스 작업을 제공한다.

- 내부적으로 데이터베이스 커넥션을 사용해서 데이터베이스에 접근한다.

 

엔티티 매니저의 몇 가지 메소드들

1) find() 메소드 : 영속성 컨텍스트에서 엔티티를 검색하고 영속성 컨텍스트에 없을 경우 데이터베이스에서 데이터를 찾아 영속성 컨텍스트에 저장한다.

2) persist() 메소드 : 엔티티를 영속성 컨택스트에 저장한다.

3) remove() 메소드 : 엔티티 클래스를 영속성 컨텍스트에서 삭제한다.

4) flush() 메소드 : 영속성 컨텍스트에 저장된 내용을 데이터베이스에 반영한다.

 

영속성 컨텍스트

: 엔티티를 영구 저장하는 환경. 엔티티 매니저를 통해 영속성 컨텍스트에 접근한다.

엔티티 생명주기

 

엔티티 생명주기의 세부 내용

 

 

<예시> 상품 엔티티를 만들어서 영속성 컨텍스트에 저장한 후 데이터베이스에 반영하는 코드

Item item = new Item(); //1)
item setItemNm("테스트 상품");

EntityManager em = entityManagerFactory.createEntityManager(); //2)

EntityTransaction transaction = em.getTransaction(); //3)
transaction.begin();

em.persiste(item); // 4)

transaction.commit(); //5)

em.close(); // 6)
emf.close(); //7)
1) 영속성 컨텍스트에 저장할 상품 엔티티를 하나 생성한다.
   new 키워드를 통해 생성했으므로 영속성 컨텍스트와 관련이 없는 상태다
   
2) 엔티티 매니저 팩토리로부터 엔티티 매니저를 생성한다.

3) 엔티티 매니저는 데이터 변경 시 데이터의 무결성을 위해 반드시 트랜잭션을 시작해야 한다.
   여기서의 트랜잭션도 데이터베이스의 트랜젝션과 같은 의미이다.
   
4) 생성한 상품 엔티티가 영속성 컨텍스트에 저장된 상태이다.
// 여기까지는 데이터베이스에 Insert SQL을 보내지 않은 상태이다.

5) 트랜젝션을 데이터베이스에 반영한다.
   이 때 영속성 컨ㄴ텔스트에 저장된 상품 정보가 데이터베이스에 INSERT되면서 반영된다.

6), 7) 엔티티 매니저와 엔티티 매니저 팩토리의 close 메소드를 호출해 사용할 자원을 반영한다.

 

참고 : <쇼핑몰 프로젝트 with JPA> (변구훈 저)

728x90
반응형