flyway - Java ¿ë Database migration framework
¼Ò°³
°³¹ßÀ̳ª ¿î¿µÀ» ÇÏ¸é¼ º¯°æ ³»¿ªÀ» ¹Ý¿µÇÒ ¶§ °¡Àå ¸¹ÀÌ ½Ç¼öÇÏ´Â ºÎºÐÀº Local À̳ª ƯÁ¤ ȯ°æ¿¡¼¸¸ µÇ°Ô °³¹ß/ÆÐŰ¡ÇÏ¿© ½ÇÁ¦ ¿î¿µÈ¯°æ¿¡¼´Â ÀǵµÇÑ´ë·Î µ¿ÀÛÇÏÁö ¾Ê´Â °ÍÀ̾ú´Ù.
Build/packaging/deploy ½Ã ¿î¿µ¿¡¼ ¹ú¾îÁö´Â ½Ç¼öµéÀº Çü»ó°ü¸® ¹× CI ¼¹ö, Å×½ºÆ® ÀÚµ¿È, ¹èÆ÷ ÀÚµ¿ÈµîÀÇ °³¹ß ÇÁ·Î¼¼½º¸¦ Àû¿ëÇÏ¿© °ÅÀÇ ´Ù ÇØ°áÀÌ µÇ¾úÁö¸¸
¿©ÀüÈ÷ ÀÚÁÖ ¹ß»ýÇÏ´Â ½Ç¼ö´Â °³¹ßÀ̳ª Å×½ºÆ® ½Ã½ºÅÛÀÇ DB ½ºÅ°¸¶³ª µ¥ÀÌŸ¸¸ ¹Ù²Ù°í ½ÇÁ¦ ¿î¿µ¿¡¼´Â ÇØ´ç ½ºÅ°¸¶³ª µ¥ÀÌŸ Àû¿ë ÀýÂ÷¸¦ »©¸Ô´Â °ÍÀÌ´Ù.
À§¿Í °°Àº »óȲÀÌ ÀϾ´Â ÀÌÀ¯´Â Source ÄÚµå ¹× db schema °¡ Á¤¸®µÈ ERD ³ª SQL ÆÄÀÏÀº Çü»ó °ü¸®°¡ °¡´ÉÇÏÁö¸¸ ÀÌ ÆÄÀÏÀÌ DBMS ¿¡ ¹Ý¿µµÆ´ÂÁö ÀÚü´Â µû·Î °ü¸®°¡ µÇÁö ¾Ê±â ¶§¹®ÀÌ´Ù.
¹°·Ð ERD °°Àº ¼Ö·ç¼Ç¿¡¼ Reverse Engineering À» Çؼ Å×½ºÆ® DB ¿Í ¿î¿µ DB ÀÇ ½ºÅ°¸¶¸¦ ºñ±³ÇѴٰųª ÇÏ´Â ³ë°¡´Ù¸¦ ÇÏ¸é °¡´ÉÇÏÁö¸¸ ¿î¿µ DB ¿¡ ´ëÇؼ Àú·± ÀÛ¾÷À» ÇÏ´Â°Ç ¹Î°¨ÇÏ°í ºÎ´ãÀÌ µÇ´Â ÀÛ¾÷ÀÌ´Ù.
http://flywaydb.org/getstarted/whyDatabaseMigrations.html ¿¡¼ ¹ßÃé
ruby on rails ³ª laravel frameworkÀ» º¸°í °¡Àå ³î¶ú´ø°Í Áß¿¡ Çϳª´Â db:migration ±â´ÉÀ̾ú´Ù.
schema ÆÄÀÏÀ» sqlplus ³ª mysql client °°Àº °÷¿¡¼ ½ÇÇàÇؼ ¹Ý¿µÇÏÁö ¾Ê°í DBMS schema versionÀ» °ü¸®ÇÏ´Â Å×À̺íÀ» ¸¸µé°í db:migrate version ¸í·É¾î¸¦ ½ÇÇàÇÏ¸é ¹öÀü¿¡ ¸Â´Â ½ºÅ°¸¶ ¹× SQL ¹®À» Àû¿ëÇÏ´Â ¹æ½ÄÀ¸·Î DBMS ¸¦ °ü¸®ÇÏ´Â db:migration ±â´ÉÀº ¼ºñ½º °³¹ß/À¯Áöº¸¼öÇÒ¶§ ²À ÇÊ¿äÇÑ ±â´ÉÀ̶ó´Â »ý°¢ÀÌ µé¾ú´Ù.
flyway ´Â Java ¿¡¼ Ruby on Rails ³ª Laravel ó·³ DB migration À» ÇÒ¼ö ÀÖ´Â ÇÁ·¹ÀÓ¿÷ÀÌ´Ù.
µ¿ÀÛ ¹æ½Ä
http://flywaydb.org/getstarted/howFlywayWorks.html
»ç¿ëÇÏ´Â DBMS ¿¡ SCHEMA_VERSION ¶ó´Â Å×À̺íÀ» ¸¸µé°í ¿©±â¿¡ DBMS ÀÇ ¹öÀü ¹× º¯°æ ½ºÅ©¸³Æ®, º¯°æÀÏ, º¯°æ°á°ú µîÀ» ±â·ÏÇÑ´Ù.
migration sql file
http://flywaydb.org/documentation/migration/sql.html
file name
- ÆÄÀϸíÀº ´ë¹®ÀÚ V¿Í ¼ýÀÚ·Î ½ÃÀÛÇØ¾ß flyway °¡ schema ÆÄÀÏ·Î ÀνÄÇÔ
- V µÚ¿¡ ¼ýÀÚ(Dot µµ °¡´É - 1.1.3)·Î ¹öÀü¸íÀ» ÁöÁ¤ÇÏ°í underbar(_) ¸¦ µÎ °³ ºÙ¿©¾ß ÇÔ.
- À̽´°ü¸® ½Ã½ºÅÛÀ» »ç¿ëÇÑ´Ù¸é ÆÄÀÏ¸í¿¡ Issue number ³ª ticket ¸íÀ» ºÙÀ̸é history °ü¸®½Ã ´õ Æí¸®ÇÒ °Í °°À½(Ex: V3__PRJ-123_Create_person_table.sql)
Sql Script syntax
- Single- or multi-line statements
- Flexible placeholder replacement
- Single- (--) or Multi-line (/**/) comments spanning complete lines
- Database-specific SQL syntax extensions (PL/SQL, T-SQL, ...)
maven Àû¿ë ¿¹Á¦
- JDK 5+ ¹× maven 2, 3 ÇÊ¿ä
Create the project
maven archetype À¸·Î ¿¹Á¦ ÇÁ·ÎÁ§Æ® »ý¼º
- cd bar
pom ¿¡ ÀÇÁ¸¼º Ãß°¡
Flyway¿Í ÅëÇÕ
src/main/java/foobar/App.java ¿¡ Flyway migration ¹× »ç¿ëÇÒ DBMS Á¤º¸ ¼³Á¤
ù¹ø° migration »ý¼º
migration directory »ý¼º
src/main/resources/db/migration/V1__Create_person_table.sql migration schema »ý¼º
ù¹ø° migration ½ÇÇà
mvn ¸í·É¾î·Î ù¹ø° migration ½ÇÇà
µÎ¹ø° migration ½ÇÇà
src/main/resources/db/migration/V2__Add_people.sql ¿¡ µÎ¹ø° migration schema ÀÛ¼º
Command-line tools ·Î migration
http://flywaydb.org/getstarted/firststeps/commandline.html
Maven plugin, API, Ant µîÀÌ ÀÖÁö¸¸ Command-line ÀÌ Á¦ÀÏ Æí¸®ÇÑ°Í °°¾Æ¼ cmd-tool·Î db migration Á¤¸®
¼³Ä¡
- http://flywaydb.org/getstarted/firststeps/commandline.html ¿¡¼ ´Ù¿î·Îµå
- unzip flyway-commandline-2.3.zip
- H2 driver ¸¦ »ç¿ëÇÑ´Ù¸é http://repo1.maven.org/maven2/com/h2database/h2/1.3.170/h2-1.3.170.jar ¿¡¼ ´Ù¿î·ÎµåÈÄ¿¡ flywayÀÇ jars Æú´õ¿¡ º¹»ç
- MySQL Àº http://dev.mysql.com/downloads/connector/j/ ¿¡¼ driver ´Ù¿î·ÎµåÈÄ jars ¿¡ º¹»ç
¾ÐÃà Ç®¸° Æú´õ¸¦ /usr/local µî¿¡ À̵¿ÇÏ°í profile ¿¡ Æнº ¼³Á¤Çϰųª alias ·Î ¿¬°á
¼³Á¤
conf/flyway.properties ¿¡ ÇÊ¿äÇÑ ¼³Á¤ Ãß°¡
»ç¿ë¹ý
flyway [options] command
command
Commands | Description | |
---|---|---|
clean | ½ºÅ°¸¶ Á¤º¸ Å×À̺íÀÇ migration µÈ ¸ðµç ¿ÀºêÁ§Æ®¸¦ Áö¿î´Ù. ¿î¿µ ȯ°æÀ̶ó¸é ½É°¢ÇÑ ¹®Á¦¸¦ ÀÏÀ¸Å³ ¼ö ÀÖÀ¸´Ï ÁÖÀÇ. | |
init | metadata table À» »ý¼º ¹× ÃʱâÈÇÑ´Ù. ÀÌ¹Ì »ý¼ºµÇ¾î ÀÖ´Ù¸é ¿¡·¯¸¦ ¹ß»ý½ÃŲ´Ù, | |
migrate | Migrates the database | |
validate | Validates the applied migrations against the ones on the classpath | |
info | Prints the information about applied, current and pending migrations | |
repair | Repairs the metadata table after a failed migration |
ÁÖ¿ä options
config ¿¡ ÀÖ´Â ¼³Á¤ Ç׸ñµéÀ» runtime ¿¡ options À¸·Î ó¸® °¡´É
-X : µð¹ö±ë¿ë ÀÚ¼¼ÇÑ Ãâ·Â
ù¹ø° migration »ý¼º
À§ sql µð·ºÅ丮 ¹Ø¿¡ V1__Create_person_table.sql »ý¼º
ù¹ø° migration ½ÇÇà
µÎ¹ø° migration ½ÇÇà
sql µð·ºÅ丮 ¹Ø¿¡ V2__Add_people.sql »ý¼º
migration Á¤º¸ È®ÀÎ
command line arguent overide
driver³ª sql Æú´õµîÀÌ config ¿¡ ÁöÁ¤µÇ¾î ÀÖÀ¸¹Ç·Î ¿©·¯ °³ÀÇ DB °¡ Àְųª ¿©·¯ ÇÁ·ÎÁ§Æ®¸¦ ±¸µ¿ÇÒ °æ¿ì flywayÀÇ config ¿É¼ÇÀ» ¼öÁ¤ÇØ¾ß ÇÏ´Â ºÒÆíÇÔÀÌ ÀÖ´Ù. À̸¦ À§ÇØ ±¸µ¿½Ã ¼³Á¤°ªÀ» ¹Ù²Ü¼ö ÀÖ´Â ±â´ÉÀ» Á¦°øÇÑ´Ù.
Çü½ÄÀº -key=value À̸ç key °ªÀº config ¿¡ ÁöÁ¤µÈ °ª¿¡¼ flyway ¶ó´Â prefix ¸¦ Á¦°ÅÇÏ¸é µÈ´Ù.
migration ¿ë SQL ÆÄÀÏÀº locations property ÀÌ°í JDBC driver µîÀ» ã´Â property´Â jarDir ÀÌ´Ù.
¼Ò°¨
- flyway ´Â open source À̳ª »ó¿ë ±â¼ú Áö¿øÀ¸·Î µ·À» ¹ö´Â »ç¾÷ ¸ðµ¨ äÅÃÇÔ. ±×·¡¼ ÀϹÝÀûÀÎ ¿ÀǼҽºº¸´Ù ¹®¼ Ç°ÁúÀÌ ¸Å¿ì ÈǸ¢ÇÔ
- maven, command-tool, API, Gradle, Ant µî°ú ¿¬°èÇؼ »ç¿ë °¡´ÉÇϳª °³ÀÎÀûÀ¸·Î´Â command-tool ÀÌ ½ÇÁ¦ ¿î¿µ ȯ°æ¿¡ migrate Çϱ⿡ ÀûÇÕÇÑ°Í °°À½
- ¿î¿µ ȯ°æ¿¡¼ web app µðÇ÷ÎÀ̸¦ maven À¸·Î ¹Ù·Î ÇÏÁö´Â ¾ÊÀ¸¹Ç·Î db migration ÀÛ¾÷¿¡ ¸ÞÀ̺ìÀ» »ç¿ëÇÏ´Â °Í º¸´Ù´Â Ä¿¸Çµå ¶óÀÎ ¹æ½ÄÀÌ ÀûÀý
- ruby on rails ¿Í ´Þ¸® rollback ÀÌ ¾øÀ¸³ª ½ÇÁ¦·Î db ÀÛ¾÷½Ã rollback Àº ¸®½ºÅ©°¡ Å©¹Ç·Î Àû¿ëÇÏÁö ¾Ê´Â´Ù°í ÇÏ´Ï ºüÁ®µµ »ó°üÀº ¾øÀ»µí
- schema ÀÇ ¹öÀüÀº ÆÄÀϸíÀ¸·Î ÆÇ´ÜÇϹǷΠ°³¹ßÀÚ°¡ ¹öÀüÀ» Á÷Á¢ ÁöÁ¤ÇØ ÁÖ¾î¾ß ÇÔ. ÆÄÀÏÀÇ ¹öÀüÀÌ °°À¸¸é ¿¡·¯°¡ ¹ß»ýÇϹǷΠ½Ç¼ö ¿©Áö´Â ÀûÀ» °Í °°À½
- flyway clean ¸í·É¾î´Â Àû¿ëµÈ migration À» ¸ðµÎ »èÁ¦ÇϹǷΠ¸Å¿ì À§ÇèÇϳª º°µµÀÇ ¾ÈÀüÀåÄ¡°¡ ¾øÀ½
- ÃÖÃÊ¿¡ ½ºÅ°¸¶ »ý¼ºÀ» flyway ·Î ÇÏ°í ¿î¿µÁß¿¡ clean ¸í·ÉÀ» ½ÇÇàÇÏ¸é ¸ðµç table ÀÌ drop µÇ¾î ¹ö¸®¹Ç·Î ½É°¢ÇÑ »óȲÀÌ ¹ß»ýÇÔ
- ¿î¿µÈ¯°æ¿¡¼ clean ¸í·ÉÀº »ç¿ëÇÏÁö ¸øÇÏ°Ô ÇÏ´Â ¾ÈÀü ÀåÄ¡°¡ ÇÊ¿äÇÔ
- ¼Ò½º¸¦ ¼öÁ¤Çؼ ¿î¿µ¿ë(clean »ç¿ë ºÒ°¡)°ú °³¹ß/Å×½ºÆ®¿ë flyway(clean »ç¿ë °¡´É) ·Î ³ª´©¾î »ç¿ëÇÏ´Â°Ç ¸Å¿ì ¹ø°Å·Ó°í flyway »õ ¹öÀüÀÌ ³ª¿À¸é ¼Ò½º ¼öÁ¤À» ÇØ¾ß ÇϹǷΠÁÁÀº ¹æ¹ýÀº ¾Æ´Ñ°Í °°À½
Ref