Persistence Context란? (=영속성 컨텍스트)
주로 데이터베이스와 관련된 용어로 사용되며, 특히 JPA(Java Persistence API)에서 중요한 개념 일종의 중간 저장소/대기 공간 같은 개념으로 생각하면 될 듯 하다. 데이터를 바로 데이터베이스에 저장하는 것이 아니라, 이 중간 저장소(퍼시스트 컨텍스트)에 먼저 보관해두었다가, 적절한 시기에 데이터베이스에 저장하거나 갱신하는 방식. 이 과정을 통해 데이터 관리를 더 효율적이고 안정적으로 할 수 있다.
[ 그림 설명 ]
// PC = Persistence Context
퍼시스트 컨텍스트는 엔티티 객체만 들어갈 수 있다!!!!!
JPA에서는 엔티티의 생명주기 관리를 위해 '영속성 컨텍스트(Persistence Context)'라는 것을 사용한다. 영속성 컨텍스트는 엔티티를 영구 저장하는 환경을 의미하며, 여기서 '퍼시스트'는 엔티티를 영속성 컨텍스트에 저장(영속 상태 만들기)하는 작업!
[ 장점 ]
1차 캐시 기능을 통해 데이터베이스 접근 횟수를 줄이고, 동일성 보장, 트랜잭션을 지원하는 쓰기 지연, 지연 로딩, 변경 감지 등 여러 성능 최적화 기법을 제공
[ 영속 / 비영속 / 퍼시스트 컨텍스트 설명 ] ★
DB에 ISNERT할 때, Persistence Context에 쿼리문을 주는게 아니라 Board(Entity) 객체를 줌! 근데 PK키를 Board 객체로 만들어서 전달할 수는 없다! 때문에 PK키가 없는 객체를 전달해주는데, PK값이 없는 객체를 비영속 객체라고 함! (비영속 객체의 특징 - PK 값이 없으며, 아직 하드에 저장되지 않음) 이 PK가 없는 걸 Persistence Context가 받으면, "아, 이 객체에는 PK가 없구나. 내가 저장하라는 거구나!"라고 이해하고 처리한다. 그렇게 퍼시스트 컨텍스트가 INSERT 쿼리를 발동시켜 DB에 전달한다! 그러면 DB에는 아래와 같이 저장될 것!
1 | 제목1 | 내용1 | 날짜 -> DB에 들어갔다 나오면서 PK키가 생김
INSERT 쿼리를 개발자가 직접 날리는 것이 아니다! BoardRepository는 Board 객체를 전달하고, Persistence Context에서 쿼리를 발동시키는 것! 즉, 보드 객체는 (INSERT되기 전까지) 비영속 객체!! 그러나 INSERT가 되면 PK 값이 생성되고 동기화가 이루어짐!! -> 영속! BR이 어떤 메서드를 실행하면서 PC(Persistence Context)에 보드 객체를 던짐 -> 비영속 INSERT 쿼리가 DB에 (PK키도 함께) 저장될 것이고, 저장된 후에는 DB로부터 응답을 받게 된다. 이때 보드 객체는 영속 객체가 되며, 동기화가 이루어진다. (BR 입장에선 응답이 되면 연속화가 될 거니까, BR입장에서 BOARD는 이제 연속 객체가 됨)
영속 → 하드에 저장이 됨
Share article