JPA/Hibernate λ λ¨μν Database Table μ object λ₯Ό μΆκ°νλ κ²λΏλ§μ΄ μλλΌ Table μ체λ μμ±ν μ μλ€.

Annotation μ μ¬μ©νμ¬ Java Code λ₯Ό μμ±νκ³ , JPA/Hibernate νκ²½μμ μ€ννλ©΄ SQL λ‘ λ³νλμ΄ μ€μ Database μ μ μ©λλ€.
Configuration
Java code ν΅νμ¬ Database Table μ μμ±νκΈ° μνμ¬λ application.properties file μ λ€μμ μΆκ°ν΄μ£Όμ΄μΌ νλ€.
spring.jpa.hibernate.ddl-auto=createλν μμ κ°μ create option μμλ, Application μ μ€ννλ©΄ JPA/Hibernate λ table μ drop ν λ€μ μμ±νλ€. drop μ ν΅ν μμ λ λͺ¨λ data λ₯Ό μμ΄λ²λ¦¬κΈ° λλ¬Έμ μ£Όμν΄μΌ νλ€.
μ΄μΈμ Table μ μμ±νλ options λ λ€μκ³Ό κ°λ€.
| μ΅μ | λμ λ΄μ© | μ¬μ© μ¬λ‘ | λ°μ΄ν° μμ€ μν |
|---|---|---|---|
| create | κΈ°μ‘΄ table μμ ν μλ‘ μμ± | κ°λ°/ν μ€νΈ νκ²½ | λμ |
| create-drop | κΈ°μ‘΄ table μμ ν μλ‘ μμ±, Application μ’ λ£ μ table μμ | ν μ€νΈ νκ²½ | λμ |
| update | schema λ₯Ό μμ (μλ‘μ΄ column/table μΆκ°λ§ κ°λ₯) | κ°λ° νκ²½ | μ€κ° |
| validate | schema μ entity mapping νμΈ(μμ μμ) | μ΄μ νκ²½ | μμ |
| none | Hibernate κ° schema κ΄λ¦¬νμ§ μμ | μ΄μ νκ²½(μλ κ΄λ¦¬ μ) | μμ |
create λ create-drop option μ μ λ Production λ¨κ³μμλ μ¬μ©μ μ§μν΄μΌ νλ€. λͺ¨λ data κ° λ μκ° μ μκΈ° λλ¬Έμ΄λ€.
Recommendation
μΌλ°μ μΌλ‘, κΈ°μ μ΄λ real-time projects μμλ Database Table μ auto generation νμ§ μλλ€. λ¨μν option νλ λ°κΎΌ κ²λ§μΌλ‘λ μ΄μ μ μμλ λͺ¨λ data λ₯Ό μΏμ΄λ²λ¦΄ μ μκΈ° λλ¬Έμ΄λ€.
DBA(Database Administrator) λ€λ Application μ κ΄λ¦¬λ code review λ₯Ό μνμ¬ SQL scripts λ₯Ό μ νΈνλ€. SQL scripts λ customize λ μ μμΌλ©° 볡μ‘ν DB Design μ λνμ¬ fine-tuning μ΄ κ°λ₯νλ€.
auto generation test νκ²½μμ μ¬μ©νκ±°λ, μ¦κ±°μμ μΆκ΅¬νλ μμ£Ό μμ project λ±μμλ μ¬μ©νλ κ²μ΄ μ’λ€.
DB Table Auto Generation - Test
μ°μ Hibernate μμ μ 곡νλ SQL logging κΈ°λ₯μ μ¬μ©ν΄λ³΄μ.
# Add logging configs to display SQL statements
logging.level.org.hibernate.SQL=debug
logging.level.org.hibernate.orm.jdbc.bind=tracedebug λ, μμ±λ Java Code λ₯Ό κΈ°λ°μΌλ‘ Hibernate κ° μ€ννλ SQL query λ₯Ό Log μ μΆλ ₯νλ μ€μ μ΄λ€. μ€μ μ΄λ€ query λ₯Ό μ€ννμ¬ Database μ interacting νλμ§λ₯Ό μ μ μλ€.
trace λ SQL query μ binding λ parameter κ°μ Log μ μΆλ ₯νλ μ€μ μ΄λ€.
μ°μ test λ₯Ό μ§ννκΈ° μ μ νμ¬ DB Table μ μ΄λ€ obejct λ€μ΄ μλμ§ νμΈν΄λ³΄μ.

μ΄μ μλ configuration μ μΆκ°νμ¬ κΈ°μ‘΄μ table μ drop μν¨ μ΄νμ μμ±νλλ‘ νμ.
# Add logging configs to display SQL statements
spring.jpa.hibernate.ddl-auto=createMain App code μμ commandLineRunner μ μ΄μ μ λ§λ€μλ createMultipleStudent() method λ§μ λ£κ³ Application μ μ€ννμ¬ κ²°κ³Όλ₯Ό 보μ.

μ°μ Log μμμλ μ μ΄λ―Έμ§μ κ°μ΄ drop μ μ¬μ©ν SQL, create μ μ¬μ©ν SQL, κ·Έλ¦¬κ³ table μ row λ₯Ό insert νλ SQL λ€μ΄ logging λ κ²μ λ³Ό μ μκ³ , insert query μ μ¬μ©λ parameter μ κ°κ° μ΄λ€ κ°λ€μ΄ mapping λμλμ§λ νμΈν μ μλ€.

μ€μ Database Table μλ μμ κ°μ΄ id κ° 1 λΆν° μμνμ¬, κΈ°μ‘΄ table μ data κ° μμ ν μμ λκ³ μλ‘ μκΈ΄ κ²μ λ³Ό μ μλ€.
μΆκ°μ μΌλ‘ auto-generation μ option μ create μμ update λ‘ λ°κΏμ test ν΄λ³΄λ©΄ μ΄λ»κ² λ κΉ?
update option μ κΈ°μ‘΄μ table μ μμ νμ§ μκΈ° λλ¬Έμ object κ° λ¨μν μΆκ°λλ μμΌλ‘ κ²°κ³Όκ° λ°μν κ²μ΄λ€. κ·ΈλΌ test ν΄λ³΄μ.

λͺ©νν μλλλ‘ κ²°κ³Όκ° μ λμΆλ κ²μ λ³Ό μ μλ€.