728x90
๋ฐ˜์‘ํ˜•
์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA - Auditing

๋ชจ๋“  ์†Œ์Šค ์ฝ”๋“œ๋Š” ์—ฌ๊ธฐ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. Entity๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ๋•Œ, ๊ฐ๊ฐ์˜ ์‹œ๊ฐ„๊ณผ ๋‹ด๋‹น์ž๋ฅผ ์ถ”์ ํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์‹ค๋ฌด์—์„œ ์ด๋ ฅ์„ ๋‚จ๊ธฐ๊ธฐ์œ„ํ•ด ๋งŽ์ด ์“ฐ์ด๋Š” ๊ธฐ๋Šฅ์ธ๋ฐ์š”, ์ด๋ ‡๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„  Entity๋งˆ๋‹ค ํ•„์š”์—๋”ฐ๋ผ ์ƒ์„ฑ ์‹œ๊ฐ„, ์ˆ˜์ • ์‹œ๊ฐ„, ์ƒ์„ฑํ•œ ์‚ฌ๋žŒ, ์ˆ˜์ •ํ•œ ์‚ฌ๋žŒ ์ด ๋„ค ๊ฐ€์ง€ ์†์„ฑ์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. JPA๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ Entity๊ฐ€ ๊ฒฐ๊ตญ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ณตํ†ต์ ์ธ ์†์„ฑ์„ ๋ชจ๋‘ ๊ฐ€์ง€๋Š” ํด๋ž˜์Šค๋ฅผ ์„ค๊ณ„ํ•˜๋ฉด ๊ฐ„๋‹จํžˆ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”, ๊ทธ ๋ฐฉ๋ฒ•์„ ํ•œ ๋ฒˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. BaseEntity ์ •์˜ ์ƒ์„ฑ ์‹œ๊ฐ„, ์ˆ˜์ • ์‹œ๊ฐ„์„ ๊ฐ€์ง€๋Š” Entity๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. package io.lcalmsky.springdatajpa.domain.entity; import javax.persistence.Colu..

JPA 2021. 7. 9. 12:00
์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA - Custom Repository Best Practice

์‚ฌ์šฉ์ž ์ •์˜ Repository Best Practice ์‚ฌ์šฉ์ž ์ •์˜ Repository๋ฅผ ๋งŒ๋“ค ๋•Œ ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ์ž ์ •์˜ Repository๋ผ๊ณ  ํ•จ์€, JpaRepository๋ฅผ ์ƒ์†ํ•ด์„œ ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ตฌํ˜„์ฒด์—์„œ ์ง์ ‘ JPA๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ MyBatis, JdbcTemplate, QueryDSL ๋“ฑ์„ ์ด์šฉํ•ด ๊ตฌํ˜„ํ•œ ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ƒ๋Œ€์ ์œผ๋กœ(?) ๋‚˜์œ ์˜ˆ์‹œ Entity๊ฐ€ Member, Team์ด ์กด์žฌํ•˜๊ณ  Member๋Š” JpaRepository๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  Team์€ ์‚ฌ์šฉ์ž ์ •์˜ Repository๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ๊ทธ๋ƒฅ ๊ตฌํ˜„ํ•ด๋„ ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ MemberRepository๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ CustomMemberRepository๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์„œ S..

JPA 2021. 7. 7. 09:42
์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA - Hint & Lock

๋ชจ๋“  ์†Œ์Šค ์ฝ”๋“œ๋Š” ์—ฌ๊ธฐ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. Hint SQL์—์„œ Hint๋ฅผ ์‚ฌ์šฉํ•˜๋“ฏ์ด JPA์—์„œ๋„ JPA ๊ตฌํ˜„์ฒด์— ํžŒํŠธ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์กฐํšŒ๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ(Read Only) ๊ธฐ๋ณธ์ ์œผ๋กœ JPA๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ฒŒ๋˜๋ฉด ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅ๋˜์–ด ๊ด€๋ฆฌ๋˜๊ณ , ๊ทธ ๊ฐ’์„ ์ˆ˜์ •ํ•œ ๋’ค flush()ํ•˜๊ฑฐ๋‚˜ dirty checking์ด ๋ฐœ์ƒํ•˜๋ฉด ์—…๋ฐ์ดํŠธ ์ฟผ๋ฆฌ๋„ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. Hint๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ด ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ๋ง‰๊ณ  ํ˜น์‹œ ๋ชจ๋ฅผ ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋Œ€ํ•ด ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € Repository์— ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. package io.lcalmsky.springdatajpa.domain.repository; import io.lca..

JPA 2021. 7. 5. 07:57
์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA - ๋ฒŒํฌ ์—…๋ฐ์ดํŠธ

๋ชจ๋“  ์†Œ์Šค ์ฝ”๋“œ๋Š” ์—ฌ๊ธฐ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. JPA๋Š” ๋ณดํ†ต ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ณ€๊ฒฝ ๊ฐ์ง€(dirty checking)๋ฅผ ํ†ตํ•ด DB์— ์—…๋ฐ์ดํŠธ ํ€ด๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์—…๋ฐ์ดํŠธ๋“ค์€ ๊ฑด ๋ณ„๋กœ select ์ดํ›„ update๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ฒœ ๊ฑด์„ ์—…๋ฐ์ดํŠธ ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ ๋น„ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. JPA๋ฅผ ์‚ฌ์šฉํ•ด์„œ๋„ ์ˆ˜ ์ฒœ, ์ˆ˜ ๋งŒ ๊ฑด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๋ฒŒํฌ ์—…๋ฐ์ดํŠธ(Bulk Update)์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. @Modifying ์• ๋„ˆํ…Œ์ด์…˜ ๋ฒŒํฌ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„  @Query์™€ ํ•จ๊ป˜ @Modifying ์• ๋„ˆํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์ด๊ฐ€ N์‚ด ์ด์ƒ์ธ ์ „์ฒด ํšŒ์›์˜ ๋‚˜์ด๋ฅผ 1์”ฉ ์ฆ๊ฐ€์‹œ์ผœ์•ผ ํ•œ๋‹ค๋Š” ์š”๊ตฌ์‚ฌํ•ญ์ด ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์ด๋ฅผ ๊ตฌํ˜„ํ•œ ์†Œ์Šค ์ฝ”๋“œ ์ž…๋‹ˆ๋‹ค. package i..

JPA 2021. 7. 1. 20:28
728x90
๋ฐ˜์‘ํ˜•
๊ณต์ง€์‚ฌํ•ญ
Total
71,764
Today
127
Yesterday
133
๋งํฌ
«   2022/05   »
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
๊ธ€ ๋ณด๊ด€ํ•จ