영속성은 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
'Spring Boot' 카테고리의 다른 글
스프링부트+JPA - 9편 ( 소켓통신과 HTTP통신 ) (1) | 2021.08.23 |
---|---|
스프링부트+JPA - 8편 ( OOP관점에서의 모델링 ) (0) | 2021.08.20 |
스프링부트+JPA - 6편 ( ORM ) (0) | 2021.05.14 |
스프링부트+JPA - 5편 ( JPA ) (1) | 2021.05.03 |
스프링부트+JPA - 4편 ( BufferedReader, BufferedWrite ) (2) | 2021.04.26 |