did_story
[JPA] ddl-auto:UPDATE, JPA์์ ์ด๋ค์์ผ๋ก ์๋ํ๋ ๊ฒ์ผ๊น? ๋ณธ๋ฌธ
[JPA] ddl-auto:UPDATE, JPA์์ ์ด๋ค์์ผ๋ก ์๋ํ๋ ๊ฒ์ผ๊น?
์ด์ ์์ 2026. 6. 20. 15:52์ด์ ๊ธ์ ํ์ธํ ๋ ค๋ฉด?!
[Spring Boot] JPA์ ddl-auto ์ต์ ์ด๋?!
๋งค์ผ๋ฉ์ผ์์ ์ง๋ฌธ์ ๋ฐ๊ณ ๋ต๋ณ์ ํ๊ณ ํด๋ต์ ์ ์ด๋ณด๊ณ ์๋ค!JPA ๊ตฌํ์ฒด ์ค ํ๋์ธ Hibernate๋ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋๋ฐ, ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์คํค๋ง ๊ด๋ฆฌ๋ฅผ ์ ์ดํ๋ ์ค์ ์ผ๋ก ddl-auto๊ฐ ์๋ค. ์ด๋
didcheck.tistory.com
update ์คํ์ 4๋จ๊ณ ๊ณผ์
1๏ธโฃ ์ํฐํฐ ์ค์บ ๋ฐ ๋ชจ๋ธ๋ง (Entity Scanning)
์ ํ๋ฆฌ์ผ์ด์
์ด ์์๋ ๋, Hibernate๋ ํ๋ก์ ํธ ๋ด์ @Entity ์ด๋
ธํ
์ด์
์ด ๋ถ์ ํด๋์ค๋ค์ ์น ํ์ด๋ด
๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ํด๋์ค๋ค์ ํ๋, ์ฐ๊ด๊ด๊ณ, ์ ์ฝ์กฐ๊ฑด ๋ฑ์ ๋ฐํ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ์์ ๊ฐ์์ '์ํฐํฐ ์คํค๋ง ๋ชจ๋ธ'์ ์์ฑํฉ๋๋ค.
2๏ธโฃ DB ๋ฉํ๋ฐ์ดํฐ ์ถ์ถ (Database Metadata Extraction)
๊ทธ๋ค์, ์ค์ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ง์ ์ฐ๊ฒฐ(JDBC Connection)ํ์ฌ ํ์ฌ ๋ง๋ค์ด์ ธ ์๋ ํ
์ด๋ธ, ์ปฌ๋ผ, ์ ์ฝ ์กฐ๊ฑด ๋ฑ์ ์ค์ ๊ตฌ์กฐ ์ ๋ณด(๋ฉํ๋ฐ์ดํฐ)๋ฅผ ์ฝ์ด์ต๋๋ค.
3๏ธโฃ ๋ ์คํค๋ง์ ๋น๊ต (Comparison & Diffing)
์ด์ ๋ฉ๋ชจ๋ฆฌ์ ์๋ '์ํฐํฐ ๋ชจ๋ธ'๊ณผ DB์์ ์ฝ์ด์จ '์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง'๋ฅผ ๊ผผ๊ผผํ๊ฒ ๋น๊ตํฉ๋๋ค.
- "์ด? ์ํฐํฐ์๋ Member ํ ์ด๋ธ์ด ์๋๋ฐ DB์๋ ์๋ค?"
- "์ํฐํฐ์ Member์ age ์ปฌ๋ผ์ด ์ถ๊ฐ๋์๋๋ฐ, DB์๋ ์์ง ์๊ตฌ๋!"
์ด๋ ๊ฒ ๋ ๋ชจ๋ธ ์ฌ์ด์ ์ฐจ์ด์ (Diff)์ ์ฐพ์๋ ๋๋ค.
4๏ธโฃ DDL ์์ฑ ๋ฐ ์คํ (DDL Generation & Execution)
์ฐพ์๋ธ ์ฐจ์ด์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ํ๊ธฐ ์ํด ALTER TABLE์ด๋ CREATE TABLE ๊ฐ์ SQL ๋ฌธ(DDL)์ ์์ฑํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์ฟผ๋ฆฌ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ ๋ ค ์คํค๋ง๋ฅผ ์
๋ฐ์ดํธํ๊ฒ ๋ฉ๋๋ค.
JPA ๊ด์ ์์ ๋ณธ update์ ํต์ฌ ํน์ง๊ณผ ํจ์
์ด ๊ณผ์ ์ ๊ฑฐ์น๊ธฐ ๋๋ฌธ์ update ์ต์ ์ ์์ฃผ ๋ช ํํ ํ๊ณ์ ํน์ง์ ๊ฐ์ง๋๋ค. ์ด ๋ถ๋ถ์ ๊ผญ ๊ธฐ์ตํด ๋์ ์ผ ํด์!
- ์ค์ง '์ถ๊ฐ(Append)'๋ง ๊ฐ๋ฅํฉ๋๋ค: ๋ฐ์ดํฐ์ ์์ ์ ์ํด์ ๊ธฐ์กด ํ ์ด๋ธ์ด๋ ์ปฌ๋ผ์ ์ญ์ (DROP)ํ์ง๋ ์์ต๋๋ค. ๋ง์ฝ ์ฝ๋์์ ์ํฐํฐ์ ํน์ ํ๋๋ฅผ ์ง์ ๋๋ผ๋, DB์ ์ปฌ๋ผ์ ์ง์์ง์ง ์๊ณ ๊ทธ๋๋ก ๋จ์์๊ฒ ๋ฉ๋๋ค.
- ์ปฌ๋ผ๋ช ๋ณ๊ฒฝ ์์ ํจ์ : ์ํฐํฐ์์ ํ๋ ์ด๋ฆ์ userName์์ nickname์ผ๋ก ๋ฐ๊พธ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? JPA๋ "์ด๋ฆ์ด ๋ณ๊ฒฝ๋์๋ค"๋ผ๊ณ ๋๋ํ๊ฒ ์ธ์ํ์ง ๋ชปํฉ๋๋ค. ๋์ "๊ธฐ์กด์ userName์ ์ญ์ ๋์๊ณ (ํ์ง๋ง DROP์ ์ ํจ), nickname์ด๋ผ๋ ์๋ก์ด ์ปฌ๋ผ์ด ์๊ฒผ๊ตฌ๋!"๋ผ๊ณ ํ๋จํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก DB์๋ ๋ ์ปฌ๋ผ์ด ๋ชจ๋ ์กด์ฌํ๊ฒ ๋ฉ๋๋ค.
- ํ์ ๋ณ๊ฒฝ์ ํ๊ณ: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ข ๋ฅ(Dialect)์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง, ์ด๋ฏธ ์กด์ฌํ๋ ์ปฌ๋ผ์ ๋ฐ์ดํฐ ํ์ ์ ๋ณ๊ฒฝ(์: VARCHAR -> INT)ํ๋ ๊ฒ์ ์ง์ํ์ง ์๊ฑฐ๋ ์๋ฌ๋ฅผ ๋ฐ์์ํค๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.