개발하고 싶은 초심자

3-4. sequelize.sync()를 활용하여 모든 모델 자동 동기화하기 본문

Project in Codestates/First Project

3-4. sequelize.sync()를 활용하여 모든 모델 자동 동기화하기

정새얀 2022. 5. 17. 19:32

1. sequelize.sync()

지금까지 작성했던 모델을 자동으로 연결해주고자 server/index.js에 sync()를 활용하는 코드를 작성했다.

사실 처음에 해주었다면 좋았겠지만 프로젝트를 보다 완성도 있게 하려고 배우지 않았던 것들을 공부하다 보니

공식문서에서 이제야 발견하게 되었다.

sequelize.sync({ force: false })
.then(() => {
  console.log('데이터베이스 연결 성공')
})
.catch((err) => {
  console.error(err)
})

이렇게만 추가하고 저장한 뒤 서버를 실행했더니, 복수형 이름들의 데이터베이스들이 자동으로 추가되었다.

알아보니 모델을 생성할 때 freezeTableName: true 옵션을 추가해주지 않으면 그렇게 되는 것이었다.

모든 모델들 파일에 옵션을 추가해주고 다시 실행해보았더니 잘 작동되는 것을 확인할 수 있었다.

이러한 옵션들을 알아보면서 추가로 알게 된 것이 있었는데,

select 쿼리문을 날릴 때 자동으로 createdAt, updatedAt을 날리는데, 딱히 timestamp를 찍어주지 않아도 될 때가 있기 때문에 조금 거슬릴 때가 있었다.

이 기능도 timestamps: true 옵션으로 off 할 수 있다.

 

또 하나는 지금 index.js에 작성한 코드에는 force: false로 지정이 되어 있는데,

db를 변경할 일이 있을 때 강제로 업데이트를 하게 하려면 false를 true로 변경해주면 된다는 것이다.

원래 있던 테이블에 칼럼이 바뀌거나 하는 등의 기능은 force를 사용해야 하지만,

force를 사용했을 때 이전에 있던 db의 내용은 전부 날아가기 때문에 사용에 주의해야 한다.

 

이러한 내용 때문에 alter: true라는 방법도 있는데, alter는 기존 db의 데이터들이 날아가지 않고 새로운 테이블이 생긴 경우에 사용이 가능하다는 것이다.

 

 

Comments