초기화 세팅 하면서 필요했던 과정
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
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:
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)
);
참고
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 만드는데에 하는 성공했다!
'Wecode - Project 1 (부트캠프) > Project 1 과정' 카테고리의 다른 글
Project1- 2일 차: 초기세팅 PR 후 commit (1) (0) | 2023.09.12 |
---|---|
Project 1 - 1일 차: "초기환경" 세팅 [체크리스트] (0) | 2023.09.11 |
Project1 - 1일차: 팀과 [목표세팅/Planning Meeting/모델링] (0) | 2023.09.11 |
Project 1- 1일 차: Planning Meeting (0) | 2023.09.11 |
Project 1- 1일 차: [백] 프로젝트 초기 세팅 (0) | 2023.09.10 |