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

Project1- 2일 차: 초기세팅 PR 후 commit (1)

JBS 12 2023. 9. 12. 17:00

팀 레포지토리에 
초기세팅 branch 생성 후, push , pr 요청 후 
 
pr리뷰를 받았다. 
 

1. dependencies 설치

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


2. 이메일의 중복 기입을 막을 수 있게 수정하여주세요! --> mysql 데이터베이스 속성 활용

1) 이메일이 중복되지 않기 위해서,
데이터베이스에도 user 테이블에
email에 unique를 추가해야한다. 
 
CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nickname VARCHAR(255) NOT NULL,
  email VARCHAR(255) NOT NULL, UNIQUE
  password VARCHAR(255) NOT NULL,
  birth_day DATE NOT NULL,
  phone_number VARCHAR(20) NULL,
  profile_image VARCHAR(255),
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
); 
 
나는 중복 기입 막는거는, 회원가입 api에서만 알려주는지 알았는데, 
-> 데이터베이스가 데이터만 저장 하는게 아니라, 저장하는 속성값도 정해준다. 
 

db mate 설치 및 작동

참고 한 것 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 d

pm-developer-justdoit.tistory.com

 
2) 위와 같이 수정을 해야 하는데, migration 파일 내부 migrate:up  아래 부분에 수정 후, 터미널에  dbmate up 하면 되는지 알았는데,
깃허브에도 수정한 게 올라와있다... 

근데 
mysql에 찍어보니까, 저장이 되지 않았더라. 

 
알고보니, 
 
1) 수정을 하는 dbmate를 또 생성 해야 했다. 
create users table 말고,
alter을 해야 한다. 
 
2) dbmate new 로 파일을 하나 생성하고, 그 안에 내용에, alter코드를 넣는 것. 
내용물은 복사본(똑같은 내용을 쓰라는게 아니고,) 
수정하는 명령어 Alter를 
migrateup 아래에 넣는다. 


ALTER TABLE user MODIFY COLUMN email varchar(200) NOT NULL UNIQUE
--> user 테이블을, 수정한다, email 칼럼을, 위와 같은 내용으로. 
 
 
생성하고자 하는 파일 이름은, dbmate new 로 한다. 
dbmate new [테이블이름] --> 테이블 이름은 알아보기 쉽게 지을 것. 

vscode 수정은 상관없고, 
branch는 git add, git commit으로 


이후 났던 오류 사항: 
dbmate up은 branch 상관 없다. 
branch가 틀린 게 아니라, 
user 이름을 잘못칠 경우 오류가 난 것. 


그런데, 깃허브에는 올라가 있는게 이상하기에 
깃허브 푸쉬해도 remote에는 영향 안 받는, .env 파일에
1. 데이터베이스를 하나 더 만들어서
2. 테스트 해보기 -> Mysql에 뜨는지. 
 
 


3. 좋아요 중복 방지

"보통 좋아요의 기능은 좋아요를 하고, 좋아요를 해제하는 이분법적 사고가 가미가 됩니다.
따라서 동일 유저가 동일 게시글에 대한 좋아요를 남길 수 없게 unique constraint (user_id, thread_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)
);
 
 
이것도 마찬가지. 
mysql 데이터베이스에 수정이 되지 않아서, 
다시 해야 한다. 


4. 화요일 2일차 첫 standup meeting 후 프론트 요청 사항 반영 

첫 commit 이후, standup meeting에서 프론트엔드 측에서, key 값 통일 요청을 하셔서
commit push 전에 수정 후 올리기로 했다.
 
1차 프로젝트에서는, 백엔드와 프론트가 함께 key를 정하고, 통일하는게 아니라
mock data 대로 각자 보고 맞추는 것이라, 
기준이 있고, 기준이 문서화 돼서 오해의 소지가 없어서 좋았다.
문서화 된 게 있으니, 생산성 있는 소통만 할 수 있었다.
 
 
키를 언더바를 카멜케이스로, 키 순서와 같은 것을 수정했다. 
 
(vscode 내의 dbmate로 만든 데이터베이스는 
키의 형태와 내용을 통일하지 않아도 된다. 프론트에겐 영향이 없기에. 
그래서 우리는 updateAT과 혹시 모를 추가 기능 구현을 위해, profileimage birthday phonenumber와 같은 기능을 더 넣었다. )

 
 
 
지금은
mockdata 보고 하지만, 
나중에는 프론트랑 계속 소통하면서, 키를 맞춰야한다. 


5.  .gitignore에 잘못된 주소로, 올라가지 않아야 할 파일이 올라간 경우

 
.gitignore에 넣은 파일 (깃허브에 올라가지 않도록 주소 넣는 파일)의 
 
주소를 잘못 쳐서 (--> 절대경로인데 상대경로로 넣어서)
 
1. 주소도 다시 치고
2. git에서 제거 후에 다시 올려야 한다. 
 -
1. 주소 수정: 상대경로로 db/schema.sql  하고 
2. 지우는 방법은, 터미널에 
git rm -r db/schema.sql 
 

*절대경로
 /db/migrations/schema.sql 

*상대경로가 
. 찍는거다 

6. "필요한 주석은 상용화될 코드로의 푸시인 main 브랜치 푸시에서는 꼭 삭제해주시고 올려주심을 습관화해주세요!"

 
--> 주석 다 지움
 
 
내가 보기 쉬우려고 
// 회원가입
// 데이터베이스 저장
// 로그인 
 
이런 것을 넣었는데 깔끔한 코드를 위해. 


7. myDataSource는 연습단계용이고, 앞으로 AppDataSource 명칭 사용을 해야겠다. 

그리고, node.js에서는 알파벳 앞글자를 대문자로 해야하는. 


이제 수정 다 했으니 다시 올려보자!

 

github pr 후 수정 후 다시 올리려면, 

git checkout [branch 이름] (만약에 현재 위치가, 그 branch가 아니라면, git branch로 확인)
git add . (다 올릴거니까 - 근데 만약 나중에, 초기세팅한 vscode에서/ 추가한 service 파일을 git add 다음에 넣으면 됨) 
git commt -m "초기세팅 수정1" 
git remote는 안 해도 됨 (이미 올릴 때 저장소에 연결했으니까) 
바로 git push -u origin 


 
수정 후 commit 계속 하게 되면서, 익숙해졌지만,
헷갈린 부분 기록하기.

헷갈리지 말 것: 
git add + [파일 이름] 
git push -u origin +  [branch 이름]