본문 바로가기

JPA38

Jpa OSIV (Open Session In View) source 는 Github 에 있습니다. 개념 Open Session In View 보통 DB 트랜잭션이 시작될 때, 영속성 컨텍스트에서 데이터베이스 Connection 을 가져옵니다. 그러면 언제 Connection 을 반환할까요? 아래 예시를 통해 보면 @Transactional 이 시작할 때, setAutoCommit(false) 가 명령어가 수행됩니다. 그 이후 영속성 컨텍스트는 Connection 을 가져오고, 쿼리를 수행하고 @Transactional 선언된 메소드가 종료됩니다. @Transactional 메소드가 종료된 후, connection 을 반환하고 영속성 컨텍스트는 종료됩니다. 하지만 OSIV 가 켜져있으면 @Transactional 메소드가 종료된 이후에도 영속성 컨텍스트가 종료.. 2021. 4. 22.
spring-batch QuerydslPagingItemReader 설명 Reference 보고 정리했습니다. 1. spring-batch QuerydslPagingItemReader 개념 1.1 QuerydslPagingItemReader spring-batch 에서 사용가능한 querydsl 기반 ItemReader 이며, Paging 기능을 사용할 수 있습니다. Paging 기능은 전체 데이터 중 일부 데이터를 조회하는 기법 예를 들면, 1만건의 데이터가 있을 때, 1100, 101200 ... 이런 순으로 데이터를 가져오는 것입니다. 왜 Paging 을 쓰냐하면 DB 데이터를 한꺼번에 메모리에 올리다가 Out Of Memory 가 떨어질 수 있기 때문입니다. 1.2 Querydsl, JPQL querydsl 은 코드로 SQL, JPQL 을 표현합니다. 타입 체크 가능합.. 2021. 4. 14.
Jpa EntityManager 설명 (영속성 컨텍스트와 연관) 1. Entity 테이블과 매칭되는 개념 ORM 을 이루는 기반 개념 중 하나. 객체와 RDB 간 연결시켜주는 존재 2. EntityManager 엔티티를 관리하는 역할을 한다. 엔티티 매니저 내부에는 영속성 컨텍스트가 있으며, 이를 통해 엔티티 관리. 여러 엔티티 매니저가 하나의 영속성 컨텍스트를 공유 가능 EntityManager 는 Thread-Safe 를 보장해야 한다. 동일한 EntityManager 를 가지고 멀티 스레드 환경에서 호출한다면 데이터가 어떻게 변경될지 모름. 3. 영속성 컨텍스트, dirty checking 잠깐 영속성 컨텍스트의 개념을 짚고 넘어가면 엔티티를 영구히 저장하는 공간 영속성 컨텍스트는 관리하고 있는 엔티티의 변화를 추적하고, 한 트랜잭션 내에서 변화가 일어나면 엔티.. 2021. 4. 2.
jpa fetch join 설명 jpa fetch join jpa 에서 여러 Entity 와 관계를 맺을 때, 여러 번의 쿼리가 발생할 수 있음. 이를 막기 위해 fetch join 으로 한 번에 가져오도록 할 있음. 쿼리 수 줄어듬. jpa fetch join paging 문제점 fetch join 의 문제점은 컬렉션이 페이징이 안됨. 페이징이 안되는 경우는 다음과 같음. A 와 B 가 1:n 관계이고, A 데이터가 3개, B 데이터가 7개 있다고 가정. A 를 기준으로 B 데이터를 가져오면 총 21개의 row 가 생김. 이 때, 내가 원하는건 A 를 기준으로 페이징을 하고 싶은데 JPA 입장에서는 어떤 기준을 가지고 Paging 을 해야하는지를 모름. 그렇기에 컬렉션이 페이징이 안됨. jpa fetch join paging 해결방안.. 2021. 3. 18.