들어가기 앞서
강의 영상과 강의록
•
강의 영상
•
강의 자료
안녕하세요 5주차 멘토 김지현입니다. 
날씨가 많이 추워졌네요. 감기에 걸린건지 녹음하는데 코맹맹이 소리가 납니다… (양해 부탁드립니다
)
)이번 주차에는 주문 목록이 정상적으로 조회되더라도, 조회 과정에서 불필요한 SQL이 반복될 수 있다는 점을 살펴보았습니다.
직접 주문 목록 조회를 실행해보며 N+1 문제를 재현하고, 연관관계와 LAZY·EAGER의 동작을 살펴봅니다. 이후 Fetch Join과 Batch Size를 각각 적용하면서 반복되는 조회를 어떻게 줄일 수 있는지 비교해보았습니다.
강의나 과제에 대해 궁금하거나 막히는 부분이 있다면 언제든지 디스코드 #정규스터디-질문방으로 연락 주세요!
이번 주차 진행 전 확인해주세요!
이번 주차 실습에 필요한 테스트 코드는 week5 브랜치에 미리 작성되어 있습니다. 테스트 코드를 직접 구현하기보다는 제공된 테스트를 실행하면서 결과가 어떻게 달라지는지 확인하는 방식으로 진행됩니다.
실습 중에는 지난 1~4주차와 동일하게 W5-1~W5-3로 표시된 TODO를 직접 구현하게 됩니다. 강의를 따라 TODO를 작성한 뒤 테스트 결과를 함께 확인해주세요!
5주차 실습 TODO 위치 안내
단계 | 구현 위치 | 할 일 |
W5-1 | OrderJpaRepository | distinct를 포함한 Fetch Join 조회 findAllWithItems() 작성 |
W5-2 | OrderRepositoryAdapter.findAll() | Fetch Join 조회를 사용하도록 연결 |
W5-3 | src/test/resources/application.yaml | default_batch_fetch_size를 10으로 설정 |
과제
목표
•
Fetch Join과 Batch Size의 조회 방식 이해
•
주문 수에 따른 조회 SQL 개수 변화 확인
•
테스트를 통해 두 조회 방식의 결과 비교
주문 수를 늘려 조회 결과 확인
수업에서 제공한 OrderQueryTest의 조건을 다음과 같이 변경해주세요.
주문 수: 20건
주문별 항목 수: 3건
Batch Size: 10
Plain Text
복사
Fetch Join과 Batch Size가 각각 적용된 상태에서 테스트를 실행한 뒤, 주문 수·총액·조회 SQL 개수를 확인해주세요.
Batch Size 테스트의 예상 SQL 개수는 주문 수에 맞게 변경해야 합니다.
실행 결과는 테스트 결과 또는 콘솔 화면처럼 주문 수와 조회 SQL 개수를 확인할 수 있는 자료를 캡처하여 제출해주세요.
Order.orderItems는 LAZY로 유지하며, 새로운 테스트를 작성할 필요는 없습니다.
WIL 작성
5주차 강의 및 실습 내용을 week5/wil.md에 정리해주세요.
아래 질문에 대한 답변을 포함해주세요.
1.
주문 수를 10건에서 20건으로 늘렸을 때, Fetch Join과 Batch Size의 SQL 개수는 각각 어떻게 달라졌나요? 실제 실행 결과를 기록하고, 두 방식의 조회 원리와 연결하여 이유를 설명해주세요.
2.
이번 실습에서는 Fetch Join의 SQL 개수가 더 적었습니다. 이것만으로 Fetch Join이 항상 더 좋은 방법이라고 할 수 있을까요? 두 방식의 특징을 바탕으로 어떤 점을 고려하여 선택해야 할지 설명해주세요.
추가로 아래 내용에 대해 알아보고, 해당 내용을 정리해주세요!
이번 실습에서는 같은 주문 목록을 조회하면서도 조회 방식에 따라 SQL 개수가 달라질 수 있다는 점을 확인했습니다.
하지만 SQL 개수가 적다고 해서 항상 조회 성능이 더 좋은 것은 아닙니다. SQL의 실행 시간과 읽어오는 데이터의 양도 함께 살펴봐야 합니다.
이처럼 SQL과 조회 방식을 분석하고 성능을 개선하는 작업을 쿼리 튜닝이라고 합니다.
쿼리 튜닝에 대해 더 알아보아요.•
쿼리 튜닝은 어떤 문제를 해결하기 위한 작업인가요?
•
SQL 개수를 줄이는 것 외에 어떤 점을 확인할 수 있을까요?
❗️ 인덱스, 페이징, 실행 계획 등의 키워드를 참고하여 조사해보면 더 좋아요 :)
제출해야 할 파일과 파일 경로
•
하단 경로는 필수 디렉토리 & 파일을 기입한 것입니다. 실습에 따라 다른 디렉토리가 추가되어도 괜찮습니다.
[여러분들의 저장소 이름]
├── readme.md
├── .gitignore
├── commerce // 실습 코드
└── week5/
├── wil.md // 필수
├── fetch_join_query.png // 필수
└── batch_size_query.png // 필수
Plain Text
복사
wil.md는 반드시 전체 300자 이상 작성해주세요! 300자 미만일 시 과제 제출이 불가합니다.
•
wil.md: 위 질문에 대한 답변 및 5주차 강의 내용 정리
•
fetch_join_query.png: 주문 20건의 Fetch Join 조회 실행 결과
•
batch_size_query.png: 주문 20건의 Batch Size 조회 실행 결과
마감 기한
와우스터디에서 확인해주세요.
제출 방법
자신의 레포지토리에 week5 폴더를 생성해 wil.md 파일을 제출합니다.
더 자세한 사항은 아래 링크를 참조해주세요.





