본문 바로가기
Spring Boot

스프링부트+JPA - 7편 ( 영속성 컨텍스트 )

by SICDev 2021. 6. 2.
반응형

영속성은 5편에서 알아봤듯이 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성을 의미한다.
컨텍스트
는 그 해당 대상의 모든 것(?) 모든 정보(?)이다.


ORM에서 영속성컨텍스트는 무엇일까???

 

자바프로그램에서 DB에 어떤 데이터를 넣고 싶은데 그 데이터가 챔피언이라고 가정을 해보자!!

이 챔피언 데이터를 DB에 저장할 때 DB에 직접적으로 바로 저장하는 것이 아니라 중간에 영속성컨텍스트를 거치게 된다.

💡챔피언 데이터 ---> 영속성컨텍스트 - DB💡

 

영속성컨텍스트는 자바프로그램과 DB의 중간에 위치하고 있기 때문에..❗ 자바프로그램에서 DB로 왔다 갔다 하는 모든 정보를 영속성컨텍스트는 알고 있다❗❗

 

DB에 챔피언을 저장하기 위해서는
💡자바프로그램에서 영속성컨텍스트로 챔피언 데이터를 던진다❗

💡💡다시 영속성컨텍스트DB로 챔피언을 던지면 DB에 챔피언이 저장된다❗

 

그럼 지금 영속성컨텍스트에도 챔피언 데이터가 있고, DB에도 챔피언 데이터가 저장되어 있을 것이다.

이때 영속성컨텍스트에있는 챔피언 데이터를 삭제하고 다시 DB에 던지면(소위말하는 Flush)...❓❗

DB에 있는 챔피언 데이터가 삭제된다..❗😵😵

단순히 영속성컨텍스트에 있는 데이터만을 지웠는데도 DB의 데이터가 사라진다..❗🤔

영속성컨텍스트에 있는 데이터와 DB에 있는 데이터가 동기화가 된다는 것이다❗


또 다른 예를 들어 DB에 과일 데이터가 있다고 가정해보자❗

우리는 DB에 있는 과일을 가져오기 위해 SELECT문을 날릴 것이다.

 

SELECT요청을 하면 자바는 DB에 바로 접근을 하는 것이 아니라 영속성컨텍스트에게 과일을 요청한다❗

하지만 영속성컨텍스트에는 과일이 존재하지 않기 때문에 DB에게 과일을 요청한다❗

마지막으로 영속성컨텍스트에서 자바프로그램에게 과일 데이터를 전송한다❗

 

그럼 지금 자바프로그램과 영속성컨텍스트DB에 있는 과일 데이터는 모두 똑같은 데이터일 것이다❗
( 너무 당연..... )

이때 자바프로그램에있는 과일 데이터를 영화 데이터로 변경하게 되면...❗

영속성컨텍스트에 있는 과일 데이터도 같이 영화 데이터로 변경된다❗

 

이상태에서 DB에 Commit해서 영화 데이터를 밀어 넣으면 놀랍게도 INSERT가 아닌 UPDATE문이 실행된다🤔

현재 DB에 있는 과일 데이터와 영속성컨텍스트에 있는 영화 데이터는 분명 같은 데이터였는데 데이터가 달라져버렸기 때문에 UPDATE문이 자동으로 실행되게 된다😱

 

이런 과정들을 해주는 것이 영속성컨텍스트이다.

영속성컨텍스트는 DB에 저장하고, 데이터를 가져오고 하는 등 이 일련의 모든 정보를 가지고 있다💡

또한 이 영속성컨텍스트에서 일어나는 모든 과정은 다 자동으로 실행된다👍👍

 

 

 

 

 

출처

https://www.youtube.com/watch?v=XBG6CUtVCIg&list=PL93mKxaRDidG_OIfRQ4nztPQ13y74lCYg
반응형