기본 콘텐츠로 건너뛰기

라벨이 EntityManager인 게시물 표시

JPA EntityManager란 무엇인가: 영속성 컨텍스트와 엔티티 상태를 실무 흐름으로 이해하기

JPA EntityManager란 무엇인가: 영속성 컨텍스트와 엔티티 상태를 실무 흐름으로 이해하기 빠른 답 EntityManager의 핵심 역할은 DB에 바로 쓰는 것이 아니라 영속성 컨텍스트를 통해 엔티티 상태를 관리하는 데 있다. persist를 호출해도 INSERT가 즉시 나가지 않을 수 있으며, 실제 SQL 시점은 flush와 commit에 달려 있다. 1차 캐시와 변경 감지는 영속 상태의 엔티티에서만 기대한 대로 동작한다. merge, detach, clear를 무심코 쓰면 예상하지 못한 UPDATE 누락이나 중복 조회가 생길 수 있다. 목차 흐름으로 보기 왜 EntityManager를 영속성 컨텍스트로 이해해야 할까 영속성 컨텍스트와 EntityManager는 어떤 관계일까 엔티티 상태는 어떻게 바뀔까 Spring Boot에서 EntityManager와 트랜잭션은 어떻게 묶일까 persist, find, detach, remove, flush를 코드로 따라가 보기 merge가 특히 헷갈리는 이유 SQL 로그로 보면 동작이 더 선명해진다 실무에서 자주 놓치는 주의점 흐름으로 보기 실무에서는 이 여섯 단계를 머릿속에 두는 것만으로도 JPA 동작을 훨씬 예측하기 쉬워집니다. 객체를 만들었다고 바로 DB와 연결되는 것이 아니고, persist() 로 영속성 컨텍스트에 올린 뒤에야 관리가 시작됩니다. 이후 필드 변경은 메모리 안에서 추적되다가 flush() 나 commit 시점에 SQL로 반영됩니다. 마지막으로 detach() 는 관리 대상에서 분리하고, remove() 는 삭제 예정 상태로 바꿉니다. 왜 EntityManager를 영속성 컨텍스트로 이해해야 할까 EntityManager 를 메서드 모음으로만 보면 persist() 는 저장, find() 는 조회, remove() 는 삭제처럼 따로따로 보입니다. 하지만 실제로는 모두 영속성 컨텍스트를 조작하는 행위입니다. 예를 들어 find() 는 단순 조회가 아닙니다. 먼저 1차...