dbmate

여리·2023년 3월 9일
0

dbmate를 이용하면 손쉽게 Database schema 를 생성 할 수 있고, schema 이력 관리를 할 수 있다.
공식 문서에 자세한 내용이 나와 있으나, 영어를 못하는 나에겐 사용법을 몰라 해당 툴을 사용하는데 꽤 오랜시간이 걸렸다.
그래서 나같은 사람이 더 있을 수 있으니 설치, 사용법을 포스팅 하고자 한다.
공식문서 링크 : (https://github.com/amacneil/dbmate)

필자는 맥을 사용 중 이기에 맥 기준으로 설명 하겠습니다.

설치
brew를 이용해 터미널에서 설치

brew install dbmate

설치 후 dbmate를 사용할 폴더에 간 후 .env파일을 만들어 줍니다. .env파일에는 사용할 Database의 URL, Database의 이름이 필요합니다. Database 에 따른 URL은 공식 문서 참고

예시

username 는 SQL의 계정 (mysql의 경우 보통 root를 적으면 됩니다.) password 는 SQL 계정 비밀번호 Mydata 는 damate로 사용할 Database 이름을 적으면 됩니다.
이러면 초기 세팅이 끝났습니다.

Migration Schema 생성
Migration Schema 를 사용하는 이유는 버전마다 파일을 보관해 버전 관리가 가능하며, GitHub과 같은 곳에 공유해 나의 DB schema가 어떤식으로 구성되어 있는지 공유할 수 있다.
그리고 생성해둔 Schema.sql 파일을 이용해 매번 테이블 생성을 하지 않아도 된다.

Table 생성

생성 하고자 하는 폴더에 터미널로 진입한 뒤 생성하고자 하는 파일 이름을 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를 생성하면서 마이그레이션도 같이 진행한다.

profile
beckend developer

0개의 댓글