• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

연관관계 매핑 및 로딩전략 관련 질문입니다.

21.02.15 22:58 작성 조회수 179

0

안녕하세요, 강의 듣다가 궁금한 것이 생겨 질문 드립니다.

총 두 가지 질문이 있는데요

1. 시스템 설계상 연관관계 매핑을 하지 않는 경우(트래픽 관리가 중요한 시스템이라 연관관계 매핑을 따로 하지 않았을 경우),  n+1문제 등 즉시로딩/지연로딩 설정과 관련된 이슈는 걱정하지 않아도 되는 걸까요?

2. 연관관계 매핑을 사용했을 경우, Member - Order와 같이 두개의 Join된 테이블을 이용해 집계하는 로직이 있고, 해당 로직은 요청이 들어오는 시점의 모든 Member와 Order의 데이터를 기준으로 집계되어야하는 제약사항이 있다고 가정하겠습니다.  (oracle의 consistent모드로 member와 order를 조인해서 데이터를 가져오는 경우와 동일하게 작동이 필요할 경우)

해당 로직이 아래와 같은 순서로 진행이 된다고 생각하겠습니다.

a. 모든 member를 조회한다 (lazy로 설정되어 각 member와 연관된 order는 현재 조회되지 않음) 이후 루프를 돌며 b-d를 수행한다.

b. 1번 member의 order를 가져와 집계 (lazy)

c. 2번 member의 order를 가져와 집계 (lazy)

d. 3번 ~ n번 member의 order를 가져와 집계 (lazy)

e. 결과 도출 후 종료

위의 a~e순으로 진행이 된다고 했을 때, b단계에서 order를 조회하는 시점과 d단계에서 order를 조회하는 시점이 다를텐데(로직이 수행되는 시간이 길 경우)

b단계 수행 중 d단계에 수행되어야할 3번 member의 order 정보가 다른 application에 의해 업데이트 된다거나 

혹은 1번 member에 관련된 order가 매우 많아 100번째 order를 조회해 처리하는 도중에 500번째 order 정보가 업데이트 될 경우, 데이터 정합성에 문제가 생길 것 같은데요.

실제로 이와같은 문제가 발생하는지 그리고 문제가 발생한다면 문제를 해결하기 위한 방법으로는 어느 것들이 있는 지 궁금합니다.(지금 생각나는 부분은 해당 로직은 별도 메서드에 entitymanager를 통해 native query를 string으로 선언해 사용하거나 마이바티스를 선택적으로 사용하는 등의 방법이 있을 것 같은데요. 실제 운영 app에서는 어떻게 해결하는지 궁금합니다.)

답변 4

·

답변을 작성해보세요.

1

윤빵꾸님의 프로필

윤빵꾸

질문자

2021.02.17

@김영한

아 활용 2편에서 다루는군요. 감사합니다!

1

네 2번의 경우 데이터 정합성에 문제가 발생할 수 있습니다.

지연로딩 없이 한번에 DTO로 조회하던가(활용2편에서 설명드립니다.)

아니면 날짜 데이터를 적절하게 입력해서 해당 날짜 까지만 조회하는 방식으로 해결하면 됩니다.

감사합니다^^

0

윤빵꾸님의 프로필

윤빵꾸

질문자

2021.02.15

답변 감사합니다. 혹시 2번 질문에 대해서도 알려주실 수 있으실까요?

0

안녕하세요. 윤빵꾸님

네 연관관계가 없기 때문에 걱정하지 않아도 됩니다^^

그런데 연관관계가 없으면 JPA 기본편, 활용2에서 학습하겠지만, fetch join이라는 강력한 성능 최적화 기법을 사용할 수 없다는 단점이 있습니다.

감사합니다.