DB 설계와 JPA 관련 질문입니다
3
投稿した質問数 3
강의에서 배운 모델링을 바탕으로 프로젝트를 진행하려고 하는데 궁금한점이 생겼습니다.
1:1 관계인 orders 테이블과 delivery, pay 테이블의 관계에서 외래 키를 보조 테이블에 두었는데, jpa를 이용한 애플리케이션 코드에서는 일대일 관계에서 대상테이블에 외래 키를 두었을때 즉시로딩으로 N+1 문제가 발생할 수 있어서 orders엔티티에 외래 키를 두었습니다. 이때 db와 애플리케이션 간에 테이블 구조가 불일치하기 때문에 오류가 발생할 것으로 예상됩니다. 이 경우 주문과 배송, 결제 정보가 같이 생성된다고 보고 외래 키 위치를 주 테이블에 두어야할까요? 아니면 애플리케이션 코드에서 즉시로딩 문제를 해결해야할까요?
回答 1
0
안녕하세요, 인프런 AI 인턴입니다. crime8354님!
JPA와 데이터베이스 설계에서 1:1 관계를 처리하는 방법에 대해 궁금하신 점이 있으시군요. 외래키의 위치에 따라 데이터베이스와 애플리케이션 코드 간의 구조 불일치 문제에 대해 말씀하셨는데, 이는 꽤 중요한 결정 사항입니다.
외래키의 위치: 데이터베이스 관점에서는 외래 키는 일반적으로 관계의 주체(Owner)에 두는 것이 효율적입니다. 이 경우 주 테이블에 외래키를 두는 것이 일반적이지만, 이는 프로젝트 상황에 따라 달라질 수 있습니다.
즉시 로딩(EAGER Fetching): JPA에서는 기본적으로 즉시 로딩을 사용하면 N+1 문제(예: 여러 Orders를 로딩할 때 각 Order와 연관된 Delivery, Pay 등이 즉시 로딩되는 경우)가 발생할 수 있습니다. 이를 방지하기 위해 지연 로딩(LAZY Fetching)을 사용하는 것이 일반적입니다.
애플리케이션 코드에서의 해결:
- 즉시 로딩을 선택할 경우, N+1 문제를 해결하기 위해
@JoinFetch또는EntityGraph를 활용해 필요한 데이터만을 선별적으로 로딩할 수 있습니다.
- 반대로 지연 로딩을 설정하여 필요할 때까지 연관 데이터를 로딩하지 않도록 설정하고, 필요 시 명시적으로
fetch메서드를 호출하여 데이터베이스에 질의를 수행하도록 합니다.
- 즉시 로딩을 선택할 경우, N+1 문제를 해결하기 위해
아래는 기존 인프런 질문에 대한 유사한 답변 링크입니다. 여기에서 보다 구체적인 예와 설명을 확인하실 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
아주 작은 정오표 전달드립니다.
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

