inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복

13-01.다음으로

DB 설계와 JPA 관련 질문입니다

52

crime8354

작성한 질문수 3

0

강의에서 배운 모델링을 바탕으로 프로젝트를 진행하려고 하는데 궁금한점이 생겼습니다.

1:1 관계인 orders 테이블과 delivery, pay 테이블의 관계에서 외래 키를 보조 테이블에 두었는데, jpa를 이용한 애플리케이션 코드에서는 일대일 관계에서 대상테이블에 외래 키를 두었을때 즉시로딩으로 N+1 문제가 발생할 수 있어서 orders엔티티에 외래 키를 두었습니다. 이때 db와 애플리케이션 간에 테이블 구조가 불일치하기 때문에 오류가 발생할 것으로 예상됩니다. 이 경우 주문과 배송, 결제 정보가 같이 생성된다고 보고 외래 키 위치를 주 테이블에 두어야할까요? 아니면 애플리케이션 코드에서 즉시로딩 문제를 해결해야할까요?

sql mysql dbms/rdbms 소프트웨어-설계 SQLD

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. crime8354님!

JPA와 데이터베이스 설계에서 1:1 관계를 처리하는 방법에 대해 궁금하신 점이 있으시군요. 외래키의 위치에 따라 데이터베이스와 애플리케이션 코드 간의 구조 불일치 문제에 대해 말씀하셨는데, 이는 꽤 중요한 결정 사항입니다.

  1. 외래키의 위치: 데이터베이스 관점에서는 외래 키는 일반적으로 관계의 주체(Owner)에 두는 것이 효율적입니다. 이 경우 주 테이블에 외래키를 두는 것이 일반적이지만, 이는 프로젝트 상황에 따라 달라질 수 있습니다.

  2. 즉시 로딩(EAGER Fetching): JPA에서는 기본적으로 즉시 로딩을 사용하면 N+1 문제(예: 여러 Orders를 로딩할 때 각 Order와 연관된 Delivery, Pay 등이 즉시 로딩되는 경우)가 발생할 수 있습니다. 이를 방지하기 위해 지연 로딩(LAZY Fetching)을 사용하는 것이 일반적입니다.

  3. 애플리케이션 코드에서의 해결:

    • 즉시 로딩을 선택할 경우, N+1 문제를 해결하기 위해 @JoinFetch 또는 EntityGraph를 활용해 필요한 데이터만을 선별적으로 로딩할 수 있습니다.
    • 반대로 지연 로딩을 설정하여 필요할 때까지 연관 데이터를 로딩하지 않도록 설정하고, 필요 시 명시적으로 fetch 메서드를 호출하여 데이터베이스에 질의를 수행하도록 합니다.

아래는 기존 인프런 질문에 대한 유사한 답변 링크입니다. 여기에서 보다 구체적인 예와 설명을 확인하실 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

ordered_at, paid_at 과 같이

0

38

1

물리적 모델링 - 실습 (역정규화) 질문

0

56

2

용어 사전

0

76

2

개념적 모델링 - 실습

0

42

1

아주 작은 정오표 전달드립니다.

0

87

2

실제로 작은 기업에서 기획 롤

1

63

1

order_product 까마귀발

0

67

2

[DB설계] 탈퇴 유저의 구독 정보 유지 및 이메일 마스킹 관련 질문입니다.

0

81

1

자연키 vs 대리키 실무질문

0

38

1

1:N 관계에서 중간테이블 (연관엔티티)

0

70

2

일대일 fk 위치

0

72

1

제 3 정규형 vs BCNF 정규형 차이점?

0

168

3

BCNF 질문

0

95

2

연관 엔티티 네이밍 규칙

0

66

1

진짜 강의 듣는거 너무 고문

0

168

1

28강 sql 파일 어딨나여?

0

107

1

2NF의 엄밀한 정의

0

89

1

comment 채번을 사용해야 하는 이유에 대한 설명이 필요합니다.

0

169

4

학습중인 수업자료를 받아볼 수 있을까요??

0

116

2

수업자료 pdf파일관련 건의 - 제목 링크위치 개선

0

103

2

서비스 운영 중 잘못된 테이블 설계 발견시 수정 시점에 대한 질문

1

117

2

실무적인 설계로 접근했을 때 제 2정규형 항상 만족?

0

99

1

슈퍼/서브 타입 joined 전략

0

90

2

created_at 관련 구현과 DB ENUM에 대해

0

91

1