JPA to JDBC Migration - hyeonwoody/hyeonworld GitHub Wiki

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•˜๋Š” ์ด์œ 

  • ์„ฑ๋Šฅ ํ–ฅ์ƒ

    JPA๋Š” ์ถ”์ƒํ™” ๊ณ„์ธต์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์‹œ ์„ฑ๋Šฅ์ด ์ €ํ•˜ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    JDBC๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์–ด ๋†’์€ ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋” ๋‚ฎ์€ ๋ ˆ๋ฒจ์˜ ์ ‘๊ทผ

    JPA๋Š” ์ œํ•œ์ ์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, ํŠน์ • ์ƒํ™ฉ์—์„œ ์ œ์–ด๊ฐ€ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    JDBC๋Š” DB์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๊ฒŒ ์ฝ”๋“œ๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž‘์—…

์†Œ์Šค์ฝ”๋“œ ์ˆ˜์ •

20240418_010417 20240418_010424 20240420_152047

๊ฒฐ๊ณผ

์„ฑ๋Šฅ ๊ฐœ์„  ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ๊ฐ€์ƒ ์‚ฌ์šฉ์ž 10๋ช…์ด 30์ดˆ ๊ฐ„, ์„œ๋ฒ„์— ํ”Œ๋ ˆ์ด ๊ฐ€๋Šฅํ•œ ๊ฒŒ์ž„ ๋ฆฌ์ŠคํŠธ ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฟผ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋™์ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. JdbcTemplate ์ฟผ๋ฆฌ : "SELECT * FROM game WHERE playable = ?"
  2. JPA ๋ฉ”์„œ๋“œ : List findByPlayable(boolean playable)

JDBCTemplate ์ฟผ๋ฆฌ (1)

20240903_135052

JPA ์ฟผ๋ฆฌ (1)

20240903_125708

JDBCTemplate ์ฟผ๋ฆฌ (2)

20240903_135057

JPA ์ฟผ๋ฆฌ (2)

20240903_130154

์ง€ํ‘œ ๋ถ„์„

๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹  ์š”์ฒญ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ํ‰๊ท ๊ฐ’ ์š”์ฒญ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ์ค‘์•™๊ฐ’ ์š”์ฒญ ์ฒ˜๋ฆฌ์‹œ๊ฐ„ 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 ์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

๊ด€๋ จ ์ปค๋ฐ‹

๐ŸšจBREAKINGCHANGE: Refactor Repository using JDBC Template

โš ๏ธ **GitHub.com Fallback** โš ๏ธ