nPlusOne

N+1 ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ

Reference

N+1 ๋ฌธ์ œ JPA N+1 ๋ฌธ์ œ ๋ฐ ํ•ด๊ฒฐ๋ฐฉ์•ˆ MultipleBagFetchException ๋ฐœ์ƒ์‹œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• JPA N+1 ๋ฐœ์ƒ์›์ธ๊ณผ ํ•ด๊ฒฐ๋ฐฉ๋ฒ• fetch join ์‹œ ๋ณ„์นญ๊ด€๋ จ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค

ํŽ˜์น˜ ์กฐ์ธ๊ณผ ์ผ๋ฐ˜ ์กฐ์ธ์˜ ์ฐจ์ด

  • ์ผ๋ฐ˜ ์กฐ์ธ ์‹คํ–‰ ์‹œ ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ํ•จ๊ป˜ ์กฐํšŒํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • JPQL์€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋•Œ, select์ ˆ์— ์ง€์ •ํ•œ ์—”ํ‹ฐํ‹ฐ๋งŒ ์กฐํšŒํ•  ๋ฟ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • ๋”ฐ๋ผ์„œ JPQL์‹คํ–‰ ํ›„, ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ n๊ฐœ๊ฐ€ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์—†์„ ๊ฒฝ์šฐ n๊ฐœ์˜ ์ฟผ๋ฆฌ๋ฅผ ์ถ”๊ฐ€๋กœ ์‹คํ–‰ํ•œ๋‹ค.

  • ๊ทธ๋ž˜์„œ ํŽ˜์น˜ ์กฐ์ธ์„ ์‚ฌ์šฉํ•ด์„œ ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ๋„ ํ•จ๊ผ ์กฐํšŒํ•˜๋Š” ๊ฒƒ.

ํŽ˜์น˜ ์กฐ์ธ์˜ ํŠน์ง•๊ณผ ํ•œ๊ณ„

  • ํŽ˜์น˜ ์กฐ์ธ ๋Œ€์ƒ์—๋Š” ๋ณ„์นญ์„ ์ค„ ์ˆ˜ ์—†๋‹ค.

    • ๋งŒ์•ฝ ์ค„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•ด๋„, jpa์„ค๊ณ„์ƒ ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์ œ์•ฝ์„ ๋‘๋Š” ๊ฒƒ์€ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

    • ์˜ˆ๋ฅผ ๋“ค์–ด, team์˜ member๋ฅผ list๋กœ ๊ฐ€์ ธ์˜ฌ ๋•Œ where๋กœ ์กฐ๊ฑด์„ ๊ฑธ์–ด ๋ช‡ ๊ฐœ๋งŒ ๋นผ์„œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

    • ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์„ ์œ„ํ•ด ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ๋Š” ๋‹ค ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด ๋งž๋‹ค.

  • ๋‘˜ ์ด์ƒ์˜ ์ปฌ๋ ‰์…˜์€ ํŽ˜์น˜ ์กฐ์ธํ•  ์ˆ˜ ์—†๋‹ค.

    • @Batchsize์‚ฌ์šฉ

    • ์œ„ 'MultipleBagFetchException ๋ฐœ์ƒ์‹œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•' ์ฐธ๊ณ 

  • ์ผ๋Œ€๋‹ค ํ•„๋“œ๋ฅผ ํŽ˜์น˜ ์กฐ์ธํ•˜๋ฉด ํŽ˜์ด์ง• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ํž˜๋“ค๋‹ค.

    • ์†Œ์œ„ ๋งํ•˜๋Š” ๋ฐ์ดํ„ฐ ๋ปฅํŠ€๊ธฐ, ์นดํ…Œ์‹œ์•ˆ ๊ณฑ์ด ๋ฐœ์ƒํ•˜์—ฌ ํŽ˜์ด์ง•ํ•˜๊ธฐ๊ฐ€ ๊นŒ๋‹ค๋กญ๋‹ค.

    • ์˜ˆ๋ฅผ ๋“ค์–ด, db์—์„œ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋กœ ๋ฌถ์—ฌ์•ผ ํ•  ๋กœ์šฐ๋“ค์ด ๋‚ฑ๊ฐœ๋กœ ์ทจ๊ธ‰๋˜๋Š” ๊ฒƒ์„ ๋“ค ์ˆ˜ ์žˆ๋‹ค.

  • ๋‹ค๋Œ€์ผ ํ•„๋“œ, ์ผ๋Œ€์ผ ํ•„๋“œ๋Š” ํŽ˜์น˜ ์กฐ์ธํ•ด๋„ ์นดํ…Œ์‹œ์•ˆ ๊ณฑ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํŽ˜์ด์ง•์ด ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

Last updated