[์ํฐํด ๋ฆฌ๋ทฐ] ๊ฐ๋จ์ธ๋ ๊ณต์ ๋ธ๋ก๊ทธ - ํธ๋์ญ์ ์ ๋๋ฉ์ธ ๋ชจ๋ธ์ด ์๋๋ค
ํด๋น ๊ธ์ ๊ฐ๋ฐ, ๊ธฐ์ ๊ด๋ จ ์ํฐํด์ด๋ ๋ธ๋ก๊ทธ ๊ธ ํน์ ์ ํ๋ธ ์์์ ๋ด์ฉ์ ์ ๋ฆฌํ๊ฑฐ๋ ํ๊ธฐ๋ฅผ ์ ๋ ๊ธ์ ๋๋ค.
๋ฆฌ๋ทฐํ ๊ธ: '๊ฐ๋จ์ธ๋ ๊ณต์ ๋ธ๋ก๊ทธ' ์ 'ํธ๋์ญ์ ์ ๋๋ฉ์ธ ๋ชจ๋ธ์ด ์๋๋ค'
์ฃผ์ ์ ๊ฐ๋จ ์์ฝ
- ๊ธ์ด์ด์ ์ํฉ
- ์ฑ๊ณผํ ๊ด๊ณ ์์คํ
๋๋ฉ์ธ
- ์ค์๊ฐ์ผ๋ก ๋ง์ ๋ ธ์ถ, ํด๋ฆญ๊ณผ ๊ทธ์ ๋ฐ๋ฅธ ๊ณผ๊ธ์ด ๋ฐ์ํจ
- db ์ tx ๋ ๋๊ด์ ๋์์ฑ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ฒ์ ์ ๋ณด๋ฅผ ๋๋ฉ์ธ ๋ชจ๋ธ์ ๋ ธ์ถ์ด ๋ ๊ฒ ๊ฐ์
- ์ฑ๊ณผํ ๊ด๊ณ ์์คํ
๋๋ฉ์ธ
- ๋ฌธ์ ์ํฉ ๋ฐ์
- ๋์์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ ์ฌ๋ฌ๊ฐ์ง rdb ์์ค์ locking ์ ํ์์ฑ์ด ๋ฐ์
- pessimistic locking ์ ํ๊ธฐ ์ํด์๋ ๋๋ฉ์ธ ์๋น์ค์
@Transactional
์ด๋ ธํ ์ด์ ์ด ํ์ํด์ง - optimisitc locking ์ ํ๊ธฐ ์ํด์๋ ๋๋ฉ์ธ ๊ฐ์ฒด์ version ์ด๋ผ๋ ํ๋๊ฐ ํ์ํด์ง
- pessimistic locking ์ ํ๊ธฐ ์ํด์๋ ๋๋ฉ์ธ ์๋น์ค์
- ์์ ๋๊ฐ์ง ์ ํ์ง๋ฅผ ๋ชจ๋ ์ฌ์ฉํ์ง ์๊ณ ์ถ์ด์ง
- ์ด์ ๋ ๋๋ฉ์ธ ์์ฒด๊ฐ ๊ฐ์ ธ์ผํ ์ ๋ณด๋ค์ด ์๋๊ธฐ ๋๋ฌธ์
- ๋์์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ ์ฌ๋ฌ๊ฐ์ง rdb ์์ค์ locking ์ ํ์์ฑ์ด ๋ฐ์
- ํด๊ฒฐ๋ฒ
- ์ ๊ทธ๋ฆฌ๊ฑฐํธ๋ฅผ ์ฝ์ด์ ์์ ํ๊ณ ์ ์ฅํ๋ ๋ฌธ์ ์ ์ฝ๋ ํ๋ฆ ์ ์ด๊ถ ๋ฐฐ์น๋ฅผ ๋ณ๊ฒฝํ๊ธฐ๋กํจ
๋ฆฌ๋ทฐ์ ๋์ ํด์
์ฐ์ ์ด ๊ธ์ ์ฝ๊ณ ๋๋ฌด๋๋ ๋ฐ๊ฐ์ ๋ค. ๋๋ ์ด๋ฐ ์ด์๋ฅผ ๋์ผํ๊ฒ ๊ฒฝํํ๋ ์ ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด ๋ฌธ์ ์ ํต์ฌ์ ์ด์ผ๊ธฐํด๋ณด์๋ฉด, domain model ๊ณผ persistence entity model ์ ๋ถ๋ฆฌํ์ฌ RDB ๋ฅผ ์ฌ์ฉํ ๋ ACID ๊ฐ ์ง์ผ์ง์ง ์๋ ๊ฒ ์ด๋ค.
์ด์ ์ธ ์ฆ, ์์์ฑ ์ฅ์น๊ฐ ACID ๋ฅผ ๋ณด์ฅํด์ฃผ๋ ๋ฒ์๋ ์์์ฑ ์ฅ์น๊ฐ ์ธ์ ํ๋ ์์ ๋ชจ๋ธ์ ๊ฒฝ์ฐ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ฌ๊ธฐ์ ๋งํ๋ ์์์ฑ ์ฅ์น๊ฐ ์ธ์ ํ๋ ์์ ๋ชจ๋ธ์ด๋ @Entity
์ด๋
ธํ
์ด์
์ด ๋ถ์ JPA entity ๋ผ๋์ง, @Table
์ด๋
ธํ
์ด์
์ด ๋ถ์ ๋ชจ๋ธ์ ์๋ฏธํ๋ค.
์ด๋ฐ ๊ฒฝ์ฐ ๋น๊ด์ /๋๊ด์ ์ ๊ธ์ด ๋ถ๊ฐ๋ฅํด์ง๋๋ฐ, ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ธ์ด์ด๋ repository ๋ก ๋๋ฉ์ธ ์๋น์ค์ ๋ก์ง์ ์์์์ผฐ๋ค.
๋๋ฉ์ธ ๋ก์ง์ ์งํค๊ธฐ ์ํ ๊ณ ๋ฏผ๊ณผ ๊ทธ ๊ณ ๋ฏผ ์ฌ์ด์ ์์๋ ๊ธ์ด์ด์ ํต์ฐฐ๋ ฅ์ด ๋ฌป์ด๋์ค๋ ๊ธ์ด์์ง๋ง ์กฐ๊ธ ์์ฌ์ด์ ์ด ์๋ค.
์ด๋ ๊ฒ ๋๋ค๋ฉด EventHandler ์ ๋๋ฉ์ธ ๋ก์ง์ด repository ๋ก ๋ฐ์ด์ ธ๋ฒ๋ฆฌ๊ฒ๋๋ค.
๊ทธ๋ ๋ค๋ฉด JpaRepository
๋ DomainRepository
๋ฅผ Compsite ํ CampaignRepository
๊ฐ ๋๋ฉ์ธ ๋ก์ง์ ์๊ฒ๋๋ ๊ฒ์ธ๋ฐ, ์ด๋ Spring ์ ๊ด๋ จ๋ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ์ด ๋ํ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ๋ค.
๊ทธ๋ ๊ฒ๋๋ฉด ๊ณ์๋๋ ๋๋ฉ์ธ๋ก์ง์ Repository ๋ง ์ปค์ ธ๊ฐ ๊ฒ์ด๋ค.
์ด๋ป๊ฒ ํด๊ฒฐํ๋ฉด ์ข์๊น? ๋ ๊ธ์ ์ฐ๋ ์์ค์๋ ๊ณ์ ๊ณ ๋ฏผ์ด๋๋ ๋ถ๋ถ์ด๋ค.
๋ช๊ฐ์ง ๋๋ ์๊ฐ์, ๊ณผ์ฐ EventHandler ๋ ๋๋ฉ์ธ ๋ ์ด์ด์ผ๊น? application layer ์ด์ง ์์๊น?
๊ทธ๋ฅ version ์ ๋ณด๋ฅผ ๋๋ฉ์ธ ๋ ์ด์ด์ ์นจํฌ์์ผ๋ฒ๋ฆฌ๋ฉด ์๋๋๊ฑธ๊น? ๊ทธ๋ฆฌ๊ณค ์ธ๋ถ์์ ์ฌ์ฉํ์ง ๋ชปํ๊ฒ ์ ๊ทผ์ ์ด์๋ฅผ ์ ์ ํ๊ฒ ์ฌ์ฉํ๋ฉด ๋์ง ์์๊น? (<- ์ด ๋ฐฉ๋ฒ์ ์ด์ ์ ๋ด๊ฐ ํ๋ ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.)