-
영속성 컨텍스트spring/스프링 핵심 원리 강의 내용 정리 2024. 1. 23. 23:02
영속성 (persistence) : 영속성, 지속성
객체의 관점으로 해석해 보자면 '객체가 생명(객체가 유지되는 시간)이나 공간(객체의 위치)을 자유롭게
유지하고 이동할 수 있는 객체의 성질'을 의미한다.
- 영속성 컨텍스트를 좀 더 쉽게 표현해 보자면 Entity 객체를 효율적으로쉽게 관리하기 위해 만들어진 공간이다.
EntityManager
- 영속성 컨텍스트에 접근하여 Entity 객체들을 조작하기 위해서는 EntityManager가 필요하다.
- EntityManager는 이름 그대로 Entity를 관리하는 관리자이다.
- 개발자들은 EntityManager를 사용해서 Entity를 저장하고 조회하고 수정하고 삭제할 수 있다.
- EntityManager는 EntityManagerFactory를 통해 생성하여 사용할 수 있다.
EntityManagerFactory
- EntityManagerFactory는 일반적으로 DB 하나에 하나만 생성되어 애플리케이션이 동작하는 동안 사용된다.
- EntityManagerFactory를 만들기 위해서는 DB에 대한 정보를 전달해야 한다.
- 정보를 전달하기 위해서는 /resources/META_INF/ 위치에 persistence.xml 파일을 만들어 정보를 넣어두면 된다.
emf = Persistence의 createEntityManagerFactory()메서드를 통해 생성 (설정 정보의 이름과 동일해야 함)
em = EntityManagerFactory의 createEntityManager() 메서드를 통해서 생성
트랜잭션
- 트랜잭션은 DB 데이터들의 무결성과 정합성을 유지하기 위한 하나의 논리적 개념이다.
- 쉽게 표현하자면 DB의 데이터들을 안전하게 관리하기 위해서 생겨난 개념이다.
- 가장 큰 특징은 여러 개의 SQL이 하나의 트랜잭션에 포함될 수 있다는 점이다.
- 이 때, 모든 SQL이 성공적으로 수행되면 DB에 영구적으로 변경을 반영하지만, SQL 중 단 하나라도
실패한다면 모든 변경을 되돌린다.
JPA의 트랜잭션
- 영속성 컨텍스느에 Entity 객체들을 저장했다고 해서 DB에 바로 반영 되지는 않는다.
- DB에서 하나의 트랜잭션에 여러 개의 SQL을 포함하고 있다가 마지막에 영구적으로 변경을 반영하는 것 처럼,
JPA에서도 영속성 컨텍스트로 관리하고 있는 변경이 발생한 객체들의 정보를 쓰기 지연 저장소에 전부
가지고 있다가 마지막에 SQL을 한번에 DB에 요청해 변경을 반영한다.
- JPA에서 이러한 트랜잭션의 개념을 적용하기 위해서는 EntityManager에서 EntityTransaction을 가져와
트랜잭션을 적용할 수 있다.
- EntityTransaction et = em.getTransaction();
- 해당 코드를 호출하여 EntityTransaction(); 을 가져와 트랜잭션을 관리할 수 있다.
EntityManager 내부의 getTransaction() 이라는 매서드를 통해 EntityTransaction을 가져올 수 있다.
EntityTransaction et = em.getTransaction(); // EntityManager 에서 EntityTransaction 을 가져옵니다.
et.bigin() : 트랜잭션을 시작하는 명령어
db 작업~~ (persist, update, remove 등등...)
et.commit() : 트랜잭션의 작업들을 영구적으로 DB에 반영하는 명령어
et.rollback() : 오류가 발생했을 때 트랜잭션의 작업을 모두 취소하고, 이전 상태로 되돌리는 명령어'spring > 스프링 핵심 원리 강의 내용 정리' 카테고리의 다른 글
총 정리 (0) 2023.12.12 스코프와 프록시 (0) 2023.12.12 스코프와 Provider (0) 2023.12.12 request 스코프 예제 만들기 (0) 2023.12.12 웹 스코프 (0) 2023.12.12