문제엘라스틱 서치로 API 응답 최대소요시간 그래프를 통해 /api/v1/user-challenges인 URL path에서 높은 duration을 발견했다.원인 파악 과정SQL 쿼리 분석 : N+1 문제 발견연관관계 분석 : 2-1. UserChallenge 와 Challenge 는 N:1 단방향 연관관계 2-2. Challenge와 ChallengeRecord는 1:1 양방향 연관관계 2-3. UserChallenge를 조회하면서 연관관계인 Challenge를 조회한다. 그리고 Challenge와 연관관계인 ChallengeRecord를 조회함 3. 일대일 단방향 관계에서 N+1 문제 원인 분석 (Challenge와 ChallengeRecord) 3-1. Challen..
JPA
들어가기 전에 ) JPA가 제공하는 기능 1. 엔티티와 테이블을 매핑하는 설계 부분 2. 매핑한 엔티티를 실제 사용하는 부분 3.1 엔티티 매니저 팩토리와 엔티티 매니저 엔티티 매니저 -엔티티를 저장,수정, 삭제,조회 등 엔티티와 관련된 모든 일을 처리 엔티티 매니저 팩토리 (Entity ManagerFactory) -엔티티 매니저를 만드는 공장 -비용이 많이 들기 때문에 하나만 생성->한 개만 만들어서 애플리케이션 전체에서 공유 -여러 스레드가 동시에 접근해도 안전-> 서로 다른 스레드 간에 공유 엔티티 매니저 (Entity Manager) -공장에서 엔티티 매니저 생성 -비용이 거의 들지 않는다. -여러 스레드가 동시에 접근하면 동시성 문제가 발생->스레드 간에 절대 공유하면 안됨 -데이터베이스 연결..
1. 애플리게이션 개발 객체 매핑을 완료하고 persistence.xml로 JPA설정을 완료했다. 이제 JPA 애플리케이션을 개발하자. package jpabook.start; import javax.persistence.*; import java.util.List; /** * @author holyeye */ public class JpaMain { public static void main(String[] args) { //엔티티 매니저 팩토리 생성 EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook"); EntityManager em = emf.createEntityManager(); //엔티티 매니저 생성 Entit..
1. 프로젝트 만들기 IntelliJ로 Maven 프로젝트를 만들었따. 2. Mysql 테이블 생성 책에서는 H2 데이터베이스를 사용하지만 여기서는 Mysql을 사용할 것이다. create table 'member'( ID VARCHAR(255) NOT NULL, NAME VARCHAR(255), AGE INTEGER NOT NULL, PRIMARY KEY(ID) ); 3. 라이브러리와 프로젝트 구조 JPA 구현체로 하이버네이트를 사용한다. JPA를 구현체로 하이버네이트를 사용하기 위한 핵심 라이브러리는 다음과 같다. hibernate-core : 하이버네이트 라이브러리 hibernate-entitymanager : 하이버네이트가 JPA 구현체로 동작하도록 JPA 표준을 구현한 라이브러리( 이것을 라이브..
JPA란 무엇인가? -JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준이다. JPA는 애플리케이션과 JDBC 사이에서 동작한다. -자바 ORM 기술에 대한 API 표준 명세다.(인터페이스를 모아둔 것) -JPA 사용하기 위해서는 JPA를 구현한 하이버네이트,EclipseLink, DataNucleus인 ORM 프레임워크를 선택한다. -ORM이란 무엇일까? ORM(object-Relational Mapping)은 이름 그대로 객체와 관계형 데이터베이스를 매핑한다는 뜻이다. ORM 프레임워크는 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 대신 해결해준다. 예를 들어 ORM 프레임워크를 사용하면 객체를 데이터베이스에 저장할 때 INSERT SQL을 직접 작성하는 것이 아니라 ..