Batch Insert란? batch insert는 여러 개의 SQL Statement를 하나의 구문으로 처리하는 것을 말한다. batch insert는 jdbc batch 기능이고, hibernate에서 write-behind(쓰기 지연)를 통해 처리한다. 여러 개의 구문을 합쳐 하나로 보내기 때문에 성능 개선을 할 수 있다. JPA는 트랜잭션이 commit 되는 순간 한꺼번에 flush가 이뤄진다. 사용방법 application.yml 파일을 아래와 같이 설정한다. spring: jpa: database: mysql properties: hibernate.jdbc.batch_size: 50 hibernate.order_inserts: true hibernate.order_updates: true hi..
EntityManagerFactory란? EntityManagerFactory는 EntityManager를 생성하는 인터페이스다. 최초 생성 시 커넥션풀 생성을 포함한 여러 작업들을 수행하여 생성비용이 비싸다. 일반적으로 애플리케이션에서 생성 후 하나의 인스턴스를 공유하도록 설계되어있다. 여러 스레드가 동시에 접근해도 안전하다. META-INF/persistence.xml에 설정한 정보를 기반으로 엔티티 매니저 팩토리를 생성한다. 아래와 같은 코드로 생성할 수 있다. EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); Spring Boot에서는 JPA 사용 시 application.properties 또는 applicat..
N+1 문제란? 연관 관계에서 발생하는 이슈로 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 개수(N) 만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오게 된다. 즉, N+1문제는 1번의 쿼리를 날렸을 때 의도하지 않은 N번의 쿼리가 추가적으로 실행되는 것을 말한다. When 언제 발생하는가? JPA Repository를 활용해 인터페이스 메소드를 호출할 때(Read 시) Who 누가 발생시키는가? 1:N 또는 N:1 관계를 가진 엔티티를 조회할 때 발생 How 어떤 상황에 발생되는가? JPA Fetch 전략이 EAGER 전략으로 데이터를 조회하는 경우 JPA Fetch 전략이 LAZY 전략으로 데이터를 가져온 이후 연관 관계인 하위 엔티티를 다시 조회하는 경우 Why 왜 발생하는가..
연관관계 매핑이란? 객체의 참조와 테이블의 외래 키를 매핑하는 것을 의미한다. JPA에서는 연관 관계에 있는 상대 테이블의 PK를 멤버 변수로 갖지 않고, 엔티티 객체 자체를 통째로 참조한다. 방향 데이터 모델링에서는 관계를 맺어주기만 하면 자동으로 양방향 관계가 되어 서로 참조한다. 그러나 객체지향 모델링에서는 구현하고자 하는 서비스에 따라 단방향 관계인지 양방향 관계인지 적절한 선택이 필요하다. 단방향 관계 : 두 엔티티가 관계를 맺을 때, 한 쪽의 엔티티만 참조하고 있는 것 양방향 관계 : 두 엔티티가 관계를 맺을 떄, 양 쪽이 서로 참조하고 있는 것 다중성 어떤 엔티티를 중심으로 상대 엔티티를 바라보느냐에 따라 다중성이 달라진다. 관계에 있는 두 엔티티는 아래 중 하나의 관계를 갖는다. 다중성은 ..