Query Interface
Sequlize: ORM
Query interface
- DB와의 communication을 위함.(low level)
- 대부분의 Sequlize method들은 query interface의 도움을 받아 구현된다.
Sequelize migration
- 마이그레이션: 이미 운영중인 서비스의 DB를 변경해야 할 때. 개발, 운영, 테스트 환경 등 각각 뿐 아니라 개발자마다도 버전을 다르게 가져갈 수 있고, 기존의 system의 데이터를 보존하면서 새로운 system에 맞게 변경사항 적용
1
2
3
4
5
6
7
8
9
Module.exports = {
up:function(queryInterface, Sequelize){
//Add altering commands here
return promise.
}
down:function(queryInterface, Sequelize){
//Add reverting commands here.
}
}
up & down
- up: DB 변경사항 적용
$ sequelize db:migrate
: up에 정의된 코드 실행
- down: ‘up’ 실행되기 전의 상태로 DB 복원.
$ sequelize db:migrate:undo
: down에 정의된 코드 실행
Trouble Shooting
Docker환경에서 마이그레이션 잘 적용되지 않는 문제 -> Mount 디렉토리 확인
문제 상황: Model을 수정하고 마이그레이션 파일 생성해서 테스트까지 완료했는데, 다른 PC에서 500 code와 함께 컬럼이 존재하지 않는다고 에러
해결: docker 설정부의 MariaDB를 마운트하는 디렉토리 내부에 해당 PC(문제있던)에서 이미 이전의 모델들이 존재했기 때문. 컬럼값이 달라서(이미 어느정도까지 마이그레이션이 진행된 데이터들에 새롭게 하려고해서) 마이그레이션 제대로 되지 않던 것.
- 아래의 마운트 경로
/data/mariadb
디렉토리를 지워버리고 다시 새롭게 만들기
1 2
volumes: - ./data/mariadb:/var/lib/mysql:Z
- 아래의 마운트 경로
Reference)
https://sequelize.org/master/manual/query-interface.html