JPA to JDBC Migration - hyeonwoody/hyeonworld GitHub Wiki
-
์ฑ๋ฅ ํฅ์
JPA
๋ ์ถ์ํ ๊ณ์ธต์ ์ถ๊ฐํ์ฌ ๋ฐ์ดํฐ ์ ๊ทผ ์ ์ฑ๋ฅ์ด ์ ํ ๋ ์ ์์ต๋๋ค.JDBC
๋ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์ ์ดํ ์ ์์ด ๋์ ์ฑ๋ฅ์ ๋ฌ์ฑํ ์ ์์ต๋๋ค. -
๋ ๋ฎ์ ๋ ๋ฒจ์ ์ ๊ทผ
JPA
๋ ์ ํ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ํน์ ์ํฉ์์ ์ ์ด๊ฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค.JDBC
๋ DB์์ ์ํธ ์์ฉ์ ๋ํ ๋ ๋ง์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ์ฝ๋๋ฅผ ์กฐ์ ํ ์ ์์ต๋๋ค.
์ฑ๋ฅ ๊ฐ์ ํ
์คํธ๋ฅผ ์ํด ๊ฐ์ ์ฌ์ฉ์ 10๋ช
์ด 30์ด ๊ฐ, ์๋ฒ์ ํ๋ ์ด ๊ฐ๋ฅํ ๊ฒ์ ๋ฆฌ์คํธ
์์ฒญ์ ๋ณด๋
๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฟผ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ด ๋์ผ ํฉ๋๋ค.
- JdbcTemplate ์ฟผ๋ฆฌ : "SELECT * FROM game WHERE playable = ?"
- JPA ๋ฉ์๋ : List findByPlayable(boolean playable)
๋ฐ์ดํฐ ์ก์์ | ์์ฒญ ์ฒ๋ฆฌ ์๊ฐ ํ๊ท ๊ฐ | ์์ฒญ ์ฒ๋ฆฌ ์๊ฐ ์ค์๊ฐ | ์์ฒญ ์ฒ๋ฆฌ์๊ฐ P(90) | ์์ฒญ ์ฒ๋ฆฌ ์๊ฐ P(95) | RPS | |
---|---|---|---|---|---|---|
JDBC Template | ์์ ๋ฐ์ดํฐ: ์ฝ 349 MB ์ก์ ๋ฐ์ดํฐ: ์ฝ 31 MB |
943.9ยตs | 832ยตs | 1.3ms | 1.55ms | 10,136 ์์ฒญ/์ด |
JPA | ์์ ๋ฐ์ดํฐ: ์ฝ 308 MB ์ก์ ๋ฐ์ดํฐ: ์ฝ 27 MB |
1.07ms | 993.32ยตs | 1.43ms | 1.63ms | 8,933 ์์ฒญ/์ด |
ํ
์คํธ ์๋๋ฆฌ์ค์์ JDBC Template์ด JPA๋ณด๋ค ์ ๋ฐ์ ์ผ๋ก ๋ ์ฐ์ํ ์ฑ๋ฅ์ ๋ณด์ฌ์ฃผ์์ต๋๋ค.
JDBC Template์ ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ , ์์ฒญ์ ๋ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ฉฐ, ๋ฐ๋ณต ์์
๋ ๋ ์ ์ํ๊ฒ ์๋ฃํ์ต๋๋ค.
์ด๋ JDBC Template์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ง์ ์ ์ธ ์ํธ์์ฉ์ ์์ด JPA๋ณด๋ค ์ค๋ฒํค๋๊ฐ ์ ๊ธฐ ๋๋ฌธ์ผ๋ก ๋ณด์
๋๋ค.
JPA๋ ์ถ๊ฐ์ ์ธ ์ถ์ํ ๊ณ์ธต๊ณผ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋๋ฐ, ์ด๋ก ์ธํด ์ผ๋ถ ์ฑ๋ฅ ๋น์ฉ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
๋์ฑ์ด, JDBC Template์ ์ฌ์ฉํ ๋๋ SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์์ฑํ๋ฏ๋ก, ํ์ํ ํ๋๋ง ์ ํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
(Spring Data JPA์์ @Query ์ด๋
ธํ
์ด์
์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์์ฑํ ์ ์์ต๋๋ค.)