๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ŒCS/DB

[DB] N + 1 ๋ฌธ์ œ

by dar0m! 2021. 4. 11.

๊ฐœ๋…

ORM์—์„œ ์„ฑ๋Šฅ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ฐ€์žฅ ํ”ํ•œ ์›์ธ์œผ๋กœ N+1 Problem์ด ์–ธ๊ธ‰๋œ๋‹ค.

N+1 Problem์€ ์ฟผ๋ฆฌ 1๋ฒˆ์œผ๋กœ N๊ฑด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™”๋Š”๋ฐ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ์ด N๊ฑด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ ์ˆ˜ ๋งŒํผ ๋ฐ˜๋ณตํ•ด์„œ 2์ฐจ์ ์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

  • ORM : (Object Relational Mapping) ๊ฐ์ฒด-๊ด€๊ณ„ ๋งคํ•‘
    • ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ๋งคํ•‘(์—ฐ๊ฒฐ)ํ•ด์ฃผ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.
    • ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•œ๋‹ค.
    • ๊ฐ์ฒด ๋ชจ๋ธ๊ณผ ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ ๊ฐ„์— ๋ถˆ์ผ์น˜๊ฐ€ ์กด์žฌํ•œ๋‹ค.
    • ORM์„ ํ†ตํ•ด ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ SQL์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ๋ถˆ์ผ์น˜๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.
    • Persistence API๋ผ๊ณ ๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • JPA : (Java Persistence API)
    • ์ž๋ฐ” ์ง„์˜์˜ ORM ๊ธฐ์ˆ  ํ‘œ์ค€
    • ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ์Œ
    • JPA ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๋Œ€ํ‘œ์ ์ธ ์˜คํ”ˆ์†Œ์Šค๊ฐ€ Hibernate
    • ์žฅ์ 
      • ๊ฐ์ฒด ์ค‘์‹ฌ ๊ฐœ๋ฐœ
      • ์ƒ์‚ฐ์„ฑ(๊ฐ„๋‹จํ•œ CRUD)
      • ์œ ์ง€๋ณด์ˆ˜
      • object์™€ RDB๊ฐ„ ํŒจ๋Ÿฌ๋‹ค์ž„ ๋ถˆ์ผ์น˜ ํ•ด๊ฒฐ

 

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

  1. Join Fetch
  2. @EntityGraph

์œ„์˜ ๋‘ ๋ฐฉ๋ฒ•์€ ๊ณตํ†ต์ ์œผ๋กœ ์นดํƒ€์‹œ์•ˆ ๊ณฑ์ด ๋ฐœ์ƒํ•˜์—ฌ ๊ฒฐ๊ณผ๊ฐ€ ์ค‘๋ณต ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

  1. ์ด๋•Œ๋Š” ์ผ๋Œ€๋‹ค ํ•„๋“œ์˜ ํƒ€์ž…์„ Set์œผ๋กœ ์„ ์–ธํ•œ๋‹ค.
  2. List๊ฐ€ ๋” ์ ํ•ฉํ•˜๋‹ค๋ฉด, Query์— distinct๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ๋‹ค.

 

์ฐธ๊ณ 

 

JPA N+1 ๋ฌธ์ œ ๋ฐ ํ•ด๊ฒฐ๋ฐฉ์•ˆ

์•ˆ๋…•ํ•˜์„ธ์š”? ์ด๋ฒˆ ์‹œ๊ฐ„์—” JPA์˜ N+1 ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์ฝ”๋“œ๋Š” Github์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•จ๊ป˜ ๋ณด์‹œ๋ฉด ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šฐ์‹ค ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. (๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๋Š” Github์™€ ์„ธ๋ฏธ

jojoldu.tistory.com

 

'๐Ÿ“ŒCS > DB' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[DB] Connection Pool  (0) 2021.04.18
[DB] ์ •๊ทœํ™”  (0) 2021.04.11
[DB] Index  (1) 2021.04.04
[SQL] ๋‹ค์ค‘์ •๋ ฌ ORDER BY  (1) 2020.01.09
[MySQL] Resotre Workspace ์˜ค๋ฅ˜  (0) 2019.12.10

๋Œ“๊ธ€