์ด์ ์๋ ์ด๋ฐ ์ผ์ด ์์์ต๋๋ค. ์ด์ ๋ค์ ์์ํฉ๋๋ค!
๋ค์ ํ๋ก์ ํธ์์๋ ํฅํ ๋ฌธ์ ๋ฅผ ํผํ๊ธฐ ์ํด ์ฒ์๋ถํฐ Liquibase๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ชจ๋ ์ ์ ํ์์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๋ ๊ฒ์ ์๋๋๋ค. ๋ด๋ถ ์ํฌ์์ ์ด์๊ณ , ๊ทธ ๋ด์ฉ์ ๊ธฐ์ฌ๋ก ๋ง๋ค๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
์ด ๊ธฐ์ฌ์๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์ ๋๊ตฌ, ํนํ Liquibase๋ฅผ ์ฌ์ฉํ ๋ ๋น ์ง ์ ์๋ ๊ฐ์ฅ ๋ช ๋ฐฑํ ์ธ ๊ฐ์ง ํจ์ ์ ๋ํ ์ค๋ช ๊ณผ ์ ์ฉํ ํ์ด ํฌํจ๋์ด ์์ต๋๋ค. ์ฃผ๋์ด ๋ฐ ์ค๊ธ Java ๊ฐ๋ฐ์๋ฅผ ์ํด ์ค๊ณ๋์์ผ๋ฉฐ, ๊ฒฝํ์ด ๋ง์ ๊ฐ๋ฐ์์ ๊ฒฝ์ฐ ์ด๋ฏธ ์๋ ค์ง ๋ด์ฉ์ ๊ตฌ์กฐํํ๊ณ ๋ฐ๋ณตํ๋ ๋ฐ ํฅ๋ฏธ๋ก์ธ ์ ์์ต๋๋ค.
Liquibase์ Flyway๋ Java ์ธ๊ณ์์ ๊ด๊ณํ ๊ตฌ์กฐ์ ๋ฒ์ ์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์ฃผ์ ๊ฒฝ์ ๊ธฐ์ ์ ๋๋ค. ์ฒซ ๋ฒ์งธ๋ ์์ ํ ๋ฌด๋ฃ์ด๋ฉฐ ์ค์ ๋ก๋ ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉ๋๋๋ก ์ ํ๋๋ฏ๋ก Liquibase๊ฐ ์ถํ์ ์์ ์ผ๋ก ์ ํ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ค๋ช ๋ ์ฌ๋ก ์ค ์ผ๋ถ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ์ ๋ฐ๋ผ ๋ณดํธ์ ์ผ ์ ์์ต๋๋ค.
๊ด๊ณํ ๊ตฌ์กฐ์ ๋ง์ด๊ทธ๋ ์ด์ ์ ๊ด๊ณํ ๋ฐ์ดํฐ ์ ์ฅ์์ ์ทจ์ฝํ ์ ์ฐ์ฑ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๊ฐ์ ์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค. OOP ํจ์ ์๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์คํ์ผ์ ์คํค๋ง๋ฅผ ํ ๋ฒ ์ค๋ช ํ๊ณ ๋ค์ ๊ฑด๋๋ฆฌ์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธํ์ต๋๋ค. ๊ทธ๋ฌ๋ ํ์ค์ ํญ์ ์ํฉ์ด ๋ณํ๊ณ ํ ์ด๋ธ ๊ตฌ์กฐ์ ๋ํ ๋ณ๊ฒฝ์ด ์์ฃผ ํ์ํ๋ค๋ ๊ฒ์ ๋๋ค. ๋น์ฐํ ๊ทธ ๊ณผ์ ์์ฒด๊ฐ ๊ณ ํต์ค๋ฝ๊ณ ๋ถ์พํ ์ ์์ต๋๋ค.
ํ๋ก์ ํธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํ ๊ธฐ์ ๋ฐ ์ง์นจ์ ๋ํ ์ค๋ช ์ ๋ ๊น์ด ๋ค๋ฃจ์ง ์๊ฒ ์ต๋๋ค. ์ด ์ฃผ์ ์ ๋ํด ๊ฝค ๋ง์ ๊ธฐ์ฌ๊ฐ ์์ฑ๋์์ต๋๋ค.
Liquibase๋ฅผ ์ฌ์ฉํ์ฌ Spring Boot ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. 1 ๋ถ Liquibase๋ฅผ ์ฌ์ฉํ์ฌ Spring Boot ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. 2 ๋ถ Liquibase์ ๋ฉ์ด๋ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณ๊ฒฝ ๋ฒ์ ๊ด๋ฆฌ์ ๋ํ ์ ๊ทผ ๋ฐฉ์ Spring MVC/Security, REST, Hibernate, Liquibase๋ฅผ ๋ ์ค๋ก ์ถ์ํฉ๋๋ค.
๋ํ ์ ์ฉํ ํ์ ๊ดํ ํ๋ฅญํ ๊ธฐ์ฌ๊ฐ ์ด๋ฏธ ์์ต๋๋ค.
ะกะพะฒะตัั
์ด์ฃผ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ณผ์ ์์ ํผ์ ๋, ๊ณ ํต์ ํตํด ํ์ํ ์กฐ์ธ๊ณผ ์๊ฒฌ์ ๊ณต์ ํ๊ณ ์ถ์ต๋๋ค.
1. ์์
์ ์์ํ๊ธฐ ์ ์ ๋ค์์ ๋ชจ๋ฒ ์ฌ๋ก ์น์
์ ์์งํด์ผ ํฉ๋๋ค. ์จ๋ผ์ธ์ผ๋ก ๋ฆฌํด๋ฒ ์ด์ค
2. ๋ง์ด๊ทธ๋ ์ด์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์์ํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ์์ ์๋ ์์ ์ ํ์ฉํ์ง ๋ง์ญ์์ค.
์๋ด์ฒ๋ผ: "ํ ๋ฒ Persil์ ์์ํ Persil." ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฐ์ด Liquibase์ ์ํด ๊ด๋ฆฌ๋๊ธฐ ์์ํ๋ฉด ์๋ ๋ณ๊ฒฝ์ด ์ฆ์ ์ผ๊ด์ฑ ์๋ ์ํ๋ก ์ด์ด์ง๊ณ ๋ณ๊ฒฝ ์ธํธ์ ์ ๋ขฐ ์์ค์ด XNUMX์ด ๋ฉ๋๋ค. ์ ์ฌ์ ์ธ ์ํ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ณต์ํ๋ ๋ฐ ์์๋๋ ๋ช ์๊ฐ์ด ํฌํจ๋๋ฉฐ ์ต์ ์ ๊ฒฝ์ฐ ์๋ฒ๊ฐ ์๋ํ์ง ์๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. ํ์ "๊ตฌ์" DBA ์ค๊ณ์๊ฐ ์๋ ๊ฒฝ์ฐ ์กฐ๊ฑด๋ถ SQL ๊ฐ๋ฐ์๊ฐ ์ดํดํ ๋๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํธ์งํ๋ฉด ์ํฉ์ด ์ผ๋ง๋ ๋๋น ์ง์ง ์ธ๋ด์ฌ์ ๊ฐ์ง๊ณ ์ ์คํ๊ฒ ์ค๋ช ํ์ญ์์ค.
3. ๋ณ๊ฒฝ ์ธํธ๊ฐ ์ด๋ฏธ ์ ์ฅ์์ ํธ์๋ ๊ฒฝ์ฐ ํธ์งํ์ง ๋ง์ญ์์ค.
๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ๋์ค์ ํธ์งํ ๋ณ๊ฒฝ ์ธํธ๋ฅผ ๊ฐ์ ธ์์ ์ ์ฉํ ๊ฒฝ์ฐ ์์ฉ ํ๋ก๊ทธ๋จ์ ์์ํ ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์น์ ํ ๋ง๋ก ๊ธฐ์ตํ ๊ฒ์ ๋๋ค. ๋ณ๊ฒฝ ์ธํธ๋ฅผ ํธ์งํ๋ฉด ๊ฐ๋ฐ ๊ณผ์ ์ ๋์ถ์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ ํซํฝ์ค๋ผ๋ ์ํํ ์ํฉ์ ๋ฐ๋ผ์ผ ํฉ๋๋ค. ๋ฌธ์ ์ ๋ณธ์ง์ Liquibase์ ์ฃผ์ ๋ฉ์ปค๋์ฆ์ธ ํด์ ํฉ๊ณ์ ์ํ ๋ณ๊ฒฝ ์ฌํญ์ ์ ํจ์ฑ ๊ฒ์ฌ์ ์์ต๋๋ค. ๋ณ๊ฒฝ ์ธํธ ์ฝ๋๋ฅผ ํธ์งํ๋ฉด ํด์ ์์ด ๋ณ๊ฒฝ๋ฉ๋๋ค. ๋ณ๊ฒฝ ์งํฉ ํธ์ง์ ๋ฐ์ดํฐ ์์ค ์์ด ์ ์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฒ์๋ถํฐ ๋ฐฐํฌํ ์ ์๋ ๊ฒฝ์ฐ์๋ง ๊ฐ๋ฅํฉ๋๋ค. ์ด ๊ฒฝ์ฐ SQL ๋๋ XML ์ฝ๋๋ฅผ ๋ฆฌํฉํฐ๋งํ๋ฉด ๋ฐ๋๋ก ์์ ์ด ๋ ์ฌ์์ง๊ณ ๋ง์ด๊ทธ๋ ์ด์ ์ ๊ฐ๋ ์ฑ์ด ๋์์ง ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ์์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์คํค๋ง๊ฐ ํ ๋ด์์ ํฉ์๋ ์ํฉ์ด ์์ต๋๋ค.
4. ๊ฐ๋ฅํ๋ค๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฑ์ ์ ํ์ธํ์ธ์.
์ฌ๊ธฐ์์๋ ๋ชจ๋ ๊ฒ์ด ๋ช ํํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ฐ์๊ธฐ ๋ง์ด๊ทธ๋ ์ด์ ์ด ์คํจํ๋ฉด ๋ชจ๋ ๊ฒ์ ๋ค์ ๋๋๋ฆด ์ ์์ต๋๋ค. Liquibase์๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋กค๋ฐฑํ๋ ๋๊ตฌ๊ฐ ์์ง๋ง ๋กค๋ฐฑ ์คํฌ๋ฆฝํธ๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ์์ฑํ๋ฏ๋ก ์ฃผ์ ๋ณ๊ฒฝ ์ธํธ์ ์คํฌ๋ฆฝํธ์ ๋์ผํ ํ๋ฅ ๋ก ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ ์ด๋ค ๊ฒฝ์ฐ์๋ ๋ฐฑ์ ์ ํตํด ์์ ํ๊ฒ ํ๋ ์ดํ๋ ๊ฒ์ด ์ ์ฉํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
5. ๊ฐ๋ฅํ๋ค๋ฉด ๊ฐ๋ฐ ์ ์ ์ฆ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฑ์ ์ ์ฌ์ฉํ์ธ์.
์ด๊ฒ์ด ๊ณ์ฝ ๋ฐ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ์ ์๋ฐฐ๋์ง ์๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ธ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉฐ ๋ฌด๊ฒ๋ ๋ ํ์๋งํผ ํฌ์ง ์์ต๋๋ค. ๋ผ์ด๋ธ ๋ง์ด๊ทธ๋ ์ด์ ์๋ฒ์์ ์ฌ์ฉํ๊ธฐ ์ ์ ๊ฐ๋ฐ์์ ์ปดํจํฐ์์ ์ด๋ป๊ฒ ์๋ํ๋์ง ํ์ธํ๊ณ ๊ณ์ฐํ ์ ์์ต๋๋ค ๋ง์ด๊ทธ๋ ์ด์ ์ค ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๊ฐ ๊ฑฐ์ 100% ํด๊ฒฐ๋์์ต๋๋ค.
6. ํ์ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค๊ณผ ์ํตํ์ธ์
์ ์กฐ์ง๋ ๊ฐ๋ฐ ํ๋ก์ธ์ค์์๋ ํ์ ๋ชจ๋ ๊ตฌ์ฑ์์ด ๋๊ฐ ๋ฌด์์ ํ๊ณ ์๋์ง ์ ์ ์์ต๋๋ค. ์ค์ ๋ก๋ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ๊ฐ ๋ง์ผ๋ฏ๋ก ์์ ์ ์ผ๋ถ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ ๋ณ๊ฒฝ์ ์ค๋นํ๋ ๊ฒฝ์ฐ ์ด์ ๋ํด ์ ์ฒด ํ์ ์ถ๊ฐ๋ก ์๋ฆฌ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋๊ตฐ๊ฐ ๋์์ ๋ณ๊ฒฝ์ ์ํํ๋ ๊ฒฝ์ฐ ์ ์คํ๊ฒ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค. ์ฒ์๋ถํฐ๊ฐ ์๋๋ผ ์ผ์ ๋ง์น ํ์ ๋๋ฃ๋ค๊ณผ ์ํตํ๋ ๊ฒ์ด ๊ฐ์น๊ฐ ์๋ค. ๋ณ๊ฒฝ ์ธํธ์ ๊ด๋ จ๋ ๋ง์ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ ์ฝ๋ ๊ฒํ ๋จ๊ณ์์ ํด๊ฒฐ๋ ์ ์์ต๋๋ค.
7. ๋น์ ์ด ๋ฌด์์ ํ๊ณ ์๋์ง ์๊ฐํด ๋ณด์ธ์!
์ด๋ค ์ํฉ์๋ ์ ์ฉ๋๋ ์๋ช ํ ์กฐ์ธ์ฒ๋ผ ๋ณด์ผ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ๋ฐ์๊ฐ ์์ ์ด ํ๊ณ ์๋ ์ผ๊ณผ ๊ทธ๊ฒ์ด ์ด๋ค ์ํฅ์ ๋ฏธ์น ์ ์๋์ง ๋ค์ ํ ๋ฒ ๋ถ์ํ๋ค๋ฉด ๋ง์ ๋ฌธ์ ๋ฅผ ํผํ ์ ์์์ ๊ฒ์ ๋๋ค. ๋ง์ด๊ทธ๋ ์ด์ ์์ ์๋ ํญ์ ์ถ๊ฐ์ ์ธ ์ฃผ์์ ์ ํ์ฑ์ด ํ์ํฉ๋๋ค.
ํจ์
์ด์ ์์ ์กฐ์ธ์ ๋ฐ๋ฅด์ง ์์ ๊ฒฝ์ฐ ๋น ์ง ์ ์๋ ์ผ๋ฐ์ ์ธ ํจ์ ์ ์ดํด๋ณด๊ณ ์ ํํ ๋ฌด์์ ํด์ผ ํฉ๋๊น?
์ํฉ 1: ๋ ๋ช ์ ๊ฐ๋ฐ์๊ฐ ๋์์ ์๋ก์ด ๋ณ๊ฒฝ ์ธํธ๋ฅผ ์ถ๊ฐํ๋ ค๊ณ ํฉ๋๋ค.
Vasya์ Petya๋ ์๋ก์ ๋ํด ์์ง ๋ชปํ ์ฑ ๋ณ๊ฒฝ ์ธํธ ๋ฒ์ 4๋ฅผ ๋ง๋ค๊ณ ์ถ์ดํฉ๋๋ค. ๊ทธ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ ๋ค๋ฅธ ๋ณ๊ฒฝ ์ธํธ ํ์ผ์ ์ฌ์ฉํ์ฌ ํ ์์ฒญ์ ๋ฐํํ์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์์ฉ ๋ฉ์ปค๋์ฆ์ด ์ ์๋ฉ๋๋ค:
๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ
- ์ด์จ๋ ๋๋ฃ๋ค์ ์์ ์ ๋ณ๊ฒฝ ์ธํธ๊ฐ ์งํ๋๋ ์์์ ๋์ํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด Petin์ ๋จผ์ ์ ์ฉํด์ผ ํฉ๋๋ค.
- ๋๊ตฐ๊ฐ๋ ๋ ๋ฒ์งธ ๊ฒ์ ์์ ์๊ฒ ์ถ๊ฐํ๊ณ Vasya์ ๋ณ๊ฒฝ ์ธํธ๋ฅผ ๋ฒ์ 5๋ก ํ์ํด์ผ ํฉ๋๋ค. ์ด๋ Cherry Pick ๋๋ ๊น๋ํ ๋ณํฉ์ ํตํด ์ํํ ์ ์์ต๋๋ค.
- ๋ณ๊ฒฝ ํ์๋ ์ทจํ ์กฐ์น์ ์ ํจ์ฑ์ ๋ฐ๋์ ํ์ธํด์ผ ํฉ๋๋ค.
์ค์ ๋ก Liquibase ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ๋ฉด ์ ์ฅ์์ ๋ ๊ฐ์ ๋ฒ์ 4 ๋ณ๊ฒฝ ์ธํธ๊ฐ ์์ผ๋ฏ๋ก ๋ชจ๋ ๊ฒ์ ๊ทธ๋๋ก ๋ ์ ์์ต๋๋ค. ์ฆ, ๋ฒ์ 4์ ๋ํด ์๋ก ๋ค๋ฅธ ์ด๋ฆ์ ๊ฐ์ง ๋ ๊ฐ์ง ๋ณ๊ฒฝ ์ฌํญ๋ง ๊ฐ๊ฒ ๋ฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๋์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฒ์ ์ ํ์ํ๋ ๊ฒ์ด ๋งค์ฐ ์ด๋ ค์์ง๋๋ค.
๋ํ Liquibase๋ ํธ๋น์ ๊ณ ํฅ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ง์ ๋น๋ฐ์ ๊ฐ์งํ๊ณ ์์ต๋๋ค. ๊ทธ ์ค ํ๋๋ ๋ฒ์ 1.7์ ๋ฑ์ฅํ validCheckSum ํค๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๋ด์ฉ์ ๊ด๊ณ์์ด ํน์ ๋ณ๊ฒฝ ์งํฉ์ ๋ํด ์ ํจํ ํด์ ๊ฐ์ ์ง์ ํ ์ ์์ต๋๋ค. ์ ์ ์๋ฅ ๋น์น
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๋ด์ฉ์ ๊ด๊ณ์์ด ์ด ChangeSet์ ์ ํจํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๋ ์ฒดํฌ์ฌ์ ์ถ๊ฐํฉ๋๋ค. ChangeSet์ ๋ณ๊ฒฝํด์ผ ํ๊ณ ์ด๋ฏธ ์คํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ์ํ์ง ์์ ๋ ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค(๊ถ์ฅ ์ ์ฐจ ์๋).
์, ์, ์ด ์ ์ฐจ๋ ๊ถ์ฅ๋์ง ์์ต๋๋ค. ํ์ง๋ง ๋๋ก๋ ๊ฐํ ๋น์ ๋ง์ ์ฌ๊ฐ ์ด๋ ์ ๊ธฐ์ ์ ๋ง์คํฐํ๊ธฐ๋ ํฉ๋๋ค.
์ํฉ 2: ๋ฐ์ดํฐ์ ์์กดํ๋ ๋ง์ด๊ทธ๋ ์ด์
๋ผ์ด๋ธ ์๋ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฑ์ ์ ์ฌ์ฉํ ์ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. Petya๋ ๋ณ๊ฒฝ ์ธํธ๋ฅผ ์์ฑํ๊ณ ๋ก์ปฌ์์ ํ ์คํธํ ํ ์์ ์ด ์ณ์๋ค๋ ํ์ ์ ๊ฐ์ง๊ณ ๊ฐ๋ฐ์์๊ฒ ๋์ด์ค๊ธฐ ์์ฒญ์ ํ์ต๋๋ค. ๋ง์ฝ์ ๋๋นํด ํ๋ก์ ํธ ๋ฆฌ๋๋ Petya๊ฐ ์ด๋ฅผ ํ์ธํ๋์ง ํ์ธํ ํ ์ถ๊ฐํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ๋ฐ ์๋ฒ์์์ ๋ฐฐํฌ๊ฐ ์ค๋จ๋์์ต๋๋ค.
์ค์ ๋ก ์ด๊ฒ์ ๊ฐ๋ฅํ๋ฉฐ ๋๊ตฌ๋ ์ด๊ฒ์ผ๋ก๋ถํฐ ๋ฉด์ญ๋์ง ์์ต๋๋ค. ์ด๋ ํ ์ด๋ธ ๊ตฌ์กฐ์ ๋ํ ์์ ์ฌํญ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํน์ ๋ฐ์ดํฐ์ ์ด๋ป๊ฒ๋ ์ฐ๊ฒฐ๋์ด ์๋ ๊ฒฝ์ฐ์ ๋ฐ์ํฉ๋๋ค. ๋ถ๋ช ํ Petya์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํ ์คํธ ๋ฐ์ดํฐ๋ก๋ง ์ฑ์์ ธ ์๋ค๋ฉด ๋ชจ๋ ๋ฌธ์ ์ฌ๋ก๋ฅผ ๋ค๋ฃจ์ง ๋ชปํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํ ์ด๋ธ์ ์ญ์ ํ๋ฉด ์ญ์ ๋๋ ํ ์ด๋ธ์ ๋ ์ฝ๋์ ๊ด๋ จ๋ ์ธ๋ ํค์ ์ํด ๋ค๋ฅธ ํ ์ด๋ธ์ ๋ ์ฝ๋๊ฐ ์์์ด ๋ฐํ์ง๋๋ค. ๋๋ ์ปฌ๋ผ ์ ํ์ ๋ณ๊ฒฝํ ๋ ๋ฐ์ดํฐ์ 100%๋ฅผ ์๋ก์ด ์ ํ์ผ๋ก ๋ณํํ ์ ์๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ
- ๋ง์ด๊ทธ๋ ์ด์ ๊ณผ ํจ๊ป ํ ๋ฒ ์ฌ์ฉ๋ ํน์ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ ํ์์ผ๋ก ๊ฐ์ ธ์ต๋๋ค. ์ด๋ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ ์ฉํ ํ ๋ฐ์ดํฐ๋ฅผ ์๋ก์ด ๊ตฌ์กฐ๋ก ์ ์กํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ด์ง๋ง ํน๋ณํ ๊ฒฝ์ฐ ์ด์ ์๋ ๋น์ทํ ๋ฐฉ๋ฒ์ ์ ์ฉํ ์ ์์ต๋๋ค. ๋ฌผ๋ก ์ด ๊ฒฝ๋ก๋ฅผ ํญ์ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ์๋๋๋ค. ๋ผ์ด๋ธ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ํธ์งํ๋ ๊ฒ์ ์ํํ๊ณ ์ฌ์ง์ด ํ๊ดด์ ์ผ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ๋ ๋ค๋ฅธ ์ด๋ ค์ด ๋ฐฉ๋ฒ์ ๊ธฐ์กด ๋ณ๊ฒฝ ์ธํธ๋ฅผ ํธ์งํ๋ ๊ฒ์ ๋๋ค. ์ด๋ ค์ด ์ ์ ์ด๋ฏธ ๊ธฐ์กด ํํ๋ก ์ ์ฉ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ณต์ํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ ์ฒด ๋ฐฑ์๋ ํ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฒ์๋ถํฐ ๋ก์ปฌ๋ก ๋กค์์ํด์ผ ํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
- ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ๋ณดํธ์ ์ธ ๋ฐฉ๋ฒ์ ๋ฐ์ดํฐ์ ๋ฌธ์ ๋ฅผ ๊ฐ๋ฐ์ ํ๊ฒฝ์ผ๋ก ์ ์กํ์ฌ ๋์ผํ ์ํฉ์ ์ฌํํ๊ณ ์์๋ ๊ฒ์ ์๋ก์ด ๋ณ๊ฒฝ ์ธํธ๋ฅผ ์ถ๊ฐํ์ฌ ๋ฌธ์ ๋ฅผ ํํผํ๋ ๊ฒ์
๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์ฑ์ด ํ๋ก๋์ ์๋ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฌํ ์๋ก ๋ง์ด๊ทธ๋ ์ด์ ๋ฌธ์ ๊ฐ ๋ฉ๋ฆฌ๊น์ง ๊ฐ ๊ฐ๋ฅ์ฑ์ ์ค์ด๋ญ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฌผ๋ก ๋ณ๊ฒฝ ์ธํธ๋ฅผ ์ ์ฅ์์ ๋ณด๋ด๊ธฐ ์ ์ ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์ง ์ฌ๋ฌ ๋ฒ ์๊ฐํด์ผ ํฉ๋๋ค.
์ํฉ 3. Liquibase๊ฐ ์์ฐ์ ๋ค์ด๊ฐ ํ ์ฌ์ฉ๋๊ธฐ ์์ํฉ๋๋ค.
ํ ๋ฆฌ๋๊ฐ Petya์๊ฒ ํ๋ก์ ํธ์ Liquibase๋ฅผ ํฌํจํ๋๋ก ์์ฒญํ์ง๋ง ํ๋ก์ ํธ๊ฐ ์ด๋ฏธ ํ๋ก๋์ ๋จ๊ณ์ ์๊ณ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
๋ฐ๋ผ์ ๋ฌธ์ ๋ ์ ์๋ฒ๋ ๊ฐ๋ฐ์ ์ปดํจํฐ์์ ์ด๋ฌํ ํ ์ด๋ธ์ ์ฒ์๋ถํฐ ๋ค์ ์์ฑํด์ผ ํ๋ฉฐ ๊ธฐ์กด ํ๊ฒฝ์ด ์ผ๊ด๋ ์ํ๋ฅผ ์ ์งํ์ฌ ์ ๋ณ๊ฒฝ ์งํฉ์ ์์ฉํ ์ค๋น๊ฐ ๋์ด ์์ด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.
๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ
๋ํ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค:
- ์ฒซ ๋ฒ์งธ์ด์ ๊ฐ์ฅ ๋ถ๋ช ํ ๊ฒ์ ์ ํ๊ฒฝ์ ์ด๊ธฐํํ ๋ ์๋์ผ๋ก ์ ์ฉํด์ผ ํ๋ ๋ณ๋์ ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ๋ ๊ฒ์ ๋๋ค.
- ๋ ๋ฒ์งธ๋ ๋ ๋ช
ํํ๋ฉฐ, ๋ค๋ฅธ Liquibase ์ปจํ
์คํธ์ ์๋ Liquibase ๋ง์ด๊ทธ๋ ์ด์
์ ๊ฐ์ง๊ณ ์ด๋ฅผ ์ ์ฉํฉ๋๋ค. Liquibase Context์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ์์ ํ์ธํ ์ ์์ต๋๋ค.
https://www.liquibase.org/documentation/contexts.html . ์ผ๋ฐ์ ์ผ๋ก ์ด๋ ํ ์คํธ ๋ฑ์ ์ํด ์ฑ๊ณต์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ํฅ๋ฏธ๋ก์ด ๋ฉ์ปค๋์ฆ์ ๋๋ค. - ์ธ ๋ฒ์งธ ๊ฒฝ๋ก๋ ์ฌ๋ฌ ๋จ๊ณ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๋จผ์ ๊ธฐ์กด ํ
์ด๋ธ์ ๋ํ ๋ง์ด๊ทธ๋ ์ด์
์ ์์ฑํด์ผ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด๋ฅผ ์ผ๋ถ ํ๊ฒฝ์ ์ ์ฉํด์ผ ํด๋น ํด์ ํฉ๊ณ๋ฅผ ์ป์ ์ ์์ต๋๋ค. ๋ค์ ๋จ๊ณ๋ ๋น์ด ์์ง ์์ ์๋ฒ์์ ๋น Liquibase ํ
์ด๋ธ์ ์ด๊ธฐํํ๋ ๊ฒ์
๋๋ค. ๋ณ๊ฒฝ ์ธํธ ์ฌ์ฉ ๋ด์ญ์ด ์๋ ํ
์ด๋ธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด๋ฏธ ์กด์ฌํ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ํฌํจ๋ "๋ง์น ์ ์ฉ๋ ๊ฒ์ฒ๋ผ" ๋ณ๊ฒฝ ์ธํธ์ ๋ํ ๊ธฐ๋ก์ ์๋์ผ๋ก ๋ฃ์ ์ ์์ต๋๋ค. . ๋ฐ๋ผ์ ๊ธฐ์กด ์๋ฒ์์๋ ๋ฒ์ 2๋ถํฐ ๊ธฐ๋ก ์นด์ดํธ๋ค์ด์ด ์์๋๊ณ ๋ชจ๋ ์ ํ๊ฒฝ์ด ๋์ผํ๊ฒ ์๋ํฉ๋๋ค.
์ํฉ 4. ๋ง์ด๊ทธ๋ ์ด์ ๊ท๋ชจ๊ฐ ์ปค์ง๊ณ ์๋ฃํ ์๊ฐ์ด ์์ต๋๋ค.
์๋น์ค ๊ฐ๋ฐ ์ด๊ธฐ์๋ ์์น์ ์ผ๋ก Liquibase๋ฅผ ์ธ๋ถ ์์กด์ฑ์ผ๋ก ์ฌ์ฉํ๋ฉฐ, ๋ชจ๋ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์๋ ๋ ์ฒ๋ฆฌ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ๋ง์ด๊ทธ๋ ์ด์ ๊ท๋ชจ๊ฐ ์ปค์ง๊ณ ์๋ฃํ๋ ๋ฐ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค.
- ์๋ฅผ ๋ค์ด ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ ์ธ์คํด์ค์์ ๋์์ ๋ถ์ฐ ํ๊ฒฝ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์
ํด์ผ ํฉ๋๋ค.
์ด ๊ฒฝ์ฐ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋๋ฌด ์ค๋ซ๋์ ์ ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์๋ ๋ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ํ ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ธ์คํด์ค์ ๊ฐ๋ณ์ ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ์ ์ ์ฉํ๋ฉด ์๋ก ๋ค๋ฅธ ์๋ฒ๊ฐ ๋๊ธฐํ๋์ง ์์ ์ ์์ต๋๋ค.
๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ
๊ทธ๋ฌํ ๊ฒฝ์ฐ, ๊ทํ์ ํ๋ก์ ํธ๋ ์ด๋ฏธ ๊ท๋ชจ๊ฐ ํฌ๊ณ ์ฑ์ธ์ฉ์ผ ์๋ ์์ผ๋ฉฐ Liquibase๋ ๋ณ๋์ ์ธ๋ถ ๋๊ตฌ๋ก ์๋ํ๊ธฐ ์์ํฉ๋๋ค. ์ฌ์ค Liquibase๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก์ jar ํ์ผ๋ก ์ปดํ์ผ๋๋ฉฐ ํ๋ก์ ํธ ๋ด์์ ๋๋ ๋ ๋ฆฝ์ ์ผ๋ก ์ข ์์ฑ์ผ๋ก ์๋ํ ์ ์์ต๋๋ค.
๋
๋ฆฝ ์คํํ ๋ชจ๋์์๋ ๋ง์ด๊ทธ๋ ์ด์
๊ตฌํ์ CI/CD ํ๊ฒฝ์ด๋ ์์คํ
๊ด๋ฆฌ์ ๋ฐ ๋ฐฐํฌ ์ ๋ฌธ๊ฐ์ ๊ฐ๋ ฅํ ์ด๊นจ์ ๋งก๊ธธ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด Liquibase ๋ช
๋ น์ค์ด ํ์ํฉ๋๋ค.
์ถ๋ ฅ
์ค์ ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์ ์์ ์๋ ๋ ๋ง์ ํจ์ ์ด ์์ ์ ์์ผ๋ฉฐ ๊ทธ ์ค ๋ค์์๋ ์ฐฝ์์ ์ธ ์ ๊ทผ ๋ฐฉ์์ด ํ์ํฉ๋๋ค. ๋๊ตฌ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ํจ์ ์ ๋๋ถ๋ถ ํผํ ์ ์๋ค๋ ์ ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ํนํ, ๋๋ ๋์ด๋ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ๋ค์ํ ํํ๋ก ์ฒ๋ฆฌํด์ผ ํ๊ณ , ๊ทธ ์ค ์ผ๋ถ๋ ๋ด ์ค์์ ๊ฒฐ๊ณผ์์ต๋๋ค. ๋ฌผ๋ก ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ถ์ฃผ์๋ก ์ธํด ๋ฐ์ํ์ง๋ง ๋๋ก๋ ๋ฒ์ฃ๊ฐ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ํฉ๋๋ค.
์ถ์ฒ : habr.com