N + 1 ๋ฌธ์ œ๋ž€?


N + 1 ๋ฌธ์ œ๋Š” ์ฆ‰์‹œ ๋กœ๋”ฉ๊ณผ ์ง€์—ฐ ๋กœ๋”ฉ ์ „๋žต ๊ฐ๊ฐ ์ƒํ™ฉ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์œ„ ์—”ํ‹ฐํ‹ฐ๋“ค์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ํ•œ ์ฟผ๋ฆฌ์—์„œ ๋ชจ๋‘ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ํ•„์š”ํ•œ ๊ณณ์—์„œ ๊ฐ๊ฐ ์ฟผ๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์ฆ‰์‹œ ๋กœ๋”ฉ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋Š” JPQL ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ „์ฒด ์กฐํšŒ๋ฅผ ํ–ˆ์„ ๋•Œ, ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๊ฐ€ ์•„๋‹Œ DB ์—์„œ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•œ ๋‹ค์Œ ์ฆ‰์‹œ ๋กœ๋”ฉ ์ „๋žต์ด ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ง€์—ฐ ๋กœ๋”ฉ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋Š” ์ง€์—ฐ ๋กœ๋”ฉ ์ „๋žต์„ ์‚ฌ์šฉํ•œ ํ•˜์œ„ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋กœ๋“œํ•  ๋•Œ JPA ์—์„œ ํ”„๋ก์‹œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์‹ค์ฒดํ™”ํ•  ๋•Œ ํ•ด๋‹น ์—”ํ‹ฐํ‹ฐ๋ฅผ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€์ ์ธ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•


Fetch Join

  • JPQL ์˜ join fetch ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ํ•œ ๋ฒˆ์— ๋ชจ๋‘ ๊ฐ€์ ธ์˜จ๋‹ค.

@EntityGraph

@BatchSize