인프런 커뮤니티 질문&답변

rrallvv .J님의 프로필 이미지
rrallvv .J

작성한 질문수

mongoDB 기초부터 실무까지(feat. Node.js)

블로그의 관계 데이터 읽기 소개

데이터베이스 서비스 중 발생할 수 있는 문제

작성

·

234

1

아마존 웹서비스에 배포 한다고해서 갑자기 질문이 생겨서요. 혹시 서비스 도중에 스키마 구조를 변경해야하는 경우가 있을텐데요. 새로 추가할 attributes가 not null이거나 unique일 경우에 강의 초반에도 발생했던 index가 생성이 안된다거나 다른 rest 요청에 오류를 발생시킬수 있을 거 같아서요.

혹시 이부분은 어떻게 다루나요?? 또 참고할만한 좋은 자료가 있을까요?

답변 1

0

rrallvv .J님 안녕하세요 :)

좋은 질문입니다. 우선 우려하신대로 이 경우 index가 생성되지 않습니다. 예를 들어 newField라는 attribute를 추가하게 되면 기존에 생성되었던 문서들은 해당 attribute가 모두 동일한 undefined이겠죠. 그래서 unique index 적용이 불가능해지죠.

다행히 이 경우 unique index 생성시 오류가 발생하지는 않아요. unique index가 생성되지 않을뿐입니다.

그러면 어떻게 하면 되느냐. 일단 수정된 스키마와 API들을 배포하세요. 그리고 간단한 스크립트를 짜서 과거 데이터들을 새로운 스키마에 맞게 업데이트 처리를 해주세요. 전 이 스크립트를 배포하지는 않아요. 로컬(개발하고 있는 컴퓨터)에서 몽고디비 환경변수를 운영으로 잠시 수정을 해줍니다. 그러면 로컬에서 운영 디비 접속이 되는데요. 여기서 스크립트를 한번 실행해서 모든 과거 데이터를 업데이트 해줍니다. 이후에 로컬 환경변소들을 개발환경으로 꼭 바꿔주시구요.

이 업데이트 스크립트를 개발디비로 검증 후 진행하는걸 권장드립니다. 만약 운영디비가 엄청 크다면 운영디비를 그대로 개발디비로 복제한 후 업데이트 스크립트를 검증하는게 좋아요. 발생할 수 있는 예외사항을 확인할 수도 있고요. 그리고 혹시라도 너무 많은 데이터를 한번에 동기화함으로써 디비에 과한 부하가 오는지도 확인 할 수 있겠죠? 이 경우 배치로 돌리거나 혹은 Promise.all대신 for loop으로 하나씩 처리하게 하는 방법들이 있겠죠.

개인 사정이 있어서 답변이 늦었는데 도움이 되었길 바랍니다 :)

rrallvv .J님의 프로필 이미지
rrallvv .J

작성한 질문수

질문하기