본문 바로가기

Backend/DB

(16)
배포 전 안쓰는 migration 파일 삭제에 대하여 라이브 배포가 나가기 전에 migration 파일 점검을 해야 했다. 근데 내 로컬에서만 삭제하고, 삭제한 파일을 push 하지 않았던 문제가 있었다. 이 코드가 다른 곳에서 쓰이지는 않지만, 배포 나가기 전이라 안전한 방법으로 migration 파일 삭제하기 위한 방법을 알게 되었다.  1) Drop에 관한 migration 파일 작성 만약 내가 project_post 라는 테이블을 만들었다고 치자. 이런 상황에서 기존에 CreateProjectPost migration은 이미 다른 환경에서 돌아갔었을 것이므로, 이 project_post 라는 테이블을 삭제하는 migration 파일을 만들어야 한다.  기존 CreateProjectPost.ts migration 파일import { MigrationI..
db migration 파일을 작업하면서 알게된 점 1. initial-data 파일 작성 > migration 파일 작성 순서 > migration:run 하거나 브랜치를 dev 등 환경에 배포 2. migration 파일은 한 번 돌고나면 다시 적용X이므로 내가 DB 테이블에서 initial data 파일에 작성한 내용을 직접 배포해야 함 3. typeorm migration:create ./libs/경로2/src/database/migration/파일명 과 같이 터미널 안에서 명령어로 작성 가능 4. 1709301133216과 같이 3번의 명령어로 마이그레이션 파일을 만들면 timestamp가 앞에 붙는데 여기서 ~216 ~217 처럼 시간 순서대로 마이그레이션 파일이 실행된다. 만약 순서가 어긋난 경우 직접 timestamp의 시간을 수정해서 파일..
MYSQL) 현재 DB의 timezone 확인해보기 현재 DB의 timezone을 확인해보기 위해 다음과 같이 진행하였다. 1) intelliJ 터미널 접속 2) mysql 입력 3) SHOW VARIABLES LIKE '%time_zone%';
timestamp값이 년-월-일만 나왔던 경우(분,초가 안나옴!) entity에서 timestamp 컬럼을 만들고, 아래와 같이 설정을 해주었다. 그리고 DB 컬럼에서 data type을 Date로 했더니.. @Column({ type: 'timestamp' }) @Transform(transformDate) timestamp: LocalDateTime;  timestamp가 년-월-일 밖에 찍혀서 나오지 않았다! 내가 원하던건 년-월-일 ~ 분 ~ 초 까지 찍혀서 나오는 것이었는데, timestamp를 나름 썼다고 생각했지만 나의 오산이었다. 해결 방법 timestamp의 Date Type을 Date > Timestamp로 변경하였다. * 참고로 sql timestamp data type이 있다고 하니, 이걸 좀 참고해야겠다. https://www.w3schools..
created_at과 updated_at에서 날짜가 찍혀서 안나오는 문제 문제 상황 db 컬럼에 created_at과 updated_at을 했는데 컬럼값에 날짜가 찍혀나오지 않았다. 문제 해결 Data Type : timestamp Default Expression: now() -> postgres의 경우 / CURRENT_TIMESTAMP -> MySQL의 경우 로 설정을 해주어야 값이 노출된다. 이 점을 명심할 것!
table이나 column drop할때 오류 최소화 하는법 1) db 컬럼을 날리기(drop)전에 develop 브랜치에 의존성 제거(연관관계가 잡혀있는지?)하고 -> 의존성 제거한 코드를 merge & 배포 2) 컬럼을 drop 하면서 오류가 나는 게 있는지 확인 3) develop branch를 main 브랜치에 merge & 배포 4) main (prod) db에서도 컬럼 날리기(drop)
hard delete와 soft delete의 차이점 hard delete와 soft delete라는 단어를 듣게 되었다. 삭제하는데 hard하게 하는건 뭐고 soft하게 하는건 뭐고,, 무슨 차이인지 궁금해서 찾아보았다. 일단 DB에서 삭제 방법은 hard delete(물리삭제)와 soft delete(논리삭제)가 있다. hard delete soft delete 레코드를 전체적으로 삭제 데이터 사용 유무값(flag)만 바꿔 사용자에게 보이지 않게 하는 삭제 데이터베이스에서 DELETE 키워드 이용 DB에서 특정 column 사용 여부를 UPDATE 시켜 사용자에게 보이지 않게 처리 장점 : 삭제 처리를 통해 테이블 디스크의 사용량 줄일 수 있음 + SQL 작성 편리함 / 단점 : 데이터 복구 불가능 장점 : 복구가 필요한 데이터의 경우 손쉽게 복구 가능..
Docker가 바라보는 script를 잘 파악하자 (feat. role "postgres" does not exist) 같은 db를 바라보는 repo를 옮겨다니면서 docker로 postgre를 실행하는데 있어서 계속 에러가 났었다. 이전엔 연결이 잘 됐는데..?! 내가 뭘 잘못한건가 싶어서 다시 한번 보았다. 결론적으로 나는 dev를 바라보는 script를 찾아보고 있었으나, Run 실행환경(start:local)은 local script를 바라보고 있었던 것이다. [Nest] 67804 - 08/23/2023, 9:32:00 PM ERROR [ExceptionHandler] role "postgres" does not exist .local.env 파일 DB_HOST=localhost DB_PORT=5432 DB_NAME=postgres 그러나, start:dev로 다시 실행했을때 위에서 발생했을때 에러는 사라졌다. ..
UUID의 역할 (DB 그리고 로컬메모리) Entity쪽 코드를 작성하다가 항상 id:UUID를 주는 경우가 많았다. uuid는 id의 한 종류인건가?하고 대수롭지 않게 여겼었다가 퇴근하고 강의를 듣다가 UUID의 역할에 대해 나오게 되어 정리하고자 한다. 이런 개념들이 아직까지는 개인적으로 많이 부족한 것 같다. ※ Ex) 게시글마다 고유한 id값이 있다. 게시글1의 id : aaab1 게시글2의 id : aaab2 이런식으로. id값에 따라 DB 사용과 로컬메모리 사용의 차이점 DB 사용 (X) 로컬메모리 사용(O) DB 사용(O) 로컬메모리 사용(X) 임의로 id값에 대하여 unique 하도록 만들어야함. -> UUID 모듈 이용 DB가 알아서 id값이 unique 하도록 만들어줌 이런 차이가 있었다. uuid 모듈 사용법 1) npm in..
'비율(ratio)'를 DB에 저장하려고 할 때 그 기준을 잡으려면? 비율을 맞이하면 DB에 어떻게 저장을 해야하는지 감이 오지 않을때가 있다. 만약에 ratio가 1:0.8510 1:1.2434와 같은 값이 있다고 치자. 그렇다면 왼쪽의 1은 비율이 고정되어 있고, 오른쪽의 비율만 계속해서 변하는 상황이다. 내가 생각했던 방법은 1:0.8510 이 비율 전체를 DB에 저장해야 하는건가?라는 고민이 있었다. 그러나, 물어보니 방법은 두 가지와 같았다. 1) 1과 0.8510 데이터를 각각 따로 저장할 것 2) 왼쪽의 1의 비율 수치는 고정되어 있으니 비율이 계속 바뀌는 오른쪽의 수치만 저장할 것 이었다. 내가 선택한 방법은 왼쪽의 1 비율은 계속 고정이 되어있으므로 계속 비율이 변화하는 오른쪽 수치만 DB에 저장하기로 결정했다.