본문 바로가기

JPA7

JPA N+1 문제와 해결 이 글은 2021년 11월에 작성되었으며 블로그를 이전하며 옮기게 되었습니다. 제 글에 문제가 있다면 댓글로 알려주시면 감사하겠습니다! 🙇‍♂️ 저는 JPA를 이용하며 프로젝트를 하며 N+1 문제를 만나보진 않았습니다. 하지만 JPA를 사용하면 자주 만나게 되는 것이 N+1 문제입니다. JPA를 공부 할 때에 예시 상황을 만들고 공부를 했었지만 공부한 지 시간이 좀 지났기 때문에 프로젝트 중 N+1 문제가 생기더라도 당황하지 않고 빠르게 해결하기 위해, 다시 공부하기 위해 이 글을 작성합니다. 이동욱 님의이동욱 님의 글을 참고하여 Java8 -> Java11, SpringBoot 1.5.X -> 2.5.X, Junit4 -> Junit5로 버전을 업그레이드하여 코드를 작성하였고, 이 글을 작성하였습니다 .. 2022. 3. 25.
JPA 값타입 이 글은 2021년 5월에 작성되었으며 블로그를 이전하며 옮기게 되었습니다. 시작하기 앞서 저의 글에 대한 피드백이나 지적은 언제나 환영입니다 😊 JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 ex) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경 시 추적 불가 ex) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입 분류 기본값 타입 자바 기본 타입(int, double) 래퍼 클래스(Integer, Long) String 임베디드 타입(embedded type, 복합 값 타입.. 2022. 3. 25.
JPA 프록시와 연관관계 관리 이 글은 2021년 5월에 작성되었으며 블로그를 이전하며 옮기게 되었습니다. 시작하기 앞서 저의 글에 대한 피드백이나 지적은 언제나 환영입니다 😊 들어가기 앞서 먼저 프록시란? :프록시(Proxy)란 '대리'라는 의미로, 네트워크 기술에서는 프로토콜에 있어서 대리 응답 등에서 친숙한 개념입니다. em.find()? em.getReference()? em.find() : 데이터베이스를 통해 실제 엔티티 객체 조회 em.getReference() : 데이터베이스 조회를 미루는 가짜(프록시)엔티티 객체 조회 프록시 특징 실제 클래스를 상속받아서 만들어짐 실제 클래스와 겉모양이 같다 사용하는 입장에서는 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 됨(이론상) 프록시 객체는 실제 객체의 참조(target.. 2022. 3. 25.
JPA 상속관계 매핑과 고급매핑 이 글은 2021년 5월에 작성되었으며 블로그를 이전하며 옮기게 되었습니다. 시작하기 앞서 저의 글에 대한 피드백이나 지적은 언제나 환영입니다 😊 상속관계 매핑 관계형 데이터베이스는 상속관계 X 슈퍼 타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사 상속관계 매핑 : 객체의 상속과 DB의 슈퍼 타입 서브타입 관계를 매핑 슈퍼 타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 법 각각 테이블로 변환 -> 조인전략 통합 테이블로 변환 -> 조인 전략 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 @주요 어노테이션 @Inheritance(strategy=InheritanceType.XXX) JOINED : 조인 전략 SINGLE_TABLE : 단일 테이블 전략 TABLE_PER_CLASS .. 2022. 3. 25.
JPA 다양한 연관관계 매핑 이 글은 2021년 5월에 작성되었으며 블로그를 이전하며 옮기게 되었습니다. 시작하기 앞서 저의 글에 대한 피드백이나 지적은 언제나 환영입니다 😊 전 글에서 다뤘지만 한번 되짚고 넘어가자. 연관관계 매핑 시 고려사항 3가지 다중성 단방향, 양방향 연관관계의 주인 다중성 다대일(N:1) : @ManyToOne 일대다(1:N) : @OneToMany 일대일(1:1) : @OneToOne 다대다(N:M) : @ManyToMany 단방향, 양방향 테이블 외래 키 하나로 양쪽 조인 가능 사실 방향이라는 개념이 없다. 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺는다. 객체 양방향 관계는 A -> .. 2022. 3. 25.
JPA 연관관계 매핑과 연관관계 주인 이 글은 2021년 5월에 작성되었으며 블로그를 이전하며 옮기게 되었습니다. 시작하기 앞서 저의 글에 대한 피드백이나 지적은 언제나 환영입니다 😊 연관관계 매핑 용어를 먼저 이해해보자 방향(Direction) : 단방향, 양방향 다중성(Multiplicity) : 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) 이해 연관관계의 주인(Owner) : 객체 양방향 연관관계는 관리 주인이 필요하다. 연관관계는 왜 필요해? "객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다." -조영호(객체지향의 사실과 오해) : 객체를 테이블에 맞추어 데이터 중심으로 모델링하면, 협력관계를 만들 수 없다. 테이블은 외래키로 조인을 사용하여 연관된 테이블을 찾는다. 객체는 참조를 사용해.. 2022. 3. 25.