๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“— JPA

[Spring Data JPA] ํ•œ๋ฐฉ ์ฟผ๋ฆฌ์˜ ํšจ๋Šฅ (feat : JPQL)

by GroovyArea 2023. 2. 1.

๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์˜ ๊ธฐ๋ณธ ์†Œ์–‘์ธ SQL์„ ์ž‘์„ฑํ•˜๋Š” ์‹ค๋ ฅ์€ ๋›ฐ์–ด๋‚  ์ˆ˜๋ก ๋”ํ•  ๋‚˜์œ„ ์—†๋‹ค.

์‹ค์ œ๋กœ ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์ด ๋ฐœ์ƒํ•˜๋Š” ์„œ๋น„์Šค์—์„œ๋Š” ์ด ์„ฑ๋Šฅ์„ ๋งค์šฐ ์ค‘์š”์‹œ ํ•˜๋Š”๋ฐ,
์ผ๋ฐ˜์ ์ธ ํ™˜๊ฒฝ์—์„œ๋Š” DB ์กฐํšŒ์  ์ธก๋ฉด์—์„œ ํฐ ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์ด๋Œ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” ๊ฐœ์„  ๋ฐฉ์•ˆ์ด๋ผ๊ณ ๋“ค ํ•œ๋‹ค.

SQL์„ ๊ณต๋ถ€ํ•˜๊ณ , JPA ๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉฐ ํ•ญ์ƒ ๋น ์งˆ ์ˆ˜ ์—†๋Š” ์–˜๊ธฐ, ์„ฑ๋Šฅ ์ตœ์ ํ™”.

ํ•ญ์ƒ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ๊ฐœ์„ ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ์ฃผ์–ด์กŒ๊ณ , ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ๋‚ด ์ƒ๊ฐ๊ณผ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค.

DB ERD Model

opnions entity๋ฅผ paging ์ฒ˜๋ฆฌํ•ด์„œ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ๋ฝ‘์•„์•ผ ํ•˜๋Š” ์ƒํ™ฉ.

์ฃผ์–ด์ง„ ์ค‘์š” ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” user_id ๋ฟ์ด๋‹ค.

1. ๋ณดํ†ต ๊ฐ™์œผ๋ฉด Document Entity๋ฅผ ๋จผ์ € ์กฐํšŒํ•œ ํ›„,
opinions ๋ฅผ ํŽ˜์ด์ง• ์กฐํšŒํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•  ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿผ ์ฟผ๋ฆฌ๊ฐ€ ๋‘๋ฒˆ ๋ฐœ์ƒํ•œ๋‹ค.

2. ํ•œ๋ฒˆ์— ๋ฌถ์–ด์„œ ํ•œ๋ฐฉ ์ฟผ๋ฆฌ๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ?

=> join์œผ๋กœ ํ•ด๊ฒฐํ•˜๋ฉด ๋œ๋‹ค.
๋ณดํ†ต์€ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์ƒ๊ฐํ•˜๋Š”๋ฐ, Mysql ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด inno db engine ์ด ์•„์ง์€ ์„œ๋ธŒ ์ฟผ๋ฆฌ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ์ตœ์ ํ™” ๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— join ์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

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

๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ•œ๋ฒˆ ์‚ดํŽด๋ณด์ž.

๊ฒฐ๊ณผ

1. ์ „์ž์˜ ๋ฐฉ๋ฒ•๋Œ€๋กœ join์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ๊ฐ๊ฐ์˜ ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ ธ์„ ๊ฒฝ์šฐ
=> ์ฟผ๋ฆฌ๊ฐ€ ๋‘๋ฒˆ ๋ฐœ์ƒํ–ˆ๋‹ค.

2. ํ›„์ž์˜ ๋ฐฉ๋ฒ•๋Œ€๋กœ ๋ถ€๋ชจ๊นŒ์ง€ join ํ•ด์„œ ํ•œ๋ฐฉ ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ ธ์„ ๊ฒฝ์šฐ
=> ์ฟผ๋ฆฌ๊ฐ€ ํ•œ๋ฒˆ๋งŒ ๋ฐœ์ƒํ•œ๋‹ค.

=> ์‹œ๊ฐ„ ๊ฐ์†Œ๊ฐ€ ํ™•์—ฐํ•˜๋‹ค.

๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ 20๊ฐœ ๋‹จ์œ„์˜€๊ณ , ๊ทธ ์ค‘์—์„œ size๊ฐ€ 3๊ฐœ์ธ paging ์ฒ˜๋ฆฌ ์ฟผ๋ฆฌ์ธ๋ฐ๋„, ์ด๋ ‡๊ฒŒ ์ฐจ์ด๋‚ฌ๋‹ค.
100๊ฐœ, 1000๊ฐœ, 100000๊ฐœ ๋‹จ์œ„๋กœ ๋ถˆ์–ด๋‚˜๋ฉด ์ฐจ์ด๋Š” ์ปค์งˆ ๊ฒƒ์ด๋‹ค.

์•ž์œผ๋กœ GET ๊ด€๋ จ API์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋Š” DB ์กฐํšŒ์—์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฉฐ ์œ ์˜๋ฏธํ•œ ์„ฑ๊ณผ๋ฅผ ๊ฑฐ๋‘˜ ์ˆ˜ ์žˆ์„ ๊ฑฐ๋ผ ์ƒ๊ฐํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•