๋ฐฑ์๋ ๊ฐ๋ฐ์ ๊ธฐ๋ณธ ์์์ธ 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 ์กฐํ์์๋ถํฐ ์์ํ๋ฉฐ ์ ์๋ฏธํ ์ฑ๊ณผ๋ฅผ ๊ฑฐ๋ ์ ์์ ๊ฑฐ๋ผ ์๊ฐํ๋ค.
'๐ JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
MapStruct! JPA Entity ๋งคํ ๊ฐ ์ฃผ์ํด์ ์ฌ์ฉํ์ (0) | 2024.03.24 |
---|---|
JPA ์ง๊ณํจ์ sum ์ long ์ ๋ฐํํ๋ค. (0) | 2023.07.26 |
[Spring Data JPA] JPA Enum ํ๋์ ๊ดํ ๋ฌธ์ (1) | 2023.02.21 |
[Spring Data JPA] Transaction ์์ด ์ฝ๊ธฐ (0) | 2023.01.30 |
JPA ๊ฐ๋ ์ ๋ฆฌ (0) | 2022.07.15 |