์ค๋ ๊ณต๋ถํ ๋ด์ฉ ์ฝ๋ฉ ๋ฐฑ์ค ํ๋ก์ ํธ CI ์ค์ ๐ญ ๋๋ ์ & ๋ฐฐ์ด ์ ์ค๋์ EC2 ์ธ์คํด์ค ์์ฑํด์ ๋ฐฐํฌ ์๋ฒ ๋์ฐ๊ณ , DB๋ ๋์ด ๋ค์ ๋ฐ์ดํฐ ์ฝ์
๊น์ง ์๋ฃํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ github actions๋ก CI ์ค์ ํ๋๋ ํ๋ฃจ๊ฐ ๋ค ๊ฐ๋ฒ๋ ธ๋ค..? ์ง์ง ์ง๊ธ ๋ณด๋ฉด ์ค๋ ํ๋ฃจ ๋ญ ํ์ง ์ถ๊ธฐ๋ ํ๊ณ ... ์ฌ์ด๋ ํ๋ก์ ํธ์์๋ @Scheduled๋ฅผ ์จ์ ํน์ ๋ฐฐ์น ์์
์ ์คํ์ํค๋ ์ค์ผ์ค๋ฌ๋ฅผ ๋ง๋ค์ด๋ดค๋ค. ์ง๊ธ๊น์ง @Scheduled ํ๋ฒ ์จ๋ณด๊ณ ์ถ๋ค๋ผ๋ ์๊ฐ์ด ์๊ธด ํ๋๋ฐ, ์ญ์ ๊ทธ๋ฅ ์ฐ๋ฉด ๋๋ ์คํ๋ง ์งฑ...๐ ๋ฌผ๋ก ์ธ๋ถ ์๋์๋ฆฌ๋ ์ค์ ์ ์์ง ํ์ง ์์๊ณ ๋ง๋ณด๊ธฐ์ง๋ง, ์ดํ์ ๋ฐ๋ก ๋ ๊ณต๋ถํ ์์ ์ด๋ค. ์ง๊ธ์ ๊ณต๋ถํ ๊ฒ ๋๋ฌด ๋ง์ผ๋ฏ๋ก.. ๐ฅ ๋ด์ผ ๊ณต๋ถํ ๋ด์ฉ ๋ฐฑ์ค DB ๊ณต๋ถ ์ด์์ฒด์ ๊ณต๋ถ CD ์ค์ ํ๋ก์ ..
์ค๋ ๊ณต๋ถํ ๋ด์ฉ ์ฝ๋ฉ DB ๊ณต๋ถ ์ด์์ฒด์ ๊ณต๋ถ ๋ฐฑ์ค ๐ญ ๋๋ ์ & ๋ฐฐ์ด ์ ์ค๋ ๋ญ๊ฐ API ๊ฐ๋ฐํ๊ณ CI/CD๊น์ง ์ค์ ํ ์ค ์์๋๋ฐ, API ๊ฐ๋ฐํ๋ ํด๊ทผ์๊ฐ์ด์๋ค.. API ๋จ ํ ๊ฐ๋ง ๋ง๋ค์๊ณ , ์ด๋ ค์ด ์์
์ด ์๋์๋๋ฐ ์๊ฐ๋ณด๋ค ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฐ ๊ฒ ๊ฐ๋ค. (๊ทธ ๊ณผ์ ์์ ์กฐ๊ธ ๋ค๋ฅธ ๊ธธ๋ก ๋น ์ง๊ธด ํ์ง๋ง...) ์ ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌํ์ ๊ฒฐ๊ตญ jpa๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค. ์๋๋ ์ฌ์ฉํ์ง ์์ผ๋ ค ํ์ง๋ง, 2์ฐจ ๋ฐ๋ชจ๋ฐ์ด๊น์ง ์๊ฐ์ด ์ผ๋ง ์๊ธฐ๋ ํ๊ณ , ๋ค๋ค Jpa๋ฅผ ์จ๋ณด๊ณ ์ถ์ด ํ๋ ๋ถ์๊ธฐ์๋ค. ๋ญ๊ฐ DB๋ฅผ ํฌํจํด์ ๊ธฐ์ด์ ์ธ CS ์ง์์ด ๋ง์ด ๋ถ์กฑํจ์ ๋๋ผ๊ณ ์๋ค. ์คํ๋ง์ ์ค๋ ํ ๋งํผ ์ฃผ๋ณ์ ๋ถ๊ฐ์ ์ธ ๊ฒ๋ค์ ์ฑ๊ธฐ์ง ๋ชป ํ ๋๋์ ๋๋ฌด ๋ง์ด ๋ฐ๊ณ ์๋ค. ์ฃผ๋ณ ์ฌ๋๋ค ๋ณผ๋๋ง๋ค ์กฐ๊ธ ์กฐ๋ฐ์ฌ์ด ๋๊ธฐ๋ ํ๊ณ ๊ทธ๋ฐ๋ฐ, ..
์ค๋ ๊ณต๋ถํ ๋ด์ฉ ์ฝ๋ฉ DB ๊ณต๋ถ ๋ฐ์ดํฐ ์กฐ์ฌ jpa OneToMany ๊ณต๋ถ ๐ญ ๋๋ ์ & ๋ฐฐ์ด ์ ์ ธ๋ ๊ธ ๋ณด๋ค ์ฒ์ ์์๋๋ฐ, OneToMany์์ updatable=false, nullable=false ์ฃผ๋ฉด insert ์์ update ์ฟผ๋ฆฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค๋ ๊ฒ์ ๋ฐฐ์ ๋ค. ์ง์ง ๋๋ฐ์ฐ.. ๊ทธ๋ฆฌ๊ณ Lock ๊ด๋ จํด์, ๋๋์จ์๊ฒ ์ง๋ฌธํ๊ณ ๋ต๋ณ๋ฐ์ผ๋ฉฐ ์ข ๋ฐฐ์ ๋ค. ๋ชจ์ ์๋น์ค๋ฅผ ๋ง๋ค ๋, ๋ง๊ฐ๋ ๋ชจ์์๋ ์ ์ฒญํ ์ ์๋ ๊ธฐ๋ฅ์ ๋ง๋ค๊ณ ์ถ์๋ฐ ์ด๊ฒ ๋ชจ์์ ๊ฐ์
์ ์ฒญํ๋ ์๊ฐ ๋ชจ์์ด ๋ง๊ฐ๋๋ฉด ๋ง๊ฐ๋ ๋ชจ์์ ์ ์ฒญํด๋ฒ๋ฆฌ๋ ์ํฉ์ด ๋ฐ์ํ ์๋ ์์ง์๋..? ์ด๊ฑฐ Lock์ผ๋ก ๋ง๊ณ ์ถ์๋ฐ ์ด๋ค ์์ผ๋ก ํด์ผํ ์ง..? ๋๋: ๋ง๊ฐ ๋ฒํผ์ ๋๋ฅด๋๊ฑฐ์ผ? ์ ๋๋: ๋ ์ค๋ฅด๋๊ฑด 2๊ฐ์ง์ธ๋ฐ ๋ชจ์์ ๋ํ ์
๋ฐ์ดํธ๋ฅผ ํ๊ธฐ ์ ..
์ค๋ ๊ณต๋ถํ ๋ด์ฉ ๋ฐ์ดํฐ ์กฐ์ฌ Real MySQL ๊ณต๋ถ ๐ญ ๋๋ ์ & ๋ฐฐ์ด ์ ์ ์ RealMySQL์์ ๊ธฐ๋ณธ์ ์ธ ์ํคํ์ฒ๋ InnoDB ๋ถ๋ถ์ ์ฝ์๋๋ฐ, ์ ๋๋ก ์ดํด๋์ง ์๋ ๋ถ๋ถ์ด ๋ง์๋ค. ํ์คํ ๋๋ฒ์งธ ์ฝ์ผ๋๊น ์ด๋์ ๋ ์ดํด๋๋ ๋๋? ์ฑ
์ ๋ค ์ฝ์ ๊ฑด ์๋์ง๋ง, ์ด ๋ถ๋ถ์ ์ฝ์ด๋๋๊ฒ ์ข์ ๊ฒ ๊ฐ์์ ๋ค์ ์ฝ๊ณ ์๋ค. ๊ทธ๋ฌ๋ฉด์ ์ค๋ ๋๋ ์คํํ
GapLock์ด๋ ๊ด๋ จ๋ ๋ช๋ช๊ฐ ๋ ๋ฐฐ์ฐ๊ณ ... ๋๋๊ฐ์
๋๋ค ์์ ๐ฅ ๋ด์ผ ๊ณต๋ถํ ๋ด์ฉ ๋ฐ์ดํฐ ์กฐ์ฌ ๋ฐฑ์ค DB ๊ณต๋ถ ์ค๋ ๊ณต๋ถํ ๋ด์ฉ ํฌ์คํ
์ค๋ ๊ณต๋ถํ ๋ด์ฉ ๊ทธ๋ฅ ์ฝ๋ฉ์ข ํจ ๋ฐ์ดํฐ ์กฐ์ฌ ๐ญ ๋๋ ์ & ๋ฐฐ์ด ์ DB๊ณต๋ถ๋ฅผ ๋ญ๊ฐ ์ด๋ป๊ฒ ํด์ผํ ์ง ๊ฐ์ด ์ ์์กํ๋ค.. Lock์ชฝ์ผ๋ก ๊น๊ฒ ๊ณต๋ถํด๋ณด๊ณ ์ถ์๋ฐ, ๋ฐฉ๋ฒ์ ์ ๋ชจ๋ฅด๊ฒ ๋..? ๐ฅ ๋ด์ผ ๊ณต๋ถํ ๋ด์ฉ ๋ฐ์ดํฐ ์กฐ์ฌ ๋ฐฑ์ค DB ๊ณต๋ถ ์ค๋ ๊ณต๋ถํ ๋ด์ฉ ํฌ์คํ
์ค๋ ๊ณต๋ถํ ๋ด์ฉ ๋ฐฑ์ค DB ๊ณต๋ถ Celuveat ํ์ ๋จน๋ฐฉ ์ ํ๋ธ ๋ณด๊ธฐ? ๐ญ ๋๋ ์ & ๋ฐฐ์ด ์ ์ด์ ๋ถํฐ ์ ์๊ถ ๋๋ฌธ์ ๋ถํ๋ ๋ฌธ์ ๋ค์, ๊ฒฐ๊ตญ ์ง์ ํ๋ํ๋ ๋ฉ์ผ์ ๋๋ ค์ ํ๋ฝ์ ๋ฐ๊ณ ์ ๋ณด๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ํด์ณ๋๊ฐ๊ธฐ๋ก ํ๋ค. ๋ง์ง ํ๋ฐฉ ์ ํ๋ฒ๊ฐ ๊ฒ์ํ์ ๋ ๋๋ต 50๋ช
์ ๋ ๋์์, ๊ทธ๋๋ง ๋คํ์ด์๋ค. ๋จผ์ ๋ต๋ณ ์จ ์ฌ๋๋ค์ ์์ฃผ๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐ์ฌํ๊ธฐ๋ก ํ๊ณ , ๋ค์์ฃผ ์์์ผ๊น์ง ์ธ๋น ์ต์ 50๊ฐ์ ์์์ ์ ์กฐ์ฌํด ์ค๊ธฐ๋ก ํ๋ค. ํํ... ์๊ฐ๋ณด๋ค ์ผ๋ง ์๊ฑธ๋ฆฌ๋ฉด์, ์๊ฐ๋ณด๋ค ์ค๋ ๊ฑธ๋ฆฌ๋ ์์
์ด๋ค. ๊ทธ๋๋ ์ด์ ๋ ์ ๋ง ํฐ์ผ๋ ์ค ์๊ณ ์ฒ์ฐธํ ๊ธฐ๋ถ์ด์๋๋ฐ, ์ฃผ์ ๋ฅผ ์ด๋ฆด ์ ์์ด์ ๋๋ฌด ๋คํ์ด์๋ค. ๊ทผ๋ฐ ์์ฆ๋ค์ด ๊ณ์ ํ์๋ง ํ๋ค๋ณด๋, ๋ญ๊ฐ ๊ธ์ ์ธ ๋ด์ฉ์ด ์์ด์ก๋ค. ๊ทธ๋ฆฌ๊ณ ๋ธ๋ฐ์น๊ฐ ๋๋ฌด ์ด๋ป์ ์ฎ๊ธฐ๊ณ ..
์ค๋ ๊ณต๋ถํ ๋ด์ฉ ํํ.. ์ ์๊ถ ๋ฌธ์ ๋๋ฉ ์กฐ๊ธ ์ด์ง๋ฌ์์ก๋ค ๐ญ ๋๋ ์ & ๋ฐฐ์ด ์ ํํ,,, ์ด๋ป๊ฒ ๋๋ ค๋... ์ ์๊ถ ์๊ฐ์ ์ํ๊ณ ๊ธฐํํ๊ณ ์งํํ๋ค๊ฐ ์์ ๋ถ์ด ๋ฌ๋ค ๐ฅ ๋ด์ผ ๊ณต๋ถํ ๋ด์ฉ celuveat ํ์ ๋ฐฑ์ค DB ๊ณต๋ถ ์ค๋ ๊ณต๋ถํ ๋ด์ฉ ํฌ์คํ
์ค๋ ๊ณต๋ถํ ๋ด์ฉ celuveat ์ญ์ญ ๊ฐ๋ฐ ์ค DB ๊ณต๋ถ ๋ฐฑ์ค ๐ญ ๋๋ ์ & ๋ฐฐ์ด ์ ์ค๋์ ๊ฑฐ์ ํ๋ฃจ์ข
์ผ ์ฝ๋ฉ๋ง ํ ๊ฒ ๊ฐ๋ค. ๊ฐ๋ฐํ ๊ธฐ๋ฅ์ด ์๊ฐ๋ณด๋ค ๋๋ฌด ๋ง๊ณ , ํ๋ก ํธ ์์
๋ ํ๋ค๋ณด๋(์์ง ์ผ๋ง ์ ํ์ง๋ง) ํ๋ฃจ๊ฐ ๊ธ๋ฐฉ ์ง๋ฌ๋ค. ์ด์ธ DB ์ฑ
์ฝ๊ธฐ.. ๐ฅ ๋ด์ผ ๊ณต๋ถํ ๋ด์ฉ celuveat ๊ธฐ๋ฅ ๊ตฌํ ๋ฐฑ์ค DB ๊ณต๋ถ ์ค๋ ๊ณต๋ถํ ๋ด์ฉ ํฌ์คํ