alt
Home Sequelize에서 DB Migration하기
Post
Cancel

Sequelize에서 DB Migration하기


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

This post is licensed under CC BY 4.0 by the author.