Last updated
Last updated
์ฌ์ฉ์, ๊ฒ์๋ฌผ ์ํฐํฐ๊ฐ ์กด์ฌํ๋ค๊ณ ํ์. ํ๋์ ์ฌ์ฉ์๋ ์ฌ๋ฌ ๊ฒ์๋ฌผ์ ์์ฑํ ์ ์์ผ๋ฏ๋ก ์ฌ์ฉ์-๊ฒ์๋ฌผ์ ์ผ๋๋ค ๊ด๊ณ๋ฅผ ๊ฐ๋๋ค.
์ฌ๊ธฐ์ ๋ชจ๋ ๊ฒ์๋ฌผ์ ์กฐํํ๊ณ , ๊ฒ์๋ฌผ์ ์์ฑํ ์ฌ์ฉ์์ ์ด๋ฆ๋ ํจ๊ป ์กฐํํ๋ ๋น์ฆ๋์ค ๋ก์ง์ ์์ฑํ๋ค๊ณ ํ์.
์ด ๋ก์ง์ ์คํํ ํ ์คํ๋ ์ฟผ๋ฆฌ๋ค์ ๋ณด๋ฉด, ์๋์ ๊ฐ์ ์ฟผ๋ฆฌ๋ค์ด ์คํ๋์์์ ์ ์ ์๋ค.
์ฆ, 1๋ฒ์ ์ฟผ๋ฆฌ๊ฐ ์คํ๋ ๊ฒ์ ์์ํ๊ณ ์์ฑํ ๋ก์ง์์๋ N๊ฐ ํฌ์คํธ์ ์กฐํ์ ๋ํด N+1๋ฒ์ ์ฟผ๋ฆฌ๊ฐ ์คํ๋์์์ ์ ์ ์๋ค.
N๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ธฐ ์ํด 1๋ฒ์ ์ฟผ๋ฆฌ๋ง ์คํ๋ ๊ฒ์ ๊ธฐ๋ํ์ผ๋ **N๋ฒ์ ์ฟผ๋ฆฌ๊ฐ ์ถ๊ฐ์ ์ผ๋ก ๋ฐ์
**ํ๋ ๋ฌธ์ ๋ฅผ ๋งํจ
JPA๋ ์ฟผ๋ฆฌ๋ฅผ ์๋์ผ๋ก ์์ฑํด์ฃผ๋ ํ๋ ์์ํฌ์ธ ๋งํผ ์ ๋ชจ๋ฅด๊ณ ์ฐ๋ฉด ์ฌ๊ฐํ ๋นํจ์จ์ฑ์ ์ด๋ํ ์ ์๊ณ , N+1 ๋ฌธ์ ๋ ์ด ๋ํ์ ์ฌ๋ก
JPA๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์กฐํ ์ ์ฐ๊ด ๊ด๊ณ์ ์๋ ์ํฐํฐ๋ค์ join์ ํตํด ๊ฐ์ ธ์ค๋ ๋์ ์ถ๊ฐ์ ์กฐํ ์ฟผ๋ฆฌ๋ฅผ ์คํํด ๊ฐ์ ธ์ฌ์ง ๋ง์ง ๊ฒฐ์ ํจ
ํ ๋ฒ์ ๋ค ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น์ด๊ธฐ๋ ํ๊ณ , DB์ ๋ฌ๋ฆฌ ๊ฐ์ฒด๋ ์ฐธ์กฐ๋ผ๋ ๊ฒ์ ๊ฐ์ ธ ์ธ์ ๋ ์ฐ๊ด๋ ์ํฐํฐ๊ฐ ๋ฌด์์ธ์ง์ ๋ํด ์ ์ ์๊ธฐ ๋๋ฌธ์ ์กฐํ ์์ ์ ๋ฏธ๋ค๋ ์๊ด ์๊ธฐ ๋๋ฌธ์ธ ๋ฏ
๋ฐ๋ผ์ ์ฐ๊ด ์ํฐํฐ๊ฐ ์กฐ์ธ ๋์ ๋ณ๋ ์กฐํ๋ก ํ๋๋๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ๋ฒ์ ์ฟผ๋ฆฌ๊ฐ ๋ฐ์ํ๋ ๊ฒ
JPQL์์ fetch join์ ๋ช ์ํด์ฃผ๋ ๋ฐฉ๋ฒ
๊ธฐ๋ณธ join์ ์ด์ฉํด๋ ์ํฐํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์๋ ์์ง๋ง, ์์์ฑ ์ปจํ ์คํธ์ ๋ฑ๋ก๋๋ ๊ฒ์ ์กฐํํ ์ํฐํฐ ๋ฟ์
fetch join์์ ๋ช ์ํด์ฃผ๋ฉด join์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์กฐํํ ์ํฐํฐ์ ์ฐ๊ด ์ํฐํฐ(joinํ ์ํฐํฐ) ๋ชจ๋ ์์์ฑ ์ปจํ ์คํธ์ ๋ฑ๋ก
ํ์ง๋ง fetch join์๋ ์น๋ช
์ ๋ฌธ์ ์ ์ด ์๋๋ฐ, ๋ฐ์ดํฐ๋ฅผ ์ผ๋ถ๋ง ์กฐํํด์ค๋ ๊ฒ์ด ๋ถ๊ฐ
ํ๋ค๋ ๊ฒ
์ฆ, SQL์ limit
๊ธฐ๋ฅ์ ์ ์ฉํ ์ ์๋ค๋ ๊ฒ
10๋ง ๊ฐ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ๋ชจ๋ ์กฐํํด์ค๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์น๋ช ์
์ฌ๋ฌ ๋ฒ์ ์ฟผ๋ฆฌ๋ฅผ in ์ ์ ํตํด ํ๋๋ก ๋ฌถ์ด ์คํํ๋๋ก ํ๋ ๋ฐฉ๋ฒ
ํด๊ฒฐ์ด๋ผ๊ธฐ๋ณด๋ค๋ ์ฐํ (๊ฒฐ๊ตญ ์ฌ๋ฌ ๋ฒ์ ์ฟผ๋ฆฌ๊ฐ ๋ฐ์ํ ์ํ์ ์์ผ๋, ๊ทธ ์๋ฅผ batch size๊ฐ M์ด๋ผ๊ณ ํ์ ๋ N/M๊ฐ ๋งํผ ์ค์ด๋ ๊ฒ)
fetch join๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ์ดํฐ๋ฅผ ์ผ๋ถ๋ง ์กฐํํด์ค์ง ๋ชปํ๋ ๋ฌธ์ ์กด์ฌ
์ฟผ๋ฆฌ ๋ฉ์๋์ ํจ๊ป ์กฐํํ ์ฐ๊ด ์ํฐํฐ๋ฅผ ๋ช ์ํ๋ ๋ฐฉ๋ฒ
ํ์ด์ง์ด(๋ฐ์ดํฐ ์ผ๋ถ ์ ์ฌ๊ฐ) ๊ฐ๋ฅํ๊ณ , join์ ํตํด ์ฟผ๋ฆฌ๋ฅผ 1๊ฐ๋ก ์ค์ผ ์ ์๋ค๋ ์ ์์ ์์ ํด๊ฒฐ์ฑ ๋ค๋ณด๋ค๋ ๋ฌธ์ ๊ฐ ์ ์ด ๋ณด์
๊ทธ๋ฌ๋ left outer join
์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ์นดํฐ์์ ๊ณฑ
์ ์ํด ํ๋์ ์ํฐํฐ๊ฐ ์ฌ๋ฌ ๋ฒ ์กฐํ๋๋ ํ์์ด ๋ฐ์ํ ์ ์์
์ด๊ฑด fetch join ๋ํ ๋ง์ฐฌ๊ฐ์ง
๊ฒฐ๊ตญ ์์ 1, 2, 3๋ฒ ํด๊ฒฐ์ฑ
๋ชจ๋ ๋๋ฆ์ ๋ฌธ์ ์ ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ์ด๋ ค์์ด ์์๊ณ , ํ์ฌ์๋ QueryDSL
์ ์ด์ฉํ์ฌ ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์๋ค.
JPQL ๋ ๋ฒจ์์ ์ด ๋ฌธ์ ๋ฅผ ๊น๋ํ๊ฒ ํด๊ฒฐํ๋ ค๋ฉด ์ฟผ๋ฆฌ๊ฐ ๋ณต์กํด์ง๊ณ , ๋ณต์กํ ๋ฌธ์์ด ์ฟผ๋ฆฌ๊ฐ ์ฌ๋ฌ ๊ฐ ์๊ธฐ๋ฉด ๋ณ๊ฒฝ๊ณผ ํ์ฅ์ด ์ด๋ ค์์ ธ ์ ์ง๋ณด์์ ์ฉ์ดํ์ง ์์ ์ฝ๋๊ฐ ๋๊ธฐ ๋๋ฌธ์ด๋ค.