Development/JPA 2

그놈의 N + 1 문제

즉시 로딩(FetchType.EAGER) @ManyToOne @OneToOne 지연 로딩(FetchType.LAZY) @OneToMany @ManyToMany JPA N + 1 문제란? 1번의 쿼리를 날렸을 때 의도하지 않은 N번의 쿼리가 추가적으로 실행되는 것을 의미한다.  1:N 또는 N:1 관계를 가진 엔티티를 조회할 때, JPA Repository를 활용해 인터페이스 findAll() 호출 시 Fetch EAGER 전략으로 데이터를 조회하는 경우 Fetch LAZY 전략으로 데이터를 가져온 이후에 연관 관계인 하위 엔티티를 다시 조회하는 경우 N + 1 문제가 발생한다. 기본 전략을 LAZY로 가져가고 필요 시 EAGER를 사용하는 방향으로 개발하던 중 2번과 같은 상황이 나에게도 드디어! ㅎ..

Development/JPA 2023.04.10

JPA 기본키 매핑 방식과 키생성 전략은 무엇을 선택해야할까?

자연키(natural key) 비즈니스에 의미가 있는 키 예: 주민등록번호, 이메일, 전화번호 대리키(surrogate key) 비즈니스와 관련 없는 임의로 만들어진 키, 대체키로도 불린다. 예: 오라클 시퀀스, auto_increment, 키생성 테이블 사용 * 자연키 보다는 대리키를 권장 기본키(Primary key) 매핑 방식 직접 할당: @Id 어노테이션만 사용해서 회원의 기본키를 직접 할당 자동 생성: 대리키 사용 방식, 기본키 생성을 데이터베이스에 위임한다. IDENTITY: 자동 증가 컬럼(auto_increment)을 이용한 전략 데이터베이스에 INSERT 쿼리를 실행한 후에 생성된 키를 가져와서 엔티티의 식별자로 사용 MySQL, SQL Server 등에서 사용 단점은 주로 대량의 데이..

Development/JPA 2023.04.03