Open Session In View: 하이버네이트Open EntityManager In View: JPA→ 관례상 둘다 OSIV 라고 한다. spring.jpa.open-in-view: true (기본 default 값) OSIV 전략은 트랜잭션 시작처럼 최초 데이터베이스 커넥션 시작 시점부터 API응답이 끝날 때 까지 영속성 컨텍스트와 데이터베이스 커넥션을 유지한다. 그래서 View Template 혹은 API컨트롤러에서 지연 로딩이 가능하다. 지연 로딩은 영속성 컨텍스트가 살아있어야 가능하고, 영속성 컨텍스트는 기본적으로 데이터베이스 커넥션을 유지한다. 주의할점은 OSIV 전략이 너무 오랜시간동안 데이터베이스 커넥션 리소스를 사용하기 때문에, 실시간 트래픽이 중요한 애플리케이션에서는 커텍션이 모..
JPA에서 가장 중요한 2가지 객체와 관계형 데이터 베이스 매핑 (Object Relational Mapping)영속성 컨텍스트웹 어플리케이션 개발시 EntityManager Factory가 고객의 요청에 따라서 EntityManager 를 생성하고 EntityManager를 통해서 데이터를 관리하게 된다. 영속성 컨텍스트 엔티티를 영구 저장하는 환경 : EntityManager.persist(entity); (눈에 보이는 개념은 아니다) 엔티티의 생명주기비영속(new/transient): 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태영속(managed): 영속성 컨텍스트에 관리되는 상태준영속(detached): 영속성 컨텍스트에 저장되었다가 분리된 상태삭제(removed): 삭제된 상태 ◆ 비영속 ..
준영속 엔티티를 수정하는 2가지 방법준영속 엔티티: 영속성 컨텍스트가 더는 관리하지 않는 엔티티를 의미. 변경 감지 기능 사용(Dirty Checking)트랜잭션 안에서 엔티티를 다시 조회, 변경할 값 선택하고 수정한다. 이후 트랜잭션 commit 시점에 변경 감지 기능(Dirty Checking)이 동작해서 JPA가 자동으로 데이터 베이스에 UPDATE 쿼리를 날려준다. 병합(merge) 사용merge 함수 호출을 통해 값을 변경: 준영속 엔티티의 식별자 값으로 영속 엔티티를 조회한후 영속 엔티티의 값을 준영속 엔티티의 값으로 모두 교체한다. 이후 트랜잭션 commit 시점에 변경 감지 기능이 동작해서 데이터베이스에 UPDATE 쿼리를 날려준다. 변경 감지 기능과의 차이점으로 인한 단점 → 부분수정이..