Dev-Kyuu
article thumbnail
๋™์‹œ์„ฑ ์ œ์–ด Chap 2 | ๋ถ„์‚ฐ๋ฝ
๐Ÿ“ JPA 2023. 1. 24. 19:14

์ด๋ฒˆ์ฃผ ๋ฉ˜ํ† ๋ง ์‹œ ๋ฉ˜ํ† ๋‹˜๊ป˜์„œ ๋‚ด๊ฐ€ ๋งŒ๋“  Redis Cache + Scheduler + Spring Batch๋ฅผ ์ด์šฉํ•œ Update์ฒ˜๋ฆฌ ๋กœ์ง ๊ด€๋ จํ•ด์„œ ๋™์‹œ์— ์—ฌ๋Ÿฌ ์„œ๋ฒ„๊ฐ€ ์ ‘๊ทผํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋  ๊ฒƒ ๊ฐ™๋‚˜์š”? ๋ผ๋Š” ์งˆ๋ฌธ์„ ๋˜์ ธ์ฃผ์…จ๊ณ  ๋ฉ˜ํ† ๋ง ์ง์ „๊นŒ์ง€ ํ•ด๋‹น ๋กœ์ง์„ ๋งŒ๋“ค์–ด๋‚ด๋Š”๋ฐ์— ๊ธ‰๊ธ‰ํ–ˆ๋˜ ๋‚˜๋Š” ๐Ÿ™‹๐Ÿป Redis์„œ๋ฒ„๋ฅผ ๊ฐ ๋กœ์ปฌ์— ์ƒ์„ฑํ•œ๋‹ค๋ฉด ์•„๋ฌด ๋ฌธ์ œ๊ฐ€ ์—†์ง€ ์•Š์„๊นŒ์šฉ ? ์ด๋ผ๊ณ  ๋Œ€๋‹ต์„ ํ•˜์˜€๋‹ค. ์• ๊ธฐ๋“ค ์„ธ๋ช…์ด ์˜ค๋ฝ๊ธฐ ํ•˜๋‚˜ ๊ฐ€์ง€๊ณ  ์‹ธ์šฐ๊ณ ์žˆ๋Š”๋ฐ ์ด๊ฑธ ์–ด๋–ป๊ฒŒ ์‚ฌ์ด์ข‹๊ฒŒ ๋‚˜๋ˆ ์„œ ๋†€๋„๋ก ํ•  ์ˆ˜ ์žˆ์„๊นŒ? ๋Œ€ํ•œ ์งˆ๋ฌธ์„ ์˜ค๋ฝ๊ธฐ๋ฅผ ์„ธ๊ฐœ๋ฅผ ๋‘๋ฉด ๋˜์ง€ ์•Š๋‚˜์š”?์˜ ๋‹ต๋ณ€์„ ํ•œ ์…ˆ์ž„ ๋Œ€๋‹ต์ด ํ‹€๋ ธ๋‹ค๊ณ  ํ• ์ˆ˜๋Š” ์—†์ง€๋งŒ ๋™์‹œ์„ฑ ์ œ์–ด ๋ถ€๋ถ„์„ ์•„์˜ˆ ์ƒ๊ฐ๋„ ์•ˆํ•œ๊ฑธ ๋ฐ”๋กœ ๋“คํ‚ฌ์ˆ˜ ์žˆ๋Š” ๊ตฌ๋ฌธ์ด์˜€๋‹ค ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ ๊ทธ๋ž˜์„œ ํ•œ๋ฐœ ๋Šฆ์—ˆ์ง€๋งŒ ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์œ„ํ•ด์„œ ๊ณต๋ถ€..

article thumbnail
๋™์‹œ์„ฑ ์ œ์–ด Chap 1 | ๋น„๊ด€์  ๋ฝ, ๋‚™๊ด€์  ๋ฝ ?
๐Ÿ“ JPA 2023. 1. 24. 18:18

๋Œ€๋Ÿ‰์˜ ํŠธ๋ž˜ํ”ฝ์„ ํ•ธ๋“ค๋งํ•˜๊ธฐ ์œ„ํ•œ ๋™์‹œ์„ฑ ์ œ์–ด ๊ธฐ๋ฒ• ์ค‘ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ ๊ทธ์ค‘์—์„œ ๋น„๊ด€์  ๋ฝ๊ณผ, ๋‚™๊ด€์  ๋ฝ ๋‘ ๋ฝ์˜ ์ฐจ์ด๋ฅผ ์•Œ์•„๋ณด์ž ๐Ÿ‘€ ๋น„๊ด€์ ๋ฝ : ์ž์› ์š”์ฒญ์— ๋”ฐ๋ผ์„œ ๋™์‹œ์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ• ๊ฒƒ์ด๋ผ๊ณ  ์‚ฌ์ „์— ์˜ˆ์ธกํ•˜๊ณ , ๋ฝ์„ ๊ฑธ์–ด๋ฒ„๋ฆฌ๋Š” ๋ฐฉ๋ฒ•๋ก  : ํŠธ๋žœ์žญ์…˜์˜ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์ด ์ž์›์— ์ ‘๊ทผ์‹œ ๋ฝ์„ ๊ฑธ๊ณ , ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•จ : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ Shared Lock(๊ณต์œ , ์ฝ๊ธฐ ์ž ๊ธˆ), Exclusive Lock(๋ฐฐํƒ€, ์“ฐ๊ธฐ ์ž ๊ธˆ)์„ ๊ฑด๋‹ค. 1. Shared Lock - ์ ‘๊ทผํ•œ ํŠธ๋žœ์žญ์…˜์ด ์ž‘์—…์ค‘์ผ ๋•Œ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ๋Š” ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•˜๊ณ , Exclusive Lock ์ ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. 2. Exclusive Lock - ์ ‘๊ทผํ•œ ํŠธ๋žœ์žญ์…˜์ด ์ž‘์—…์ค‘์ผ ๋•Œ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ๋Š”..

article thumbnail
JPA | JPA With Native Query
๐Ÿ“ JPA 2022. 12. 14. 11:13

JPA(Java Persistence API)๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, JPA์—์„œ ์ œ๊ณตํ•˜๋Š” ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ ์™ธ SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•˜์—ฌ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ๋‚˜์˜ ๊ฒฝ์šฐ์—๋Š” ํ…Œ์ด๋ธ”์— ์–ด๋–ค ์กฐ๊ฑด์˜ ๊ฐฏ์ˆ˜๋ฅผ ๊ตฌํ• ๋•Œ Entity์—์„œ @Folmura๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ–ˆ์—ˆ๋Š”๋ฐ, Entity์—์„œ ์ง์ ‘ DB์— ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฌ๋Š” ๊ฑด ์šฉ๋„ ๋ถ„๋ฆฌ์˜ ๋ชฉ์ ์—์„œ ๊ถŒ๊ณ ํ•˜์ง€์•Š๋Š”๋‹ค๊ณ ํ•˜์—ฌ JPA์˜ native query๋ฅผ ์ด์šฉํ•˜์—ฌ ์ˆ˜์ • ๊ตฌํ˜„ํ•˜์˜€๋‹ค. NatvieQuery๋Š” JPQL์ด ์•„๋‹Œ SQL๋ฅผ ์ง์ ‘ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. function๊ณผ join๋ฅผ ํ•˜๋Š” ๊ฒฝ์šฐ JPQL๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ SQL๋ฅผ ์ง์ ‘ ์ •์˜ํ• ์ˆ˜์žˆ๋Š” NativeQuery๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๐Ÿ“@Formula๋ฅผ ์‚ฌ์šฉํ•œ Inner query ์ด์šฉ ๋ฐฉ์‹ :..

article thumbnail
JPA | ์—ฐ๊ด€๊ด€๊ณ„
๐Ÿ“ JPA 2022. 12. 8. 02:21

๐ŸŒ€ Entity ๋งคํ•‘ / ๊ธฐ๋ณธํ‚ค ๋งคํ•‘ ๊ฐ์ฒด์™€ ํ…Œ์ด๋ธ” ๋งคํ•‘ ์–ด๋…ธํ…Œ์ด์…˜ ์ข…๋ฅ˜ @Entity : JPA๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘ํ•  ํด๋ž˜์Šค์— ์ž‘์„ฑํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜ @Entity(name="Blog") name : JPA์—์„œ ์‚ฌ์šฉํ•  ์—”ํ‹ฐํ‹ฐ ์ด๋ฆ„์„ ์ง€์ •(๊ธฐ๋ณธ๊ฐ’ = ํด๋ž˜์Šค ์ด๋ฆ„) ์ฃผ์˜์‚ฌํ•ญ : final, enum, interface, inner ํด๋ž˜์Šค์—๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. @Table : ์—”ํ‹ฐํ‹ฐ์™€ ๋งคํ•‘ํ•  ํ…Œ์ด๋ธ”์„ ์ง€์ •ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜ *) ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ์ž๋™ ์ƒ์„ฑ : JPA๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›ํ•œ๋‹ค. #application.properties spring.jpa.hibernate.ddl-auto=create spring.jpa.hibernate.show-sql=true @Id : ..