Wecode - Project 1 (부트캠프)/Project 1 과정

Project1 - 1일 차: db mate 설치 및 작동

JBS 12 2023. 9. 11. 21:20

초기화 세팅 하면서 필요했던 과정

https://pm-developer-justdoit.tistory.com/85


dbmate 배경

테이블 만들 때, 데이터베이스 들어가서 만드는데,

mysa데이터베이스 만들다가 문법 에러나거나 다시 수정해야 하면, 다시 처음부터 해야 하는데, 

 

지금은 sql 문법에 익숙해져야 해서 그런건데, 귀찮음. 

 

그것을 파일로 관리하는 방법이 있음. 

 

테이블 100개를 만들 때, 데이터베이스에 들어가서 

테이블 100개를 만들어놓으면 관리가 안 되니, 

어떤 테이블을 어떻게 만들지 파일에 미리 정리를 해놓을 것! 

 

예시.

create table을 할 건데, 
users table을 만들 거고, 
id integar, name varchar, email varchar로 not null이다. 

이 sql 문법을 파일에 저장을 해 놓고, 

 

'테이블을 날리고, 삭제하고, 다시 재설치'가 필요할 때마다 

이 파일을 실행시키는 것. 

 

그럼 이게 동작을 할 것. 


 

이런 테이블을 만들거야 라고 선언 후

create table users ( id integar, name varchar(255), email varchar(255)  not null); 

 

명령어 "dbmate up" 치면 

dbmate 가, 가서 데이터베이스 만들어 줄 것.


 

이런 명령어가 dbmate만 있는 게 아님. 많음. 

이런 과정들을 migration file이라고 함. 

= 데이터베이스를 이전시키는 파일 

 

 

migrating을 도와주는 도구가 많은데, 


참고 한 것

1. 

https://velog.io/@kisuk623/dbmate

2. dbamate 공식 문서 

https://github.com/amacneil/dbmate#mysql

 

GitHub - amacneil/dbmate: :rocket: A lightweight, framework-agnostic database migration tool.

:rocket: A lightweight, framework-agnostic database migration tool. - GitHub - amacneil/dbmate: :rocket: A lightweight, framework-agnostic database migration tool.

github.com

 

 

dbmate 설치 / 사용 하기

dbmate를 이용하면 손쉽게 Database schema 를 생성 할 수 있고, schema 이력 관리를 할 수 있다.

velog.io


dbmate란?

mysql로 테이블 100개를 만들 수 없으니 

 

dbmate로 테이블들을 하나의 파일안에 만들어서 한번에 합치는 것.

 

dbmate up, dbmate drop

데이터베이스는 우리가 이름 넣어둔 걸로 저절로 sql table에 생성됨. 


0. 설치

 

1.  [.env] [.env.sample] 에  url 추가

 

 .env 파일 상단에 url 넣고


.env.sample 파일에는 아래 사진처럼

 

2. Create a New Migration:

erd modelling에 따라서


dbmate new create_user_table
dbmate new create_posts_table
dbmate new create_posts_like_table
dbmate new create_posts_comments_table

(일부러 dbmate table만 한번에 생성함) 


--> 이러면, table과 column 틀 만들어졌고 (정보는 프론트가 / 우리는 프론트 멘토님들꼐 데이터 받아서 테스트하면됨)


3. dbmate up  -> 위 테이블 폴더에 각 파일 생성돼서 올라감

4-1. 각 파일에 있는 migrate:up에 자리에 넣기 

 

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nickname VARCHAR(255) NOT NULL,
  email VARCHAR(255) NOT NULL UNIQUE,   --> email 중복 방치 (속성) / 데이터베이스는 데이터 저장만 하는게 아니라, 속성도.
  password VARCHAR(255) NOT NULL,
  phone_number VARCHAR(20) NULL,
  birth_day DATE NULL,
  profile_image VARCHAR(255) NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

 

///우리는 posts대신  threads를 썼다. 

CREATE TABLE threads (
  id INT AUTO_INCREMENT PRIMARY KEY,
  user_id INT NOT NULL,
  content TEXT NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  FOREIGN KEY (user_id) REFERENCES users(id)
);

CREATE TABLE thread_comments (
  id INT AUTO_INCREMENT PRIMARY KEY,
  thread_id INT NOT NULL,
  user_id INT NOT NULL,
  content TEXT NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  FOREIGN KEY (thread_id) REFERENCES threads(id),
  FOREIGN KEY (user_id) REFERENCES users(id)
);

CREATE TABLE thread_likes (
  id INT AUTO_INCREMENT PRIMARY KEY,
  user_id INT NOT NULL,
  thread_id INT NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (user_id) REFERENCES users(id),
  FOREIGN KEY (thread_id) REFERENCES threads(id),

  UNIQUE KEY unique_user_thread (user_id, thread_id)     
);

 

참고 

 

Project1- 1. 초기세팅 PR 후 commit (1)

--------------------- npm install express 하고나서는, 계속 npm install mysql mysql2 typeorm cors bcrypt dotenv --save-dev 똑같이 해도 된다 설치 후엔 package.json에 무조건 들어왔는지 확인하면서! ------------------- CREATE TAB

pm-developer-justdoit.tistory.com

4-2.내용물 수정하려면  터미널 말고, vscode 각 파일 안에 가서 직접 수정하면 됨

 

그리고 나서 터미널에 

dbmate up 해야지 

저장.

 

5. .gitignore 에 dbmate(schema.sql) 파일과 추후 생성하고 관리할 csv 파일 확장자명/디렉토리 포함. (이건 순서 상관없음) 

 

6. mysql > show databases ; > use table name ; > desc tablename; 각각 테이블 잘 됏는지 확인

이번에도 select* from users; 로 해서 당황하고, 

아아아 하면서 desc users;로 했다. 

7. 깃허브에 푸쉬 과정 

 

올릴 폴더에 들어와있는지 보고, 

git checkout [branch이름]

git add . 

git commit -m " "

git log 

git remote add origin [repository 주소]

git remote -m 

git push -u origin [branch 이름] 

새로고침해서, BRANCH생성됐는지 확인 후, 

branch면 Pull request로 pr ! 

(main에 올렸으면 안 해도 됨) 


+ 내가 깃허브로 push 한 코드를 

팀원이 clone해서 

데이터베이스 이름 다르게 하고, 각자 mysql password 해서 Url 했는데

dbmate로 mysql 만드는데에 하는 성공했다!