inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Cơ sở dữ liệu thực chiến của Kim Young-han - Phần 1 Thiết kế, Chinh phục hoàn toàn mô hình hóa dữ liệu hiện đại

13-01.Tiếp theo

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

3

crime8354

3 câu hỏi đã được viết

0

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

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

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

Câu trả lời 1

0

communityai8509

안녕하세요, 인프런 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 메서드를 호출하여 데이터베이스에 질의를 수행하도록 합니다.

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

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

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

0

58

2

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

1

28

1

order_product 까마귀발

0

44

2

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

0

54

1

자연키 vs 대리키 실무질문

0

28

1

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

0

57

2

일대일 fk 위치

0

44

1

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

0

106

3

BCNF 질문

0

78

2

연관 엔티티 네이밍 규칙

0

54

1

진짜 강의 듣는거 너무 고문

0

145

1

28강 sql 파일 어딨나여?

0

94

1

2NF의 엄밀한 정의

0

74

1

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

0

126

3

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

0

103

2

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

0

88

2

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

1

109

2

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

0

82

1

슈퍼/서브 타입 joined 전략

0

74

2

created_at 관련 구현과 DB ENUM에 대해

0

75

1

M:N 관계의 연관 엔티티 설계 순서

0

81

2

데이터 역사성 훼손 문제

0

67

2

실무팁 - 등록자,수정자 컬럼 관리 관련 질문입니다.

0

84

1

구글이 이메일 변경을 허용하는 이유

0

126

1