Contents

DBmate 사용법

 
 

mySQL을 사용하여 Database를 쌓아 나갈때,
DBmate 를 사용하면
초기 세팅값을 마치 git을 저장하듯 이력을 남겨 언제든 migration 할 수 있다.

 

지금부터의 설명은 macOS 기준으로 기술한다. (windows가 없음 ;; )  
 

DBmate 설치

Homebrew 를 사용하여 설치한다. 1  

터미널 아무 위치에서나 무관하다. 2  

$brew install dbmate

 

이렇게 입력 후, 엔터키를 누르면 자동으로 설치가 된다.

 

그리고, 하나의 파일이 필요하다. 바로 .env 파일. IDE 또는 터미널 vim으로 .env 파일을 생성한 후, 다음과 같이 입력한다. " cat.env " 이런식으로 해도 되고, 바로 확장자부터 시작하는 파일명도 된다.

 
 

https://i.imgur.com/exo1tj9.png

 
 

작성해야할 코드는 단 한줄!

 

아래와 같다.
 

DATABASE URL="mysql://username: [email protected]:3306/database이름"

 
 

주의사항

  • username : mySQL 서버 실행시 설정했던 이름을 넣으면 되는데 보통 root이다.
  • database 위치 반드시 확인!! (localhost라면 127.0.0.1:3306 이 default 값이다.)3
  • 기존의 database가 있다면 database 이름을 똑같이 적어야 한다. (아니면 또다른 이름의 DB생성됨)

주소 잘못 입력하면 아래 이미지와 같은 error 메세지를 무한히 받아볼 수 있다. ;;
 

https://i.imgur.com/7NzlX12.png  
 

DBmate 세팅

 

dbmate new create_users2_table

 

위와 같이 이라고 터미널에서 입력하면
 

migrations 폴더가 자동 생성되면서 users2라는 테이블이 생성할 수 있는sql 파일이 생성된다.

https://i.imgur.com/4hwSNaI.png

 

그리고 IDE나 vim에서 해당 sql 파일에 테이블 생성 규칙을 작성해주면 된다.

 
 

DBmate sql 문서 작성

위와 같이 제대로 파일이 생성되면 파일 편집시 이런 양식이 들어가 있음을 볼 수 있다.  

-- migrate:up


-- migrate:down

 
 

-- migrate:up => table 생성시 넣고자 하는 코드  

-- migrate:down => 보통 테이블 제거시 실행할 명령문  

-- migrate:up
create table users (
  id integer,
  name varchar(255),
  email varchar(255) not null
);

-- migrate:down
drop table users2;

 
위와 같은 형식으로 작성된다.

 

제대로 했다면, 이게 끝이다.
 
 

migration 실행

 

$dbmate up

 
문서를 모두 작성 한 후, 터미널에서 명령어를 실행하면
 

https://i.imgur.com/pqsIXNe.png

 

이런 아름답고 꿈에 그리던 메세지를 받아볼 수 있다.

 

그리고 mySQL 서버로 가서 show tables; 를 입력해보자.
무사히 테이블이 생성되어 있음을 확인할 수 있다.

 

dbmate down

 

위 명령어도 실행해보며 DBmate가 어떻게 돌아가는지 알면 좋다.

 
 

추가 보완해야 할 사항

위 문서에서는 하나의 테이블을 가지고 예를 들었는데, 명령어는 단순히 dbmate up이 끝이다.
 

만약 여러 테이블을 생성한다면??
어떤 테이블을 up 하는 건지 table에 대한 지정이 없다.
 

즉, 아마도 테이블의 생성 순서에 따라 순차적으로 실행되지 싶은데,
이부분은 mock table을 여러개 만들어 직접 실험을 해봐야겠다.


참고문서


  1. 참고로 맥에서 개발 관련 어플리케이션이나 cask 소프트웨어는 brew를 통해 설치 및 관리하는 것이 편하다… 라고 해서 그렇게 하고 있다. ↩︎

  2. $ 몰랐는데 이게 그런 뜻인듯. ↩︎

  3. 참고로 저 주소를 localhost:3306이라고 했다가 DBmate가 제대로 먹히질 않아서 1시간이나 헤맸다. 정확하게 써야 함! ↩︎