본문 바로가기

orm5

자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (12) 스프링 데이터 JPA 자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (12) 스프링 데이터 JPA 12.1 스프링 데이터 JPA 소개 스프링 데이터 JPA는 스프링 프레임워크에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트 데이터 접근 계층을 개발할 때 구현 클래스 없이 인터페이스만 작성해도 기본적인 CRUD 개발 완료할 수 있음 리포지토리 인터페이스의 구현체는 애플리케이션 실행 시점에 스프링 데이터 JPA가 생성해서 주입해준다. 12.1.1 스프링 데이터 프로젝트 스프링 데이터 프로젝트는 JPA, 몽고 디비, 레디스, 하둡 등과 같은 다양한 데이터 저장소에 대한 접근을 추상화해서 개발자 편의를 제공하고 지루하게 반복하는 데이터 접근 코드를 줄여준다. 스프링 데이터 JPA 프로젝트는 JPA에 특화된 기능을 .. 2022. 11. 6.
자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (9) 값 타입 JPA에서 다루는 값 타입에 대한 개념을 정리한다. 자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (9) 값 타입 값 타입 9.1 기본값 타입 Member -> id -> 식별자 값 // name, age 속성은 식별자 값도 없고 생명주기도 Member 엔티티에 의존함. 엔티티 인스턴스를 제거하면 name, age 값도 제거되므로 값 타입은 공유하면 안됨 9.2 임베디드 타입 (복합 값 타입) JPA에서 임베디드 타입이란 새로운 값 타입을 직접 정의해서 사용하는 것 직접 정의한 임베디드 타입도 int, String과 같이 값 타입이다. 회원 엔티티 정보에서 예를들어 근무 시작일과 우편번호는 서로 아무 관련이 없음 이럴때 @Embedded 을 사용하여 더욱 의미있고 응집력 있게 변경 할 수 있다... 2022. 9. 18.
자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (8-2) 프록시와 연관관계 관리 자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (8-2) 프록시와 연관관계 관리 들어가며 8강은 1편과 2편으로 나눠 진행하였다. 8.3 지연 로딩 활용 연관된 관계 끼리 자주 함께 사용 -> 즉시 로딩 설정 가끔 사용 -> 지연 로딩 설정 8.3.1 프록시와 컬렉션 래퍼 지연 로딩 설정 시 실제 엔티티 대신 프록시 객체를 사용하며, 프록시 객체는 실제 자신이 사용될 때까지 데이터베이스를 조회하지 않음 하이버네이트는 엔티티를 영속 상태로 만들 때 엔티티에 컬렉션이 있으면 컬렉션을 추적하고 관리할 목적으로 원본 컬렉션을 하이버네이트가 제공하는 내장 컬렉션으로 변경하는데 이것을 컬렉션 래퍼라 함. (출력 결과를 보면 org.hibernate.collection.internal.PersistentBa.. 2022. 9. 10.
자바 ORM 표준 JPA 프로그래밍 - JPA 정리하기 (7-1) 고급매핑 들어가며 7강은 1편과 2편으로 나눠 진행하였다. 7.1 상속 관계 매핑 관계형 디비에는 객체지향 언어에서 다루는 상속 개념이 없다 대신 슈퍼타입 서브타입 관계라는 모델링 기법이 객체의 상속 개념과 가장 유사 ORM에서 이야기하는 상속 관계 매핑은 객체의 상속 구조와 디비의 슈퍼타입 서브타입 관계를 매핑하는 것 슈퍼타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현 시 3가지 방법 존재 각각의 테이블로 변환 : 각각을 모두 테이블로 만들고 조회할 때 조인을 사용 (JPA에서는 조인 전략이라 함) 통합 테이블로 변환 : 테이블을 하나만 사용해서 통합 (JPA에서는 단일 테이블 전략이라 함) 서브타입 테이블로 변환 : 서브 타입마다 하나의 테이블을 만든다 (JPA에서는 구현 클래스마다 테이블 전략이라.. 2022. 8. 17.
JPA - N+1 문제와 해결방법 정리 들어가며 JPA를 사용하다 보면 N+1 문제를 한번씩은 겪어봤을것이다. 하지만 콘솔창을 자세히 보지 않았다면 그냥 지나쳤을 수도 있다. N+1의 문제가 발생한다고 해서 결과에 문제가 생기는 것은 아니지만 성능에는 문제가 생길 수 있기 때문에 확실히 인지해서 문제를 해결하는 것이 좋다. N+1 문제란 무엇인가? 연관관계가 설정된 엔티티를 조회할 때 조회 된 데이터의 갯수만큼 조회 쿼리가 추가로 발생하는 경우는 말한다. 이해를 돕기 위해 예를 들면 팀과 회원의 연관관계에서 팀을 조회했을때 팀에 속한 회원이 10명 있다고 가정할때 팀을 조회할때 연관관계를 가지고 있는 회원을 조회하는 쿼리가 10번(n번) 발생하는 것을 의미한다. N+1 == 10번(회원) + 1번(팀) Fetch 모드에 따른 결과 (즉시 로딩.. 2022. 8. 9.