๐ŸŒฑ → ๐ŸŒณ

JPA ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ž€? ๋ณธ๋ฌธ

Server/Java & Spring

JPA ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ž€?

BAY 2023. 6. 1. 20:37
728x90

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ ์ด์ 

1. 1์ฐจ ์บ์‹œ ์กฐํšŒ

  • JPA๋Š” DB๋ฅผ ์ง์ ‘ ์กฐํšŒํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ 1์ฐจ ์บ์‹œ, ์ฆ‰ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ์กฐํšŒํ•œ๋‹ค.
    ๋”ฐ๋ผ์„œ DB์˜ I/O ๋ถ€๋‹ด์ด ์ ๊ฒŒ ๋ฐœ์ƒํ•˜์—ฌ ์„ฑ๋Šฅ์˜ ์ด์ ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ด JPA์˜ ์žฅ์ ์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    ๊ธฐ๋ณธ์ ์œผ๋กœ JPA๋Š” Entity์˜ PK๋ฅผ ์ด์šฉํ•˜์—ฌ ์‹๋ณ„์„ ํ•˜๊ฒŒ ๋˜๋ฉฐ, 1์ฐจ ์บ์‹œ์—๋Š” ๊ณ ์œ  ์‹๋ณ„์ž ๊ฐ’์œผ๋กœ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค.
  • JPA์˜ findById() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋ฉด
    ์šฐ์„ , 1์ฐจ ์บ์‹œ์—์„œ ์‹๋ณ„์ž ๊ฐ’์œผ๋กœ ์ €์žฅ๋œ Entity๋ฅผ ์ฐพ๊ณ  1์ฐจ ์บ์‹œ์— ์กด์žฌํ•˜๋ฉด ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ด, ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด DB์— ์ง์ ‘ ์กฐํšŒํ•ด 1์ฐจ ์บ์‹œ์— ์ ์žฌํ•œ ํ›„ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

2. ๋™์ผ์„ฑ ๋ณด์žฅ

3. ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜๋Š” ์“ฐ๊ธฐ ์ง€์—ฐ

4. ๋ณ€๊ฒฝ ๊ฐ์ง€(Dirty Checking)

  • JPA๋Š” Entity์˜ Update๋ฅผ ๋”ํ‹ฐ ์ฒดํ‚น ๋ฐฉ์‹์œผ๋กœ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค.
    ๋”ํ‹ฐ ์ฒดํ‚น์ด๋ž€ Entity์˜ ๋ณ€๊ฒฝ ๊ฐ์ง€๋ฅผ ๋งํ•œ๋‹ค. JPA๊ฐ€ ํŠธ๋žœ์žญ์…˜์ด ์ข…๋ฃŒ๋˜๋Š” ์‹œ์ ์— Entity์˜ ๋ณ€๊ฒฝ๋œ ๊ฐ’์„ ํ™•์ธํ•˜๊ณ  update๋ฅผ ๋ฌธ์„ DB์— ์ž๋™์œผ๋กœ ๋ฐ˜์˜ํ•œ๋‹ค.
    ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ Entity๋ฅผ update๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ JPA Engine์—๊ฒŒ ์ผ์ž„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ์—ฌ๊ธฐ์„œ JPA๋Š” 1์ฐจ ์บ์‹œ์—์„œ ์Šค๋ƒ…์ƒท(Snapshot)์„ ์‚ฌ์šฉํ•œ๋‹ค.
    JPA๋Š” Entity๋ฅผ ์กฐํšŒํ•˜์—ฌ 1์ฐจ ์บ์‹œ์— ์Šค๋ƒ…์ƒท์„ ์ƒ์„ฑํ•œ๋‹ค. ์ดํ›„ ํŠธ๋žœ์žญ์…˜์ด ๋๋‚˜๋Š” ์‹œ์ ์— ์กฐํšŒํ•œ ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด์™€ ์Šค๋ƒ…์ƒท์„ ๋น„๊ตํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ๊ฐ’๋งŒ Update๋ฅผ ๋ฐ˜์˜ํ•œ๋‹ค.
  • ์ด๋•Œ ์Šค๋ƒ…์ƒท์œผ๋กœ ๊ด€๋ฆฌ๋˜๋ ค๋ฉด ์—”ํ‹ฐํ‹ฐ์˜ ์ƒํƒœ๋Š” ์˜์† ์ƒํƒœ์—ฌ์•ผ ํ•œ๋‹ค. ๋˜ํ•œ Trasaction์ด readOnly ๋ชจ๋“œ์ผ ๊ฒฝ์šฐ ์Šค๋ƒ…์ƒท์€ ์ƒ์„ฑ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ณ€๊ฒฝ ๊ฐ์ง€๋Š” ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.

5. ์ง€์—ฐ๋กœ๋”ฉ(Lazy Loading)

 

Reference

https://velog.io/@mnetna/JPA%EC%9D%98-%EC%98%81%EC%86%8D%EC%84%B1-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8%EB%9E%80

728x90