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개의 댓글

Powered by GraphCDN, the GraphQL CDN