Play Framework의 Evolustions를 사용해 보았습니다.

4602 단어 PlayFrameworkScala
Play Framework의 DB 마이그레이션 도구인 Evolustions를 사용해 보았으므로 자동으로 테이블이 생성될 때까지의 흐름을 간략하게 설명합니다.

운영 환경



OS OSX
Play Framework 2.3.8
데이터베이스 PostgreSQL 9.4.5

DB 마이그레이션 도구란?



DB 마이그레이션 도구는 데이터베이스 스키마의 CI(Continuous Integration)를 구현할 수 있는 도구입니다.
응용 프로그램을 배포 할 때마다 서버 측 데이터베이스에 연결하여 수동으로 데이터베이스 스키마를 구축하는 것은 매우 번거롭습니다.
DB 마이그레이션 툴을 이용하는 것으로, 어플리케이션을 배포했을 때에 데이터베이스의 스키마의 차이를 식별해, 자동적으로 스키마 구축을 실시할 수가 있게 됩니다.

에볼루션 스크립트 작성



먼저 conf/evolutions/default1.sql 를 다음과 같이 작성합니다.
# Usersテーブルを生成

# --- !Ups
CREATE TABLE users(id serial, name text);

# --- !Downs
DROP TABLE users;
1.sql 를 에볼루션 스크립트라고 합니다.
스크립트는 다음 두 부분으로 구성됩니다.
  • Ups 파트 : 필요한 스키마를 생성 또는 변경하는 sql를 기술
  • Downs 파트 : Ups 파트를 무시하는 sql를 기술

  • 데이터베이스 만들기



    터미널에서 다음 명령을 실행하여 응용 프로그램에서 사용할 데이터베이스를 만듭니다.
    $ createdb testdb;
    

    application.conf 설정


    conf/application.conf 에 연결할 데이터베이스의 설정을 설명합니다.
    db.default.driver = org.postgresql.Driver
    db.default.url = "jdbc:postgresql://localhost/testdb"
    

    build.sbt 편집



    build.sbt에 PostgreSQL 드라이버를 추가합니다.
    libraryDependencies += "org.postgresql" % "postgresql" % "9.4.1208.jre7"
    

    에볼루션 스크립트 실행



    Play Framewark를 시작하고 localhost:9000으로 이동합니다.
    다음 화면이 표시되므로 Apply this script now! 라고 쓰여진 버튼을 클릭하면 Ups 파트에 기술된 CREATE TABLE users(id serial, name text); 가 실행되어 데이터베이스에 users 테이블이 자동으로 생성됩니다.



    데이터베이스의 스키마는 다음과 같습니다.
    testdb=# \d
     Schema |       Name        |   Type   |  Owner 
    --------+-------------------+----------+----------
     public | play_evolutions   | table    | hoge
     public | users             | table    | hoge
     public | users_user_id_seq | sequence | hoge
    

    테이블의 스키마 변경



    기존의 스키마를 새롭게 변경하고 싶은 경우는, 다음과 같이 2.sql 를 새롭게 작성해, 변경의 내용을 기술해 갑니다.
    # Usersテーブルにカラムを追加
    
    # --- !Ups
    ALTER TABLE users ADD COLUMN age INTEGER;
    
    # --- !Downs
    ALTER TABLE users DROP COLUMN age;
    

    localhost:9000 로 이동합니다.


    2.sql 가 적용되어 users 테이블에 age 열이 추가됩니다.
    testdb=# \d users
                                Table "public.users"
     Column  |  Type   |                        Modifiers                      
    ---------+---------+---------------------------------------------------------
     user_id | integer | not null default nextval('users_user_id_seq'::regclass)
     name    | text    | 
     age     | integer | 
    

    Downs 파트의 역할에 대하여


    1.sql 의 기술을 이하의 내용으로 변경해, localhost:9000 에 액세스 해 봅니다.
    # Usersテーブルを生成
    
    # --- !Ups
    # カラム名をid => user_id に変更する
    CREATE TABLE users(user_id serial, name text);
    
    # --- !Downs
    DROP TABLE users;
    



    Downs 파트는 기존의 x.sql 에 변경이 있을 경우에 실행됩니다.
    Downs 파트를 실행하면 특정 상태로 데이터베이스를 반환하고 Ups 파트를 실행하여 x.sql의 변경 사항을 데이터베이스에 자동으로 적용 할 수 있습니다.
    이 경우에는 1.sql 가 업데이트되었으므로 1.sql 2.sql , 1.sql 의 Ups 파트가 실행됩니다.

    스크립트 실행 확인을 원하지 않는 경우



    application.conf에 다음을 추가하면 Play는 확인하지 않고 자동으로 에볼루션 스크립트를 실행합니다.
    applyEvolutions.default = true  # Ups パートを自動で実行する
    -DapplyDownEvolutions.default = true # Downs パートを自動で実行する
    

    공식 문서에서 다음과 같은 이유로 1.sqlapplication.conf에 작성하는 것은 권장되지 않습니다.

    Play에 의해 계산 된 에볼루션 스크립트가 DOWN 에볼루션 만 가지고 있고이 속성이 설정되어 있지 않으면 Play는이를 수행하지 않고 서버도 시작하지 않습니다.

    참고문헌



    Evolutions
    htps //w w.ぁ yf 라메를 rk. 코 m/도쿠멘들 온/그럼/2.3. x / 에ゔ ぅ 치온 s

    좋은 웹페이지 즐겨찾기