dbmate를 이용하면 손쉽게 Database schema 를 생성 할 수 있고, schema 이력 관리를 할 수 있다.
공식 문서에 자세한 내용이 나와 있으나, 영어를 못하는 나에겐 사용법을 몰라 해당 툴을 사용하는데 꽤 오랜시간이 걸렸다.
그래서 나같은 사람이 더 있을 수 있으니 설치, 사용법을 포스팅 하고자 한다.
공식 문서 참고
필자는 맥을 사용 중 이기에 맥 기준으로 설명 하겠습니다.
brew를 이용해 터미널에서 설치
brew install dbmate
설치 후 dbmate를 사용할 폴더에 간 후 .env
파일을 만들어 줍니다. .env
파일에는 사용할 Database의 URL, Database의 이름이 필요합니다. Database 에 따른 URL은 공식 문서 참고
예시
username
는 SQL의 계정 (mysql의 경우 보통 root를 적으면 됩니다.) password
는 SQL 계정 비밀번호 Mydata
는 damate로 사용할 Database 이름을 적으면 됩니다.
이러면 초기 세팅이 끝났습니다.
Migration Schema 를 사용하는 이유는 버전마다 파일을 보관해 버전 관리가 가능하며, GitHub과 같은 곳에 공유해 나의 DB schema가 어떤식으로 구성되어 있는지 공유할 수 있다.
그리고 생성해둔 Schema.sql 파일을 이용해 매번 테이블 생성을 하지 않아도 된다.
생성 하고자 하는 폴더에 터미널로 진입한 뒤 생성하고자 하는 파일 이름을 new
명령어로 만들면 된다 이 때 만드는 파일 이름은 DB상의 테이블명과 다르니 파일명으로 알아보기 쉽게 생성하면 된다.
dbmate new table
해당 명령어를 치면 db 폴더가 생기고 하위 폴더에 migrations 폴더가 생기고 그 안에 sql 파일이 생긴다.
db ├── migrations ├── 20220831012404_create_user_table.sql ├── 20220831012412_create_post_table.sql ├── 20220831012421_create_like_table.sql └── 20220831013449_comment_create.sql
4개의 테이블을 만들어둔 모습
migrations 폴더에 방금 만들어둔 파일을 Vim, Vscode 등을 통해 열어보면
-- migrate:up
-- migrate:down
파일내부가 이런식으로 되어있다. 여기에 만들 테이블을 쿼리문으로 작성하면 된다.
예시
create_user_table.sql-- migrate:up CREATE TABLE users ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, email VARCHAR(200) NOT NULL, profile_image VARCHAR(1000) NULL, password VARCHAR(200) NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY(id) ); -- migrate:down DROP TABLE users;
create_post_table.sql
-- migrate:up CREATE TABLE posts ( id INT NOT NULL AUTO_INCREMENT, title VARCHAR(100) NOT NULL, content VARCHAR(3000) NULL, user_id INT NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY(id), FOREIGN KEY (user_id) REFERENCES users(id) ); -- migrate:down DROP TABLE posts; ```
dbmate new
명령어를 작성한 폴더에 가 dbmate migrate
명령어를 치면 방금 만들어둔 sql 파일을 읽고 schema.sql
파일을 만들어 주며, schema.sql
파일의 내부 구성은 내가 만들 DB의 schema가 된다.
dbmate 상에서 SQL의 schema를 삭제하거나 만들어 줄 수 있다.
dbmate drop
명령어를 입력하면 DB를 삭제하니 조심하자.
DB가 없는경우dbmate create
명령어를 입력하면 DB를 생성한다.
dbmate up
명령어를 사용하면 DB를 생성하면서 마이그레이션도 같이 진행한다.
좋은내용 감사합니다!!!!