did_story
[Spring Boot] JPA์ ddl-auto ์ต์ ์ด๋?! ๋ณธ๋ฌธ
[Spring Boot] JPA์ ddl-auto ์ต์ ์ด๋?!
์ด์ ์์ 2025. 6. 12. 23:12๋งค์ผ๋ฉ์ผ์์ ์ง๋ฌธ์ ๋ฐ๊ณ ๋ต๋ณ์ ํ๊ณ ํด๋ต์ ์ ์ด๋ณด๊ณ ์๋ค!
JPA ๊ตฌํ์ฒด ์ค ํ๋์ธ Hibernate๋ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋๋ฐ, ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์คํค๋ง ๊ด๋ฆฌ๋ฅผ ์ ์ดํ๋ ์ค์ ์ผ๋ก ddl-auto๊ฐ ์๋ค. ์ด๋ ๊ด๋ จ ํธ๋ฆฌํ ๊ธฐ๋ฅ๋ง ์ผ๊น, ์๋๋ฉด ์์ฃผ ์ํํ ๊ธฐ๋ฅ์ผ ์๋ ์์๊น?! ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ํด๋น ๊ธฐ๋ฅ์ด ํธํ๊ธฐ๋ ๋๋ ต๊ธฐ๋ ํ๋ค. ์ค๋์ ์ด์ ๋ํด ๊ณต๋ถํด๋ณด์!!
ddl-auto ์์ฑ๊ณผ ์ข ๋ฅ <๋ด๊ฐ ๊ธฐ์ตํ๊ณ ์๋ ๊ฒ>
ddl-auto ๋ 5๊ฐ์ง์ ์์ฑ์ด ์๋ค!
- none: ์ด๋ค ์์ ๋ ์ํํ์ง ์์
- validate: ์ด๋ฆ์ ๋ง๊ฒ Entity class์ ์ ๋งคํ๋๋์ง ์ปฌ๋ผ์ ๋ํ ๊ฒ์ฌ๋ง ์ค์ํ๋ค.
- create: Entity๋ก ๋ฑ๋ก๋ class์ ๋งคํ๋๋ ํ ์ด๋ธ์ ์๋์ผ๋ก ์์ฑํ๋ค!
- create-drop: Entity๋ก ๋ฑ๋ก๋ class์ ๋งคํ๋๋ ํ ์ด๋ธ์ ์๋์ผ๋ก ์์ฑํ๋ค. ๊ทธ๋ฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ข ๋ฃ ์ ํ ์ด๋ธ์ด ์ญ์ ๋๋ค.
- update: Entity๋ก ๋ฑ๋ก๋ ํด๋์ค์ ๋งคํ๋๋ ํ ์ด๋ธ์ด ์์ผ๋ฉด ์๋ก ์์ฑํ์ง๋ง, ๊ธฐ์กด์ ํ ์ด๋ธ์ด ์กด์ ํ๋ค๋ฉด ํ ์ด๋ธ์ ์ปฌ๋ผ์ด ๋ณ๊ฒฝ๋๊ฑฐ๋ ์ถ๊ฐ๋๋ค.
๋ง์ฝ ์ด๋ฐ ์ง๋ฌธ์?! : ๊ฐ ์ต์ ์ ๋ํ ์ค๋ช ์ ํด์ฃผ์๊ฒ ์ด์?
none: ์ค์ ํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง์ ๊ด๋ จ๋ ์ด๋ ํ ์์ ๋ ์ํํ์ง ์์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํ๊ณ ์ถ์ ๋ ์ ์ฉํ๋ฉฐ, ํ๋ก๋์ ํ๊ฒฝ์์ ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
validate: ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์๋ ๋, ์ํฐํฐ ๋งคํ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง์ ์ผ์นํ๋์ง ๊ฒ์ฆํ๋ฉฐ ์คํค๋ง ๋ณ๊ฒฝ์ ๋ฐ๋ก ์ํํ์ง ์์ต๋๋ค. ํ๋ก๋์ ํ๊ฒฝ์์ ์ํฐํฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๊ฐ ์ผ์นํ๋์ง ํ์ธํ๊ณ ์ถ์ ๋ ์ฌ์ฉํฉ๋๋ค.
create: ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์๋ ๋ ๊ธฐ์กด ์คํค๋ง๋ฅผ ์ญ์ ํ๊ณ ์๋ก ์์ฑํฉ๋๋ค. ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ์ญ์ ๋๋ฉฐ ์ํฐํฐ ๋งคํ์ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ์คํค๋ง๊ฐ ์์ฑ๋ฉ๋๋ค. ๊ฐ๋ฐ ์ด๊ธฐ์ ๋น ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์์ฑํด์ผ ํ ๋ ์ ์ฉํฉ๋๋ค. ๊ธฐ์กด ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ์ญ์ ๋๋ฏ๋ก ํ๋ก๋์ ํ๊ฒฝ์์๋ ์ฌ์ฉํ์ง ์์ต๋๋ค.
create-drop: create์ ์ ์ฌํ์ง๋ง, ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ข ๋ฃ๋ ๋ ์คํค๋ง๋ฅผ ์ญ์ ํ๋ค๋ ์ ์ด ๋ค๋ฆ ๋๋ค. ํด๋น ์ต์ ์ ํ ์คํธ ํ๊ฒฝ์์ ์ผ์์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ ์ฉํ๋ฉฐ, ๋งค ํ ์คํธ ์คํ ์๋ง๋ค ๊นจ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ๋ฅผ ์ ์งํ๊ณ ์ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ํ๋ก๋์ ํ๊ฒฝ์์๋ ์ฌ์ฉํ์ง ์์ต๋๋ค.
update: ์ํฐํฐ ๋งคํ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ๋น๊ตํ์ฌ ํ์ํ ๊ฒฝ์ฐ ์คํค๋ง๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค. ๊ธฐ์กด ๋ฐ์ดํฐ๋ ์ ์ง๋์ง๋ง, ์๋ก์ด ์ํฐํฐ๋ ๋ณ๊ฒฝ๋ ์ํฐํฐ ํ๋๋ ์คํค๋ง์ ๋ฐ์๋ฉ๋๋ค. ํด๋น ์ต์ ์ ์ํฐํฐ์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ ๋ ์๋์ผ๋ก ์คํค๋ง๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ์ถ์ ๋ ์ ์ฉํฉ๋๋ค. ํ๋ก๋์ ํ๊ฒฝ์์๋ ์๊ธฐ์น ์์ ์คํค๋ง ๋ณ๊ฒฝ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฃผ์๊ฐ ํ์ํฉ๋๋ค.
๋ ๋ง์ฝ ์ด๋ฐ ์ง๋ฌธ์? : ํ๋ก๋์ ํ๊ฒฝ์์ ์คํค๋ง ๋ณ๊ฒฝ์ ์ด๋ป๊ฒ ํ์ จ์ฃ ?
์คํค๋ง ๋ณ๊ฒฝ์ด ํ์ํ ๋๋ ์ ์ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํด์ ์ ์ด๋ ๋ฐฉ์์ผ๋ก ์คํค๋ง๋ฅผ ๊ด๋ฆฌํ๊ฑฐ๋, ์ฌ์ฉ์๊ฐ ์๋ ์๋ฒฝ์ ์คํค๋ง ๋ณ๊ฒฝ ์์ ์ ์๋์ผ๋ก ์งํํ๋ ๊ฒ์ด ๋์ฑ ์์ ํ ์ ์์ต๋๋ค. - ํญ์
์ฉ์ด์ ๋ฆฌ
- DDL : ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ์ํ๋ ์ธ์ด๋ฅผ ๋งํ๋ฉฐ ๋ฐํฐ์ด๋ฅผ ์์ฑํ๊ฑฐ๋ ์์ , ์ญ์ ๋ฑ ๋ฐ์ดํฐ์ ์ ์ฒด ๊ณจ๊ฒฉ์ ๊ฒฐ์ ํ๋ ์ญํ ํ๋ ์ธ์ด๋ฅผ ๋ปํจ.
- ๋ฐ์ดํฐ ๋ง์ด๊ทธ๋ ์ด์ : ํ ์ปดํจํ ํ๊ฒฝ์ด๋ ์คํ ๋ฆฌ์ง ์์คํ ์์ ๋ค๋ฅธ ์ปดํจํ ํ๊ฒฝ์ด๋ ์คํ ๋ฆฌ์ง ์์คํ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ด๋ํ๋ ๊ฒ. ์ฃผ๋ก ํด๋ผ์ฐ๋ ์ ํ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทธ๋ ์ด๋, ํน์ ์์คํ ์ ๋ฐ์ดํธ ๊ณผ์ ์์ ํ์ํฉ๋๋ค. ๋ง์ด๊ทธ๋ ์ด์ ๊ณผ์ ์ ๋ฐ์ดํฐ ์ ํ, ์ค๋น, ์ถ์ถ, ๋ณํ, ๋ก๋ฉ์ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ค.
- ๋ง์ด๊ทธ๋ ์ด์ ๋๊ตฌ : ๊ฐ์ฅ ๋ง์ด ์ฐ๋๊ฒ์ Flyway, Liquibase ์ด ๋๊ฐ! → ๋ด์ผ ์ด๊ฑฐ ์ ๋ฆฌํด๋ณด์.