• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

영속성 컨택스트에 대한 이해

22.09.08 18:40 작성 조회수 211

1

안녕하세요, 고생많으십니다.

혼자 독학하는 입장에서, 제가 정확히 이 영속성 컨텍스트를 이해한것이 맞는지 확인차 질문 남겨봅니다.

먼저, entitymanager를 사용하기 위해서는 tx안에서만 사용 가능하며 tx 안에서 em을 통해 entity 객체를 관리 하면서 만들어지는 가상 공간, 즉 1차 캐시가 영속성 컨텍스트라고 이해했습니다.

entity manager를 통해 persist나 find등의 메소드를 통해서 managed 상태로 entity객체를 만들어 주면,

  1. 1차 캐시에 저장하게 되고,

  2. 해당 메소드에 따른 sql문이 쓰기 지연 sql 저장소에 쌓이게 되며,

  3. tx.commit()이 호출되어 tx가 커밋되는 시점에 flush()가 자동 호출되어,

  4. flash()시 snapshot과 현재 entity 객체 상태를 비교를 통해 다르면 update query가 쓰기 지연 저장소에 쌓이게 되고,

  5. db에 반영이 되고난 후, tx이 커밋되어( tx가 닫힘)걸로 이해했습니다.

궁금한것이

  1. 제가 정확하게 이해한것이 맞는지 궁금하며

  2. 영속성 컨텍스트(1차 cache)에 있는 엔티티에 대한 정보는 준영속 상태일때에만 삭제되었다고 할수 있는지 궁금합니다.

답변 2

·

답변을 작성해보세요.

1

황준호님의 프로필

황준호

질문자

2022.09.09

감사합니다!!

1

y2gcoder님의 프로필

y2gcoder

2022.09.09

안녕하세요. Ju no님, 공식 서포터즈 y2gcoder입니다.

1번 2번 질문 전부 Ju no님이 말씀하신 게 맞습니다. 아시겠지만 혹시나 해서 몇 가지 첨언을 드립니다.

  1. 영속성 컨텍스트가 1차캐시 자체는 아닙니다. 영속성 컨텍스트 안에 1차 캐시가 존재한다고 이해해주시면 좋을 것 같습니다.

  2. 영속성 상태는 영속, 준영속, 비영속, 삭제 상태가 존재합니다. 정확히 말씀드리자면 영속성 컨텍스트 내의 1차 캐시 내에 있는 엔티티 정보는 영속 상태가 아닐 경우에는 1차 캐시에서 지워진다고 보시면 될 것 같습니다.


감사합니다.