
์ด๋ฒ์ฃผ ๋ฉํ ๋ง ์ ๋ฉํ ๋๊ป์ ๋ด๊ฐ ๋ง๋ Redis Cache + Scheduler + Spring Batch๋ฅผ ์ด์ฉํ Update์ฒ๋ฆฌ ๋ก์ง ๊ด๋ จํด์ ๋์์ ์ฌ๋ฌ ์๋ฒ๊ฐ ์ ๊ทผํ๋ฉด ์ด๋ป๊ฒ ๋ ๊ฒ ๊ฐ๋์? ๋ผ๋ ์ง๋ฌธ์ ๋์ ธ์ฃผ์ จ๊ณ ๋ฉํ ๋ง ์ง์ ๊น์ง ํด๋น ๋ก์ง์ ๋ง๋ค์ด๋ด๋๋ฐ์ ๊ธ๊ธํ๋ ๋๋ ๐๐ป Redis์๋ฒ๋ฅผ ๊ฐ ๋ก์ปฌ์ ์์ฑํ๋ค๋ฉด ์๋ฌด ๋ฌธ์ ๊ฐ ์์ง ์์๊น์ฉ ? ์ด๋ผ๊ณ ๋๋ต์ ํ์๋ค. ์ ๊ธฐ๋ค ์ธ๋ช ์ด ์ค๋ฝ๊ธฐ ํ๋ ๊ฐ์ง๊ณ ์ธ์ฐ๊ณ ์๋๋ฐ ์ด๊ฑธ ์ด๋ป๊ฒ ์ฌ์ด์ข๊ฒ ๋๋ ์ ๋๋๋ก ํ ์ ์์๊น? ๋ํ ์ง๋ฌธ์ ์ค๋ฝ๊ธฐ๋ฅผ ์ธ๊ฐ๋ฅผ ๋๋ฉด ๋์ง ์๋์?์ ๋ต๋ณ์ ํ ์ ์ ๋๋ต์ด ํ๋ ธ๋ค๊ณ ํ ์๋ ์์ง๋ง ๋์์ฑ ์ ์ด ๋ถ๋ถ์ ์์ ์๊ฐ๋ ์ํ๊ฑธ ๋ฐ๋ก ๋คํฌ์ ์๋ ๊ตฌ๋ฌธ์ด์๋ค ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ๊ทธ๋์ ํ๋ฐ ๋ฆ์์ง๋ง ์ฑ๋ฅ ๊ฐ์ ์ ์ํด์ ๊ณต๋ถ..

๋๋์ ํธ๋ํฝ์ ํธ๋ค๋งํ๊ธฐ ์ํ ๋์์ฑ ์ ์ด ๊ธฐ๋ฒ ์ค ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋๋ฐ ๊ทธ์ค์์ ๋น๊ด์ ๋ฝ๊ณผ, ๋๊ด์ ๋ฝ ๋ ๋ฝ์ ์ฐจ์ด๋ฅผ ์์๋ณด์ ๐ ๋น๊ด์ ๋ฝ : ์์ ์์ฒญ์ ๋ฐ๋ผ์ ๋์์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ผ๊ณ ์ฌ์ ์ ์์ธกํ๊ณ , ๋ฝ์ ๊ฑธ์ด๋ฒ๋ฆฌ๋ ๋ฐฉ๋ฒ๋ก : ํธ๋์ญ์ ์ ์ถฉ๋์ด ๋ฐ์ํ๋ค๊ณ ๊ฐ์ ํ๊ณ ํ๋์ ํธ๋์ญ์ ์ด ์์์ ์ ๊ทผ์ ๋ฝ์ ๊ฑธ๊ณ , ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ ๊ทผํ์ง ๋ชปํ๋๋ก ํจ : ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ Shared Lock(๊ณต์ , ์ฝ๊ธฐ ์ ๊ธ), Exclusive Lock(๋ฐฐํ, ์ฐ๊ธฐ ์ ๊ธ)์ ๊ฑด๋ค. 1. Shared Lock - ์ ๊ทผํ ํธ๋์ญ์ ์ด ์์ ์ค์ผ ๋ ๋ค๋ฅธ ํธ๋์ญ์ ์์๋ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ๊ณ , Exclusive Lock ์ ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค. 2. Exclusive Lock - ์ ๊ทผํ ํธ๋์ญ์ ์ด ์์ ์ค์ผ ๋ ๋ค๋ฅธ ํธ๋์ญ์ ์์๋..

JPA(Java Persistence API)๋ฅผ ์ฌ์ฉํ ๋, JPA์์ ์ ๊ณตํ๋ ์ฟผ๋ฆฌ ๋ฉ์๋ ์ธ SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์ ๋ ฅํ์ฌ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ๋์ ๊ฒฝ์ฐ์๋ ํ ์ด๋ธ์ ์ด๋ค ์กฐ๊ฑด์ ๊ฐฏ์๋ฅผ ๊ตฌํ ๋ Entity์์ @Folmura๋ฅผ ์ฌ์ฉํ์ฌ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ๊ตฌํ์๋๋ฐ, Entity์์ ์ง์ DB์ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฆฌ๋ ๊ฑด ์ฉ๋ ๋ถ๋ฆฌ์ ๋ชฉ์ ์์ ๊ถ๊ณ ํ์ง์๋๋ค๊ณ ํ์ฌ JPA์ native query๋ฅผ ์ด์ฉํ์ฌ ์์ ๊ตฌํํ์๋ค. NatvieQuery๋ JPQL์ด ์๋ SQL๋ฅผ ์ง์ ์ ์ํ์ฌ ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋ค. function๊ณผ join๋ฅผ ํ๋ ๊ฒฝ์ฐ JPQL๋ฅผ ์ฌ์ฉํ ์๋ ์์ง๋ง SQL๋ฅผ ์ง์ ์ ์ํ ์์๋ NativeQuery๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ๐@Formula๋ฅผ ์ฌ์ฉํ Inner query ์ด์ฉ ๋ฐฉ์ :..

๐ 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 : ..